我正在将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/