【问题标题】:Best way to store mappings in a database在数据库中存储映射的最佳方式
【发布时间】:2018-03-16 22:39:37
【问题描述】:

假设我有一个 employees 表(大约有一百万员工)和一个 tasks 表(有几百个任务)。

现在,我有一个机制来预测员工完成任务的概率(百分比)——假设我有四个这样的机制,每个机制都输出它自己的概率。

综合起来,我现在需要存储 n1(员工)乘以 n2(任务)乘以 n3(机制)的结果。

我想知道存储这些结果的最佳方式是什么。

我有几个选择和想法:

  • employeestasks 表中维护一列 (JSONField) -- 注意:如果其中一个值发生更改,则必须更新整个列数据

  • 维护第三张表 predictions,其中包含 employeetask 的外键,其中有一列用于存储 predicted_probability -- 担心:必须存储 n1 * n2 * n3 条记录,我担心可扩展性和性能

感谢您的帮助。

PS:我正在使用带有 postgres 的 Django

【问题讨论】:

  • 存储过程可能吗?
  • predictions 表是正确的方法。根据您访问数据的方式,表的大小无关紧要。例如我希望阅读单个员工的预测具有相当稳定的表现。只有当您需要处理所有(或大部分)行时,大表才会成为问题。 如果你在测试后遇到性能问题,你可以例如按任务或按任务和机制对表进行分区(取决于查询的结构)
  • 感谢@a_horse_with_no_name 的评论。请将其添加为答案,以便我将其标记为已回答。
  • @Tomm 在这种情况下你打算如何使用存储过程?

标签: django postgresql database-design scalability query-performance


【解决方案1】:

predictions 表是正确的方法。根据您访问数据的方式,表的大小无关紧要。例如我希望阅读单个员工的预测具有相当稳定的表现。只有当您需要处理所有(或大部分)行时,大表才会成为问题。如果您在测试后遇到性能问题,您可以例如按任务或按任务和机制对表进行分区(取决于查询的结构)

-感谢@a_horse_with_no_name

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 2011-04-02
    • 1970-01-01
    • 2016-07-19
    • 2020-07-09
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多