neo4j でいくつかのテストを実行し、そのパフォーマンスを他のデータベース (この場合は postgresql) と比較したいと考えています。
この postgres データベースには、約 2000000 の「コンテンツ」があり、約 3000 の「カテゴリ」が分散されています。(これは、1 つのコンテンツが複数のカテゴリに属する可能性があるため、テーブル「コンテンツ」、1 つの「カテゴリ」、および関係テーブル「コンテンツからカテゴリ」が存在することを意味します)。したがって、これをneo4jデータベースにマッピングして、ノード「コンテンツ」、「カテゴリ」、およびそれらの関係を作成しています(コンテンツからカテゴリへ、およびコンテンツからコンテンツへ、コンテンツは関連するコンテンツを持つことができます)。
カテゴリ -> カテゴリ (カテゴリはサブカテゴリを持つことができます)
コンテンツ -> カテゴリ
コンテンツ -> コンテンツ (関連)
この「スキーマ」は、このタイプのドメインに適していると思いますか?
postgresql do neo4j からのすべてのデータの移行: 永遠に (約 4、5 日) かかります。これは、ノードの検索とそれに応じた作成/更新にすぎません。(検索はインデックスを使用しており、ノードごとに 500 ミリ秒かかる場合は挿入/更新) 私は何か間違っていますか?
移行が完了したので、いくつかのクエリを試してみました...約 2000000 のコンテンツ ノード、3000 のカテゴリ ノード、および 4000000 を超える関係が得られました。
(私はこのneo4jの世界に慣れていないので、サイファークエリを最適化する方法がわからないことに注意してください...)
私がテストしたかったクエリの 1 つは、次のとおりです。特定のカテゴリの特定の「定義」の 10 個の最新の公開済みコンテンツを取得します (これには、特定のカテゴリのサブカテゴリにあるコンテンツが含まれます)。
少し実験して、私はこのようなものになりました:
START
c = node : node_auto_index( 'type: category AND code: category_code' ),
n = node : node_auto_index( 'type: content AND state: published AND definitionCode: definition_name' )
MATCH (c) <- [ r:BELONGS_TO * ] - (n)
RETURN n.published_stamp, n.title
ORDER BY n.published_stamp DESC
LIMIT 6
これには、最初の実行を除いて約 3 秒かかります。それにはさらに多くの時間がかかります...これは正常ですか?
私は何を間違っていますか?
私はneo4j 1.9.2を使用しており、いくつかのノードプロパティを自動インデックス化していることに注意してください(タイプ、コード、状態、definitionCode、および published_stamp が含まれています - タイトルは自動インデックス化されていません)
また、前のクエリで「c」を返すの( start c = node : node_auto_index( 'type: category AND code : category-code' ) return c; )
は高速です(ここでも、最初の実行を除いて、約20〜30ミリ秒かかります)また、これがインデックスを使用する正しい方法であるかどうかはわかりません...
よろしくお願いします(意味が通じない場合は申し訳ありません - 私に尋ねてください。より良い説明を試みます)。