我正在尝试理解,是让数据库管理ID /序列生成以用作PK,还是让应用程序简单地生成自己的ID,比如随机的64位数字,哪个更好。
我怀疑应用程序+随机生成将会更有性能,因为需要管理的并发性更少,但话又说回来,如果数据库生成一个序列,那么它总是知道下一步是有序的,并且可以优化索引维护。
发布于 2016-04-02 08:35:13
PK背后的理念是它们在设计上是独一无二的。使用64位随机数在设计上并不是唯一的-因此您必须为PK冲突准备代码,然后随机化新的id,并将新行再次提交到数据库。这可能是一个相当麻烦的问题。让编写者以并发方式插入新数据最终会使这些问题变得更糟。
数据库可以很好地生成唯一的is毕竟,PK问题是非常标准的东西,并且有很好的标准解决方案。
ID生成器本身是一个瓶颈-因为它必须确保唯一性,即使它是从多个会话并行调用的。例如,Oracle有序列生成器,它预先生成并“缓存”每个会话的即将到来的数字,这样就解决了并发性问题。
我们可以从Mr.Tom Kyte学到的一件重要的事情是:使用表中的真实数据和真实负载来衡量你的用例。这是真正智慧的唯一来源:)
我的两点意见:数据库引擎有很大的不同!共享你正在使用的数据库有助于获得更好的答案。
https://stackoverflow.com/questions/36367227
复制相似问题