我们的PostgreSQL表和序列使用整数作为ID。
根据这一点,限制是https://www.postgresql.org/docs/9.6/static/datatype-numeric.html
integer 4 bytes typical choice for integer -2147483648 to +2147483647
该应用程序是一个时间线调度器,类似于Outlook,它在每次添加/编辑/删除时删除并重新创建约会。无论何时进行更改,您都可以在时间线中引入新的空白,或者删除旧的空白,我们也将其作为定期约会保存。
因此,每个常见的Add/Edit/Delete操作都有可能耗尽5-6新ID(我们立即将其保存为Ajax操作),而不仅仅是1。在一天的约会完成之前,由于附加的间隙(“假”-appt),您可能会浪费大约30-50个ID。持久化,这是业务需求。
问:我们会很快用完整数ID吗?如果我们这样做了,那么调整现有的PostgreSQL DB以使用BIGINT处理ID和序列是否很容易呢?
发布于 2017-12-13 12:47:47
如果这样做,是否可以轻松地调整现有的PostgreSQL DB以使用BIGINT来处理ID和序列
序列总是在内部使用bigint,所以您只需要使用序列来调整列。
但是,将列从integer
更改为bigint
需要重写表,因为列的存储会发生更改(整数和bigint是固定宽度的数据类型)。这反过来需要表上的独占锁,如果停止对数据库的访问,这可能会更容易。这需要多长时间取决于表的大小(列数、数和行数)。
我们会很快用完整数ID吗?
假设你每秒钟“烧掉”一个序列号,一天24小时,每周7天,你将在大约68年内耗尽整数(如果允许负数的话,时间是整数的两倍)。这应该给你足够的时间来计划停机时间。
https://stackoverflow.com/questions/47781189
复制相似问题