与用户共享文档

时间:2012-06-13 21:43:56

标签: mongodb redis data-sharing nosql

我必须选择一个数据库来实现共享系统。

我的系统将拥有用户和文档。我必须与一些用户共享一份文件。


实施例: 有2个用户,并且有一个文档。

因此,如果我必须与两个用户共享该文档,我可以做这些可能的解决方案:

我正在使用的当前方法是使用MySQL(我不想使用它):

Relational Databases (MySQL)
    Users Table = user1, user2
    Docs Table = doc1
    Docs-User Relation Table = doc1, user1
                               doc1, user2

我想使用这样的东西:

NoSQL Document Stores (MongoDB)
    Users Documents:
        {
            _id: user1,
            docs_i_have_access_to: {doc1}
        }
        {
            _id: user2,
            docs_i_have_access_to: {doc1}
        }
    Document's Document:
        {
            _id: doc1
            members_of_this_doc: {user1, user2}
        }

我还不知道如何在像Redis这样的键值存储中实现。

所以我只是想知道,我上面给出的MongoDB方式是最好的解决方案吗? 还有其他方法可以实现吗?也许与其他数据库解决方案 我是否应该尝试使用Redis实现它?

我应该选择哪种数据库和哪种方法,最好是分享数据?为什么?

注意:我想要一些高度可扩展且持久的东西。 :d

感谢。 :d

2 个答案:

答案 0 :(得分:1)

只考虑这个简单的例子(你只需要保留谁拥有什么)SQL似乎是最合适的,因为它会免费提供额外的选项,例如报告谁有多少文档,最受欢迎的文档,大多数活跃的用户等几乎没有成本+数据将更加一致(没有重复,可能是外键)。除非您当然有数百万份文件,否则这是有效的。

如果我在面向文档的DB和关系数据库之间做出选择,我会主要根据文档本身的结构做出决定。无论它们是统一的还是可能具有不同类型的不同字段,您是否可以嵌套子文档或数组,并能够按其内容进行搜索。

答案 1 :(得分:1)

实际上,您需要表示多对多关系。一个用户可以拥有多个文档。一个文档可以在多个用户之间共享。

请参阅我之前对此问题的回答:how to have relations many to many in redis

使用Redis,表示与set数据类型的关系是一种非常常见的模式。对于这种数据模型,您可以期望获得比MongoDB更好的性能。作为奖励,您可以轻松有效地查找哪些用户具有共同的给定文档列表,或者哪些文档由给定的一组用户共享。