6

私は、ファイル システム上のファイルをスキャンし、バックアップするディレクトリとファイル名を Sqlite データベースに入力する Java ベースのバックアップ クライアントに取り組んでいます。sqlite の代わりに neo4j を使用することは理にかなっていますか? このアプリケーションでは、パフォーマンスが向上し、使いやすくなりますか。ファイルシステムはツリー(またはシンボリックリンクを考慮する場合はグラフ)であるため、gaph データベースが適しているのではないかと考えていました。sqlite データベース スキーマは 2 つのテーブルのみを定義します。1 つはディレクトリ用 (フル パスとその他の情報) で、もう 1 つはファイル用 (ディレクトリ テーブル内のディレクトリを含む外部キーを持つ名前のみ) であるため、比較的単純です。

アプリケーションは何百万ものファイルにインデックスを付ける必要があるため、ソリューションは高速である必要があります。

4

3 に答える 3

3

私が理解しているように、Neo4j の最も初期の用途の 1 つは、Neo4j の元となった CMS システムの一部として、まさにこれを行うことでした。

Neo4j のインデックス作成バックエンドである Lucene を使用すると、必要なインデックスを作成できます。

それを読んで、直接彼らに尋ねるべきです。

于 2011-07-22T11:39:04.360 に答える
3

基本的に格納されたファイル システム パスで文字列の一致を使用して DB 操作を実行できる限り、リレーショナル データベースを使用することは理にかなっています。データ モデルがより複雑になり、実際には文字列の一致を使用してクエリを実行できず、グラフをトラバースする必要がある場合、グラフ データベースを使用すると、これがはるかに簡単になります。

于 2011-06-21T13:13:55.847 に答える
0

ファイルシステム上のデータストアにインデックスを付けるための同様のソリューションを検討しています。上記のクエリについてのコメントは正しいです。

最悪の場合のクエリの例:

sqlite の場合:

  • fs のどこかに大量のサブディレクトリがある場合、sqlite で必要なスペースは最適ではありません。小さなサブディレクトリごとにフル パスを保存します (たとえば、コード プロジェクトを考えてください)。
  • ディレクトリを移動する必要がある場合、ルートに近づくほど、より多くの作業を行う必要があるため、neo4j の場合のように O(1) にはなりません。
  • sqlite でマルチスレッドを実行してスケーリングできますか?

neo4j の場合:

  • 完全なパスを検索するたびに、それをコンポーネントに分割し、パスのすべての要素を使用して暗号クエリを作成する必要があります。
  • データ モデルは、おそらく 2 つのテーブルよりも複雑になります: すべての異なるオブジェクト、ディレクトリ内ディレクトリの関係、ファイル内ディレクトリの関係、シンボリック リンクの関係

こんにちは、hj

于 2017-10-01T05:57:12.467 に答える