postgres许多表与一个巨大的表

时间:2017-01-11 10:47:44

标签: postgresql database-design

我正在使用postgresql db。 我的应用程序管理许多相同类型的对象。 对于每个对象,我的应用程序执行密集的数据库写入 - 每个对象至少每30秒向数据库插入一行。我还需要通过对象id检索数据。 我的问题是如何设计数据库最好?对所有对象使用一个巨大的表(较慢的插入)或为每个对象使用表(更复杂的检索)?

3 个答案:

答案 0 :(得分:1)

表意味着容纳大量相同类型的对象。所以,你的第二个选项,即每个对象一个表,似乎看起来不正确。但当然,需要更多信息。

我的提示:从一张桌子开始。如果遇到问题 - 主要是性能 - 尝试将其拆分。这并不难。

答案 1 :(得分:1)

逻辑上,你应该使用一个表。

然而,所谓的"写放大" PostgreSQL所展示的问题似乎是Uber switeched from PostgreSQL to MySQL的主要原因之一。引用:

  

"对于具有大量二级索引的表,这些   多余的步骤可能导致巨大的低效率。例如,如果   我们有一个表,上面有十几个索引,一个更新   必须将仅由单个索引覆盖的字段传播到   所有12个索引都反映了新行的ctid。"

这是否是您的工作负载的问题,只有测量可以告诉 - 我建议从一个表开始,测量性能,然后切换到多表(或分区,或者可能完全切换DBMS)如果测量结果合理。

答案 2 :(得分:0)

如果您确定所有对象将继续具有相同的属性,则单个表可能是最佳解决方案。

随着表的增长,

INSERT不会显着变慢 - 这是减慢数据修改速度的索引数。

我宁愿担心数据增长。你有摆脱旧数据的设计吗?大DELETE可能会很痛苦;有时分区有帮助。