私の現在のシナリオは、の製品,の顧客との売り手のノードが私のグラフエコシステムにあるようです。私が直面しています問題は、私はのプロパティとしてをorder_item_id で与えられたorder_idのグラフに単一のエッジを確保する方法は?
(customer)-[buys]->product
の一意性を確保しなければならないということですedge.Iはユニークなエッジがあることを確認する必要が関係を買います指定されたorder_item_idにbuysプロパティを指定します。このようにして、グラフの挿入が冪等のままであり、指定されたorder_item_idの繰り返し購入エッジが作成されないようにしたい。私がこれまでに発見した何order_item_idプロパティ
if(!mgmt.getPropertyKey("order_item_id")){
order_item_id=mgmt.makePropertyKey("order_item_id").dataType(Integer.class).make();
}else{
order_item_id=mgmt.getPropertyKey("order_item_id");
}
を作成
は、一意のインデックスを構築することは私の問題を解決するかもしれないということです。以下のような
if(mgmt.getGraphIndex('order_item_id')){
ridIndexBuilder=mgmt.getGraphIndex('order_item_id')
}else{
ridIndexBuilder=mgmt.buildIndex("order_item_id",Edge.class).addKey(order_item_id).unique().buildCompositeIndex();
}
または私はまた
mgmt.buildEdgeIndex(graph.getOrCreateEdgeLabel("product"),"uniqueOrderItemId",Direction.BOTH,order_item_id)
- どのように私は与えられた order_item_idのための単一の買いエッジのこの一意性を保証しなければならないようなものを使用することができます。 (私は order_item_idに基づいて検索するためのユースケースを持っていません。)
- buildIndexを使用してbuildEdgeIndexを用いたエッジにインデックスを作成する基本的な違いは何ですか?
私たちはロックをスキップしてデータベースの一貫性を危機にさらすことができるように、パフォーマンスに関する問題が非常に深刻です。私はタイタンのDBからリアルタイムの結果が必要ない場合でも、パフォーマンスの欠点はありますか?重いロック挿入が読み込みクエリに影響しますか? –
パフォーマンスの問題は、実際にグラフのサイズとデータを挿入する速度によって異なります。大規模では、高速書き込みパフォーマンスを維持するために、常にロックを避けたいと考えています。スピードを本当に心配しているのであれば、ロックの有無にかかわらずパフォーマンステストを設定し、どのような読み書きパフォーマンスが得られるかを確認することが最善の方法だと思います。 – jbmusso
私は、挿入前チェックを思いつきました。これは、私がエッジ上の建物インデックスをスキップするのを助けました。それを作成する前に特定のエッジの存在をチェックします。それでも私はスピードのためにロックを解除することはできません(私のACIDルーツかもしれません)。私は、輸入後の仕事のオーバーヘッドが大きくなると思います。頂点の挿入の場合にロックの許可も受け入れられますか? –