エッジおよびプロパティのキャッシング

エッジおよびプロパティのグラフ・キャッシングを構成する方法。

キャッシングはクエリー・パフォーマンスを向上させることができ、構成が可能です。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とともにキャッシュされます。

dse.yamlファイルの場所は、インストールのタイプによって異なります。

パッケージ・インストール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()