我正在编写一个 TypeScript-NodeJS 应用程序,并且想要在 NodeJS 应用程序中处理 objectid
和 created_at TIMESTAMP
,而不是使用 MySQL 或 Cassandra 内置UUID
或TIMESTAMP
生成器。
1-首先,我想知道在 Web 服务器应用程序内生成值而不是让数据库生成它们是否是一个好id
主意created_at
?
2- 其次,我想知道如果我使用数据库的内置函数(如uuid()
CassandratoTimestamp(now())
和UUID_TO_BIN(UUID())
MySQL 中的)是否会比使用 NodeJS 增加应用程序的开销/延迟uuid()图书馆?
答案1
关于MySQL 或 MariaDB:
大部分情况下,性能差异可以忽略不计。一般来说,获取一行比使用其中的任何“标准”函数都要昂贵得多。
如果您确实需要两个地方(客户端和服务器)的值,那么在一个地方计算它会更方便。
MySQL 8.0 和 MariaDB 10.7 对 UUID 进行了优化,但可能任何客户端都无法使用这项优化 — — 这项优化会重新排列 UUID 中的位,使其工作方式类似于 TIMESTAMP,从而改善各种操作的“引用局部性”。如果没有这项优化,UUID 会降低大型表的性能。由于这项优化仅适用于类型 1,因此客户端可能无法使用。
TIMESTAMP 不能被信任为唯一。因此,不应在 中 [单独] 使用它们PRIMARY KEY
。
当您有多个客户端独立创建 ID 时,UUID 非常有用。即便如此,通常情况下,auto_inc 也同样简单。