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