1

共有システムを実装するためのデータベースを選択する必要があります。

私のシステムにはユーザーとドキュメントがあります。ドキュメントを数人のユーザーと共有する必要があります。


例:2人のユーザーがいて、1つのドキュメントがあります。

したがって、その1つのドキュメントを両方のユーザーと共有する必要がある場合は、次の可能な解決策を実行できます。

私が使用している現在の方法は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のようなKey-Valueストアにどのように実装するかはまだわかりません。

だから私はただ知りたかったのですが、私が上で与えたMongoDBの方法は、最良の解決策でしょうか?そして、これを実装できる他の方法はありますか?たぶん別のデータベースソリューションで?Redisで実装する必要がありますか?

どのデータベースとどの方法を選択する必要があり、データを共有するのに最適であり、その理由は何ですか?

注:拡張性が高く永続的なものが必要です。:D

ありがとう。:D

4

2 に答える 2

1

この単純な例(誰が何を所有しているのかを保持する必要がある)だけを考えると、SQLが最も適切であるように思われます。これは、ドキュメントの数、最も人気のあるドキュメント、最もアクティブなユーザーなどのレポートなど、追加のオプションを無料で提供するためです。コストがほぼゼロで、データの一貫性が向上します(重複がなく、外部キーの可能性があります)。もちろん、何百万ものドキュメントがない限り、これは有効です。

ドキュメント指向とリレーショナルDBのどちらかを選択した場合、主にドキュメント自体の構造に基づいて決定を下します。それらがすべて均一であるか、タイプごとに異なるフィールドを持っているかどうかにかかわらず、コンテンツで検索する機能を備えたサブドキュメントまたは配列をネストしますか?

于 2012-06-13T21:55:58.293 に答える
1

実際には、多対多の関係を表す必要があります。1人のユーザーが複数のドキュメントを持つことができます。1つのドキュメントを複数のユーザー間で共有できます。

この質問に対する私の以前の回答を参照してください:redisで多対多の関係を築く方法

Redisでは、設定されたデータ型との関係を表すことはかなり一般的なパターンです。この種のデータモデルでは、MongoDBよりも優れたパフォーマンスが期待できます。また、ボーナスとして、どのユーザーが特定のドキュメントリストを共有しているか、またはどのドキュメントが特定のユーザーセットによって共有されているかを簡単かつ効率的に見つけることができます。

于 2012-06-13T22:21:52.483 に答える