couchDB 方法建议在 map 阶段发出适当的东西类别,并在 reduce 中对其进行总结。因此,您可以映射所有评论并1
为给定用户发出,然后只打印出来。然而,它需要大量的磁盘存储来构建 couchDB 中所有可跟踪数据的持久视图。顺便说一句,他们也有这个关于关系的 wiki 页面:http ://wiki.apache.org/couchdb/EntityRelationship 。
另一方面,Riak 拥有建立关系的工具。它是链接。您可以将链接(此处为注释)文档的地址输入到“根”文档(此处为用户文档)。它有一个技巧。如果它是分发的,它可能会一次在多个位置进行修改。它会导致冲突,结果是巨大的矢量时钟树:/ ..不是那么糟糕,不是那么好。
Riak 还有另一个“机制”。它有 2 层键名空间,即桶和键。因此,以学生为例,如果我们有俱乐部 A、B 和 C 以及学生 StudentX、StudentY,您可以保持以下约定:
{ Key = {ClubA, StudentX}, Value = true },
{ Key = {ClubB, StudentX}, Value = true },
{ Key = {ClubA, StudentY}, Value = true }
并读取关系只需列出给定存储桶中的键。那有什么问题?这该死的慢。列出存储桶从来都不是 riak 的优先事项。它越来越好。顺便提一句。您不会浪费内存,因为此示例{true}
可以链接到 StudentX 或 Y 的单个完整配置文件(此处不可能发生冲突)。
如您所见,NoSQL!= NoSQL。您需要查看具体的实现并自己进行测试。
之前提到的列存储看起来很适合关系..但这完全取决于您的 A 和 C 以及 P 的需求;)如果您不需要 A 并且您的字节数少于 Peta 就离开它,继续使用 MySql 或 Postgres。
祝你好运