1

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

我的系统将有用户和文档。我必须与几个用户共享一个文档。


示例:有 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

4

2 回答 2

1

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

请参阅我之前对这个问题的回答:如何在 redis 中建立多对多关系

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

于 2012-06-13T22:21:52.483 回答
1

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

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

于 2012-06-13T21:55:58.293 回答