【发布时间】:2017-08-15 08:57:18
【问题描述】:
对于如何设计这个特定的数据库,我有点不知所措。它具有以下特点:
- 预计有 300 万多行对应于“用户”;
- 每个“用户”都与他们关联了大约 10,000 个唯一的布尔状态;
- 这些状态本质上是稀疏的,将来会添加其他状态,可能不应该存储在有序列表中;
- 状态将频繁更新,在 2 小时内以大约 20 的速率更新,每 24 小时平均每个活跃“用户”;
显而易见的设计是在用户和状态之间建立一个查找表,但我担心这在查找每个用户的状态时不够快,预计查找表中有 50 亿多行。
感谢任何建议。
【问题讨论】:
-
我目前最好的解决方案是为每个用户存储一个二进制流,并将流的各个位映射到各个状态。关于这一点,我忘了包括一个重要的细节:我根本不需要根据用户的状态非常频繁地查找用户。但是,当我确实需要更频繁地进行这些查找时,它并不理想或非常可扩展。
-
如果您担心明显设计的速度,您需要创建 som 测试数据并进行检查,同时确保您创建的索引与查询相关。对于任何不明显的解决方案,您也需要这样做,它们的性能甚至可能比明显的设计差得多。
-
如果我理解你的话,一个用户的记录将在 2 小时内经历大约 20 次更新,那么直到第二天什么都没有?您是否希望所有用户都在同一个 2 小时窗口内更新?还是在 24 小时内均匀分布?并且您偶尔需要查找具有给定状态集的用户?
-
@AdamBenson 是的,这是正确的。是的,分布在 24 小时内。具有给定状态的所有用户的偶尔搜索将用于分析,无需“实时”。
-
@nos 谢谢你的评论,你说得对,这是值得测试的东西!
标签: database postgresql database-design