0

複数のユーザーが同じトピックにコメントし、コメントにコメントすることもできるフォーラムの Web アプリケーションを開発するために、neo4jphp を使用しています (ネストされたコメントなど)。

では、このデータを neo4j に保存するためのベスト プラクティスは何ですか?

次のオプションを考えました。

  1. コメント、サブコメントごとに新しいノードを作成し、トピックとコメントとサブコメントの間の関係を作成します

  2. 各トピック、各コメントのノードを作成し、それらの間の関係を作成し、すべてのコメントをプロパティとしてコメントの同じノードに追加します。

第1案の方が良いと思いますが、トピック数やコメント数が増えるので作成するノード数が気になります。

ノード数が増えると、neo4j のパフォーマンス、効率は低下しますか?

SQL のレコード/行ごとに個別のノードを作成する必要がありますか?

ベストプラクティスは何ですか?

4

1 に答える 1

1

私は trartsaris.gr でブログを完全に php と Neo4j 2.0 で作成しました。多くのテストを行い、将来について考えた後、最初に説明した方法でコメントを有効にすることにしました。つまり、スキーマ設計の最後に、データベースは次のようになります

(m:Post "or topic")-[:COMMENT]-(n:Comment)-[:SUB_COMMENT]-(s:SubComment)

投稿またはトピックであるノードがあり、このノードは Label:Comment と relationship:Comment で接続されたノードを持ち、これらのコメントは Label:SUB_COMMENTS でサブコメントを持つことができます。すべてが十分に高速であるため、作成されるノードの数とそれらがどのように取得されるかについて心配する必要はありません。この質問に対する私の回答を少し読むことができます。私が最初の方法を好む理由を見てみましょう。将来の潜在的な使用例について考えています。後で次のようなことができます: 私は別のユーザーのトピックのコメントにコメントしたユーザーです。このアクションに基づいて、このユーザーによる関連トピックをデータベースで検索し、さらに読むための提案を行うことができます。

MATCH (n:User(ID))-[:WROTE_SUB_COMMENT]-(s:SubComment)-[:SUB_COMMENT]-(c:Comment)-[:COMMENT]-(p:Post)-[:WRITTEN_BY]-(k:User)-[:WRITTEN_BY]-(g:Post) WHERE blablabla RETURN g

簡単に言えば、最初のユーザーがサブコメントを書いたユーザーによって書かれたすべての投稿を見つけたいと言います。現時点では少し混乱しているように見えるかもしれませんが、Neo4j にどんどん飛び込んでいくと、すべてが日々簡単になっていることがわかるでしょう。それが少し役立ったことを願っています。

于 2014-02-01T20:10:26.917 に答える