【问题标题】:PostgreSQL database with ~10,000 boolean states per rowPostgreSQL 数据库,每行约 10,000 个布尔状态
【发布时间】: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


【解决方案1】:

我会在 2 个表之间创建一个关系

--------------------------------------------------
| ID | username                                  |
--------------------------------------------------
| 1  | bl-ro                                     |
--------------------------------------------------
| 2  | darkmukke                                 |
--------------------------------------------------

然后是布尔关系

--------------------------------------------------
| ID | fk_user | bool                            |
--------------------------------------------------
| 1  | 1       | true                            |
--------------------------------------------------
| 2  | 1       | false                           |
--------------------------------------------------

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2011-02-17
    • 2022-11-30
    • 1970-01-01
    • 2021-12-31
    • 2021-11-12
    • 2011-05-31
    相关资源
    最近更新 更多