マルチユーザー向けのCouchDBモデリング
-
02-07-2019 - |
質問
ドキュメントデータベース、特にCouchDBのシンプルさについてはすでに興奮しています。しかし、そのようなデータベースがマルチユーザーシステムにとって実行可能なオプションであるかどうかを理解するのは困難です。これらのシステムは、ドキュメントデータベースが提供しないレコード間の何らかの関係を必要とするため。
このような場合、それは完全に間違ったツールですか?または、いくつかのタグ付けおよび一時ビューがこれを達成する方法ですか?または......
更新:
私はこれまでのところ答えを理解しています。しかし、質問を少し言い換えてみましょう。通常、CouchDBに適した半構造化データが大量にあるとします。 " type = post"のようにタグ付けできます。および「年= 2008」。私の質問は、このタイプのタグ付けをどこまで使用できるかということです。 10.000個の名前を持つ配列フィールドを作成できますか?または、これを行うより良い方法はありますか?このドキュメントに基づいた意味での考え方を理解することです。
解決
メーリングリストは、この質問にかなり適しています。経験則は、変化する可能性があり、成長する可能性が高いドキュメントにのみデータを保存することでした。データが大きくなる可能性が高い場合は、個別のドキュメントを保存することをお勧めします。
したがって、マルチユーザーシステムの場合、ACLベースのアクセス許可を実装する1つの方法は、適切なアクセス許可を指定してuser_idをdoc_idにマッピングする「許可ドキュメント」を作成することです。
{
_id: "permission_doc_1",
type: "acl",
user: "John",
docid: "John's Account Info",
read: true,
write: true
}
そして、あなたの見解は次のようなものになるでしょう
function(doc)
{
emit([doc.user, doc.docid], {"read": doc.read, "write": doc.write});
}
また、docidとuseridが与えられると、パーミッションのチェックは次のようになります:
http://localhost:5984/db/_view/permissions/all?key=["John", "John's Account Info"]
明らかに、これには、クライアントとソファの間に何らかの仲介者が必要であり、これにより許可が適用されていることを確認します。
他のヒント
マルチユーザーシステムはリレーショナルデータベースを必要にしませんが、RDBMSは膨大な数の(特にCRUD)アプリケーションのデータストレージ/検索の主要な技術です。
過去のドキュメント/オブジェクト指向の分散データベースソリューションを読みたい場合は、「Lotus Notes / Domino」で検索してください。 (この分野の成熟した技術/製品であり、ドキュメントベースのパラダイムでのアプリケーションの設計方法に関する十分な背景知識があります。従来は、ワークフロータイプのアプリケーションに非常に適しています。)
CouchDBで具体的に確認してください:
http://wiki.apache.org/couchdb/ (これはすべきではありません驚き)
http://seanoc.wordpress.com/2007/ 10/12 / more-on-couchdb / (読みやすい説明の概要)
http://twit.tv/floss36 (CouchDBに関するポッドキャストインタビュー)
@micahwittmanの言うこと。簡単な追加:一時ビューは、本番システムでは使用しないでください。開発専用です。パーマネントビューは、一時ビューでできることをすべて実行でき、速度も大幅に向上します。