【问题标题】:Sharing a document with users与用户共享文档
【发布时间】:2012-06-16 22:25:28
【问题描述】:

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

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


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

【问题讨论】:

    标签: mongodb redis data-sharing nosql


    【解决方案1】:

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

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

    【讨论】:

    • 我肯定会有数百万个文档和不同文档中的不同数据。所以我认为 SQL 会变慢,而且很难扩展。如果我想使用 NoSQL,我应该怎么做?感谢您的回答。 :D
    • 我对 MongoDB 和大量数据有一定的经验。你的草稿似乎很好。只需一条评论...没有必要在两个方向都有链接。您可以在 members_of_this_doc 上创建索引,并且您将能够进行查询以搜索在该数组中具有特定用户的所有文档。但是,如果您根据 Document._id 键进行分片,那将是有意义的 - 然后用户中的链接将通过仅点击相关分片来节省时间。
    【解决方案2】:

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

    查看我之前对这个问题的回答:how to have relations many to many in redis

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

    【讨论】:

    • 我读了你的回答。 :D ...但是在类别集中放置了一些东西,而在用户集中它失败了,是不是有可能出错?因为它们是两种不同的操作。我知道这对于 MongoDB 也是如此,但是没有可行的解决方案吗?
    • 借助 Redis,您可以使用 MULTI/EXEC 原子块对集合操作进行分组,从而获得全有或全无的语义。见redis.io/topics/transactions
    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多