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

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

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

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

我一直在想也许这个表可以按用户的主键排序,这样我的查询就可以更有效率,但处理这种情况似乎仍然是不好的方式。

任何解决方案都将受到高度赞赏,无论是数据库选择本身 - 关系与否,不同的 ERD 或其他任何东西

谢谢!

最佳答案

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

其次:您有 1 亿个条目作为 MAXIMUM。我认为您的数据不够大,没有涵盖 3V 的大数据(容量:数据量,速度:数据进出速度,种类:数据类型和来源的范围)。您可以通过关系 DBMS 来处理它。 但是,如果您有超过 1 亿个条目(例如每天或每周 1 亿个条目),您应该使用大数据技术。

第三:要在查询中获得最佳性能,您可以使用一些内存中的 DBMS。您有 1 亿个条目,其中包含 3 个 Long(或 BigInt)ID。所以你大约需要最大 100 * 3 * 8 MB (2400 MB=2.4 GB) 内存。 (我确定您有大型服务器来处理 1 万个用户和 1 万个实体。)

关于database - 如何有效地保存每个实体的用户状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47223955/

相关文章:

algorithm - 在大图上实现算法的最佳方式

c++ - 在 OpenGL 中制作一个简单的形状移动(形状在数据结构中)

c++ - 有没有办法访问 STL 容器适配器的底层容器?

c# - 在两个不同mysql数据库的两个表之间复制大量行

mongodb - 在 Mongo 中,如何显示集合的索引?

database - 如果我们每毫秒生成一个数字,那么一天会有多少数据?

mysql - 具有多个左连接的查询 - points 列值不正确

PHP : Using a variable to hold a table name, 并在查询中使用该变量

mysql - 命名数据库表以提供自然组织的最佳实践是什么?

mysql - 数据库设计——来自多个来源的独特数据