【问题标题】:Should I use Postgres' bigserial for records in a new application?我应该在新应用程序中使用 Postgres 的 bigserial 记录吗?
【发布时间】:2014-10-21 07:43:19
【问题描述】:

我正在开发一个将数据存储在 PostgreSQL 数据库中的新应用程序。除其他内容外,此类数据是来自某些测量设备的仪表记录。每个客户可能有成百上千的这些设备,而且通常每天都提供很少的记录。较新的记录通过简单地删除较旧的记录来替换较旧的记录,并作为具有新 ID 的新记录插入。我的公司不知道我们每天真正需要存储多少客户和多少测量设备和记录。

由于这是一个新应用程序,我想就使用serialbigserial 作为计量记录的ID 征求您的意见。当前的 x64 CPU 等是否有明显的性能下降? ID 字段的存储应该增加 2 倍,对吧?为什么不使用bigserial 有什么明显的理由吗?

谢谢!

【问题讨论】:

    标签: java sql postgresql sqldatatypes


    【解决方案1】:

    bigserial 数据类型作为表的序列和主键没有明显的性能问题。详情请阅读documentationolder question about subject

    顺便说一句:如果你有 10000 台设备并且每个设备每天产生 10 条记录,整数就足够 60 年,所以我认为整数就足够了 ;-)

    【讨论】:

    • 为什么不只使用 64 位整数并确保年龄安全? :) 你付出的唯一代价就是一些内存,反正很便宜。
    • @uraf 你是对的,内存很便宜,但目前的 ssd 磁盘不是 ;-)
    • 这不仅仅是每天那 10 条记录,我特别想到了由于错误期间回滚事务等造成的差距。当然,这些根本不应该经常发生……这只是一种直觉。 :-)
    【解决方案2】:

    就性能而言,没有区别 - 假设 PostgreSQL 已正确编译以利用 x86_64 平台。例如,添加两个 32 位整数与添加 64 位整数所用的时间相同。但是,如果它是为普通 x86(32 位)编译的,性能将会有一些(边际?)下降,因为它需要以某种方式仅使用 32 位寄存器来模拟 64 位算术。

    简而言之:确保您使用 64 位版本的 PostgreSQL,您应该一切顺利!

    【讨论】:

    • 在 CREATE SEQUENCE 的文档中我之前没有认识到的另一个有趣的声明:“序列基于 bigint 算术[...]在一些较旧的平台上[...]序列使用常规整数算术 [...]" 所以 32 位整数似乎真的是某种遗产。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2010-11-07
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多