小编Mat*_*tej的帖子

PostgreSQL:将在整数列中用完ID

问题

我们正在PostgreSQL之上构建一个Java应用程序.它非常大而且成功,它应该能够至少运行几年.

不幸的是,我们(好吧,我)在设计过程的早期阶段犯了一个严重的错误:所有的数据库ID都是整数,从一个共享序列中分发出来.

Java的max int是2 ^ 31-1,所以大约有2亿.这同样适用于PostgreSQL的整数类型.该系统目前每天消耗大约1万个ID,随着新用户的增加,这个速度正在上升.

有一天,ID将耗尽并溢出.

我们正在寻找解决问题的方法.让我们立刻明白这一点:切换到Java long和Postgres bigint是一个干净的解决方案,但这是一项大量的工作.我们需要尽可能地推迟它.

到目前为止我们已经有了一些想法:

  • 不要为一切使用一个序列,给每个表自己的序列.
    • 优点:这给了我们多达N倍的时间,其中N是表的数量.
    • 缺点:我们喜欢每一行都有唯一ID的事实.
  • 停止使用某些表的序列ID.例如,具有客户事件的表实际上不需要ID:customer, timestamp是完全有效的主键.
    • 优点:我们的一些最大的生猪可以通过这种方式改变.
    • 缺点:非常重要的工作量.
  • 停止在空记录上浪费ID.这种情况发生在一些子表中,例如客户联系信息.使记录始终存在使代码更简单,但这意味着许多客户存储了空的联系信息记录.
    • 优点:我们的一些最大的身份证可以通过这种方式修复.
    • 缺点:我们失去了代码简单性.
  • 每个新表必须使用long/ bigint使用新序列.
    • 优点:至少我们不会让情况变得更糟.
    • 缺点:与其余代码的接触面将是丑陋的.

在这些限制下,还有哪些其他方法会延迟ID耗尽?

java postgresql

6
推荐指数
1
解决办法
776
查看次数

标签 统计

java ×1

postgresql ×1