データベースエンジンが必要です。単純なファイルシステムにかなり近いと思います。次のことを行う必要があります。
- 「フォルダ」内のアイテムを一覧表示する
- 複数のマシンでの信頼性と速度のためにデータベースをスケーリングする
- 「フォルダ」と「オブジェクト」の追加/削除
- 多分重複を避けるためのシンボリックリンク
各「オブジェクト」は、サイズが最大 kB (推測) のデータ (キー:値) のセットになります。
私はcouchbaseとhttp://www.infoq.com/articles/graph-nosql-neo4jを調べましたが、私のニーズに合わないようです. Couchbase は最初の要件をサポートしておらず、Neo4j は高度すぎるようです。(決して使われることのない機能を実装するのはなぜですか?)
データに対する権限やセキュリティは必要ありません。冗長性と速度だけです。書き込みよりも読み取りの方がはるかに多くなります。
これを実装する最良の方法は何ですか? ディスク上のフォルダーが最善の方法でしょうか? 冗長性を備えた多くのサーバーにまたがるにはどうすればよいでしょうか?
編集:
元の問題:
最大 50 個のタグを持つ大量のオブジェクトがあります。平均10個のタグを推測しています。クライアントはタグのリストをサーバーに送信します。サーバーは、ユーザーが送信したすべて (またはほぼすべて) のタグを含むすべてのオブジェクトのリストを返す必要があります。
これまでの私のアプローチ:
1. 可能なすべてのタグのリストを、ある程度出現順に取得します (最初に最も使用されます)。これを としましょうtaglist
。
2. クライアントからのリストを でソートしますtaglist
。
3. 次のアルゴリズムを使用します。
algorithm( startFolder ) {
for each object in startFolder {
stack.push (object);
}
for each folder in startFolder where (folder.name is in listSentByClient) {
algorithm( folder );
}
}
4.stack
クライアントから送信されたすべてのタグを含むすべてのオブジェクトが含まれるようになりました。5. スタックをクライアントに返す
新しいオブジェクトを追加する場合:
1. タグを で並べ替えますtaglist
。これを呼び出しますsortedlist
2. name == 最初のタグでフォルダーを入力または作成しますsortedlist
3. 4 で最初のタグを削除します。sortedlist
タグがなくなるまでステップ 2 と 3 を繰り返し
ます 5. 現在の場所にオブジェクトを作成します
このアプローチが間違っているか、より良いアプローチを知っている場合は、教えてください。