如何有效地保存每个实体的用户状态?

时间:2017-11-10 13:31:16

标签: database data-structures database-design many-to-many entity-relationship

TLDR:如何在我的应用程序的每个实体上保存每个用户的状态,避免使用笛卡尔产品?

假设我有10K实体和10K用户,每个用户每个实体都有一个状态。为了管理我的用户,感觉就像我必须在某个笛卡尔表上保存每个用户的条目,这将有1亿个条目,这似乎是不合理的..

我一直在想这个表可能会被用户的主键排序,所以我的查询可能更有效率,但它仍然是处理这种情况的坏方法。

任何解决方案都会受到高度赞赏,不管它是否与数据库选择本身有关 - 关系与否,不同的ERD或其他任何内容

谢谢!

1 个答案:

答案 0 :(得分:0)

首先:根据您的提问,所有用户都可以拥有每个实体的状态,并且应保存所有这些信息。您有1亿个具有相同元数据的条目(entityID,userID,statusID)。所以你在User和Entity之间有Cartesian-Product。数据建模模式没有任何ERD改进。

其次:您有1亿条条目为MAXIMUM。我认为您的数据不够大,并且不包括3V的BIG数据(数据量:数据量,速度:数据输入和输出的速度,品种:数据类型和来源的范围)。您可以通过关系DBMS来处理它。 但是,如果您有超过1亿条目(例如每天或每周1亿条目),则应使用BIG Data技术。

第三:要在查询中获得最大性能,您可以使用一些内存数据库管理系统。您有1亿条带有3个Long(或BigInt)ID的条目。因此,您大约需要最大100 * 3 * 8 MB(2400 MB = 2.4 GB)的内存。 (我确信你有Big Server可以处理拥有10k实体的10k用户。)