PK生成性能:DB生成序列或app生成随机



我试图了解数据库管理id/序列生成以用作PK还是让应用程序简单地将自己的id生成为随机64位数字更具性能。

我的怀疑是,应用程序+随机生成将更具性能,因为需要管理的并发性更少,但话说回来,如果DB生成一个序列,那么它总是知道接下来会发生什么,并且可以优化索引维护。

PK背后的理念是它们在设计上是独一无二的。使用64位随机数在设计上并不是唯一的,所以你必须为PK冲突准备代码,然后随机化一个新的id,并再次将新行提交到数据库。这可能相当麻烦。让编写器在并发中插入新数据最终会使这些问题变得更糟。

数据库可以很好地生成唯一的id——毕竟,PK问题是非常标准的,而且有很好的标准解决方案。

ID生成器本身就是一个瓶颈,因为它必须确保唯一性,即使它是从多个会话并行调用的。例如,Oracle有序列生成器,它预生成并"缓存"每个会话即将到来的数字,从而解决并发问题。

我们可以从Tom Kyte先生那里学到一件重要的事情:使用表中真实的数据和真实的负载来衡量您的用例。这是真正智慧的唯一来源:)

我的两分钱:数据库引擎差别很大!共享您正在使用的数据库有助于获得更好的答案。

最新更新