我正在研究一种从相机收集快照并将该快照的记录保存到快照表中的软件。我们有数千个摄像头和数亿个快照记录。每个快照记录仅包含少量数据 - id,camera_id,时间戳和注释(字符串字段以获取其他信息)。
我们开始注意到某些查询中的性能问题,主要是在给定时间范围内获取大量快照。除了升级Postgres运行的硬件外,我们还在寻找其他方法来改善整个系统的性能。
在使用MongoDB之前,团队有类似的情况,其中一个用于摄像头,一个用于快照。他们切换到为每个摄像头使用单独的快照表,从而产生了数千个快照表。这种性能提高了10倍而不会出现新问题。
现在我们在Postgres面临着同样的问题。即使上述解决方案有效,但似乎并不是数据库可以优化的东西。在Postgres做同样的事情会是一个疯狂的想法吗?您通常使用的许多表中是否存在已知限制?我无法找到这个用例的好信息。
答案 0 :(得分:2)
看起来分区对您有用,但我看到一条说明large numbers (>100) of partitions can be detrimental的说明。您可能需要几千个分区,但如果您的查询一次不涉及多个分区,则可能不会产生负面影响。从Evercam的知识中,他们可能不会。