私は、階層データ(親子関係)を保存するためのオプションを考え出しています。Titanグラフデータベースの使用と拡大
ツリーはグラフであり、フォレスト(ツリーの)も技術的にグラフであるため、グラフデータベースはRDBMS espよりはるかに優れているようです。私は読み取りと書き込みの両方の操作を最適化することに懸念があるからです。
- 書き込みの最適化は、階層の変更が最小限の書き込みを必要とすることを意味します。
- 読み取りを最適化することは、特定のノードのコンシューマに最小限の読み取り操作を実行することを意味します。
私のユースケースは、次のとおりです。
- ユーザーあたりの木。ユーザー空間全体で1つのグラフを保存し、ユーザーごとに1つのグラフを使用する必要がありますか?
- パスクエリは、任意のノードから始まり、ユーザーのツリーのルートに戻ります。親ノード
から
私の実際の問題は、Titanの規模と管理方法を理解することです。
gremlinサーバーインスタンスが必要ですか?言い換えれば、私はTitanで何かをするためにgremlinサーバでEC2インスタンスを立ち上げる必要がありますか?または、Java Titan APIを使用してグラフデータを直接操作できますか?
明示的にデータを分割する必要がありますか?言い換えれば、使用量が増え、データ量と操作量が増えるにつれ、より多くのグレムリンサーバーを立ち上げる必要がありますか?サーバーの数が増えると、操作を実行するためにクライアントからサーバー間で一貫したハッシュを行う必要がありますか?
任意のノードからトラバーサルを開始できるように、弾性検索クラスタを設定する必要がありますか。または、この時点で十分な親関係を表現するために頂点を使用してオブジェクトとエッジを表現していますか?私は、頂点IDがユーザ空間全体で一意であることを保証することができます。一意のユーザーIDで各頂点を飾ることもできます。その場合、私は弾性検索が必要ですか?私の希望は、弾力的な検索は、自由形式またはより複雑な検索タイプのクエリであり、正確なクエリではないということです!
フロントエンドの数が増えるにつれて、各フロントエンドはグラフを開くことができます(ユーザー空間全体に1つのグラフ)。ユーザあたりのグラフがある場合、フロントエンドは親和性を持たないため、各ユーザに対して同じグラフを開くことができます。それは大丈夫ですか?
これに関する多くのドキュメントを見つけることができませんでした。ありがとうございました!
ありがとうアリ。したがって、ユーザー空間を横切る1つのグラフが意味をなさない。アドホック検索が必要ない場合にも、lucene/solrなどを持たないことは理にかなっています。 まだわからない私はTitanのコアをGremlin経由で直接使うべきかどうかを理解しています。アーキテクチャ上の相違点は(N台のフロントエンドを前提として) 1. 1つ以上のgremlinサーバーインスタンス。フロントエンドは、user-idと言ってそのうちの1つにシャードします。 2. gremlinサーバーインスタンスがありません。フロントエンドはチタンコアを直接使用します。 2は適切な使用例ですか、推奨設定は1ですか? –
@VijaiatLyfBitsフロントエンドがサーバー側を指していた場合、フロントエンドサーバー2のメモリを完全に管理している場合は、それも受け入れられます。しかし、ソフトウェアエンジニアリングの観点からは、1がはるかに優れています。 –
ありがとうアリ。今や意味をなさない! –