我正在将Mnesia与Erlang一起使用,但是此问题适用于任何键值db,例如couchdb等。

我试图摆脱RDBMS的思考过程,但是我做不到
围绕如何有效地实现这种模式进行研究。

假设我有一个用户记录,而他有许多SubItemA记录,
许多SubItem B记录,因此:

User
-SubItem A
--SubItem B
...


我需要在子项目B上运行查询。
这个嵌套吗?我应该将其标准化以使其更快吗?

我听说有人使用数据复制,所以数据既是
嵌套且分开,这是荒谬的还是实际上在
某些情况下?

最佳答案

潜在的问题是,什么时候性能足够好?

如果您确实确实需要详细检查每个SubItem B,并且用户B的大小主导着字典的整体大小,那么对用户字典进行表扫描就不会产生过多的开销。

如果这还不够好,请对其进行规范化,这样就可以避免在查询子项B时预先读取所有用户和子项A的数据。在子项B中使用复合键,例如(UserId,SubItemAId,SubItemBId)如果表是有序的字典,则可以进行范围查询。

如果这完全破坏了您的User / SubItem A查询性能,则将数据复制作为最后的选择,因为它更容易出错。

关于database-design - 您如何设计模式以有效查询键值数据库中的嵌套项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/607746/

10-10 03:33