Janusgraphが最終一貫性のあるストレージバックエンドで動作する場合、データの一貫性を保証するために、Janusgraphを使用して最終一貫性の特性をサポートする必要があります.(つまり、いくつかのデータの最終的な一貫性を保証したくない場合は、使用しなくてもよいし、パフォーマンスの観点からJanusGraphは格納されている要素に一貫性を保証しない.) 最終コンシステンシストレージバックエンドをサポート:Apache Cassandra or Apache HBAse 以下では、データ(頂点、属性、エッジ、インデックス)の一貫性を保証する方法についてまとめる.以下のストレージバックエンドは、いずれも最終的な一貫性を有するストレージバックエンドを指す.ストレージバックエンドに最終的な一貫性がない場合、以下の措置でもデータの一貫性を保証することはできない.
Data Consistency
ストレージバックエンドはトランザクション分離を提供しないため、JanusGraphはデータの一貫性を保証するためにロックメカニズムを通過しなければならない.
効率のためにJanusGraphはデフォルトでロックを使用しませんが、ユーザーは一貫性を保証するschema要素に対してロックを使用することを選択できます. データ整合性の設定方法://element :Property、VertexLabel、Index、EdgeLabel
//ConsistencyModifier.LOCK
JanusGraphManagement.setConsistency(element, ConsistencyModifier.LOCK)
ケース
では、consistentNameプロパティ、byConsistentNameインデックスがロックされ、データの一貫性が保証されます. mgmt = graph.openManagement()
name = mgmt.makePropertyKey('consistentName').dataType(String.class).make()
index = mgmt.buildIndex('byConsistentName', Vertex.class).addKey(name).unique().buildCompositeIndex()
mgmt.setConsistency(name, ConsistencyModifier.LOCK) // name, name SINGLE
mgmt.setConsistency(index, ConsistencyModifier.LOCK) // name
mgmt.commit()
ロックによるデータ整合性の保証原理
トランザクションでコンシステンシ制約のある要素を変更すると、トランザクションが終了すると(tx.commit()JanusGraphは、トランザクションが終了した後に検証することに注意)データのコンシステンシを保証するために次のポリシー(楽観ロック)を実行します. 1.トランザクションが新しくオープンし、コンシステンシ制約されたすべての要素に対してロックが取得されます.
2.新しいトランザクションでは、すべての要素の値をデータベースから再読み込みし、トランザクション内の要素のステータスが変更後の要素の前のステータスであることを確認します.そうでない場合は、同時修正の問題が発生し、PermanentLocking exceptionが放出されます. 3.トランザクションステータスをデータベースに保存
4.すべてのロックを解除します. ロックメカニズムには、ローカル競合検出、失敗シーン検出の最適化もあります.
JanusGraphロック実装クラス
JanusGraphはロックプロトコルをインタフェース抽象化し、現在2つの実装が提供されている. 1.A locking implementation based on key-consistent read and write operations that is agnostic to the underlying storage backend as long as it supports key-consistent operations (which includes Cassandra and HBase). This is the default implementation and uses timestamp based lock applications to determine which transaction holds the lock. 2.A Cassandra specific locking implementation based on the Astyanax locking recipe. 注:データの一貫性を厳格に保証する必要があるアプリケーションでは、トランザクション・独立性レベルのストレージ・バックエンドを使用することを推奨します. Data Consistency without Locks
---更新待ち