エッジおよびプロパティのキャッシング
エッジおよびプロパティのグラフ・キャッシングを構成する方法。
キャッシングはクエリー・パフォーマンスを向上させることができ、構成が可能です。DSE Graphのキャッシュには、隣接リスト・キャッシュとインデックス/プロパティ・キャッシュの2種類があります。エッジまたはプロパティのどちらかをキャッシングするには、スキーマAPI vertexLabel()メソッドをcache()
オプションと一緒に使用します。キャッシングはすべてのエッジ、すべてのプロパティ、またはエッジのフィルター済みセットに対して構成できます。頂点は直接キャッシングできません。ただし、頂点間の関係を定義するキャッシング・プロパティおよびエッジが、実質的に同じ操作を実行します。
インデックスが存在し、クエリーの過程で使用されている場合、プロパティ・キャッシングは有効です。フル・グラフ・スキャン・クエリーはキャッシングされません。インデックスが存在しない場合、キャッシングは発生しません。エッジについてキャッシングが構成されている場合、隣接リスト・キャッシングは有効です。
キャッシュはノードにローカルであり、データはクエリーで読み取られたときにキャッシュに読み込まれます。両方のキャッシュはdse.yamlファイルでデフォルト・サイズの128 MBに設定されています。設定はadjacency_cache_size_in_mb
およびindex_cache_size_in_mb
です。両方のキャッシュは、Least Recently Used(LRU)キャッシュとして実装されているオフヒープ・メモリーを利用します。
キャッシングは、同じ情報が後のクエリーで必要となった場合に、より効率的にクエリーを実行するためのものです。たとえば、meal
頂点のcalories
プロパティのキャッシングを行うと、all meals with a calorie count less than 850 caloriesを要求するクエリーの取得が改善されます。
グラフ・キャッシュはクラスターの各ノード内でのみ使用されるため、キャッシュされたデータはノード間で異なる場合があります。このため、クエリーでは、あるノードではキャッシュを使用できても、別のノードでは使用できないことがあります。キャッシュはデータが見つからない場合にのみ更新されます。グラフ・キャッシングには、破棄の方法がありません。フラッシュは発生しません。さらに、要素が削除または変更されても、キャッシュは更新されません。キャッシュは、要素についてキャッシュが構成されたときに設定されるTime To Live(TTL)値のみに基づいてデータを排除します。データが古くなることを回避するために、頻繁に変化する要素(プロパティ・キー、頂点ラベル、エッジ・ラベル)には低いTTL値を設定します。
グラフ・キャッシュは、変更することがほとんどないグラフ・データを使用する場合に便利です。グラフ・キャッシュを効果的に使用するクエリーは、繰り返し実行されるクエリーです。クエリーの実行がソート順でも異なる場合、グラフ・キャッシュはクエリー・レイテンシーを減らすために使用されません。たとえば、meal頂点のcaloriesプロパティのキャッシングを行うと、850カロリー未満のすべての食事を要求するクエリーの取得が改善されます(このクエリーが繰り返される場合)。すべてのmeal頂点のプロパティはcaloriesとともにキャッシュされます。
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/dse.yaml |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/dse/conf/dse.yaml |
手順
-
author
頂点のすべてのプロパティを最大1時間(3600秒)キャッシュします。schema.vertexLabel('author').cache().properties().ttl(3600).add()
プロパティ・キャッシュを有効にすると、インデックス・クエリーでは、指定された頂点ラベルのIndexCacheを使用します。
-
author
頂点の内向きと外向きの両方のcreated
エッジを最大1分(60秒)間キャッシュします。schema.vertexLabel('author').cache().bothE('created').ttl(60).add()