DSE Graphの構成
DSE Graphを構成します。
DSE Graphの構成を調整すると、プロダクション環境のパフォーマンスを保護および向上しながら、開発に使いやすい環境を作成できます。graphデータベースとのアプリケーションの相互作用に影響を与える構成もあれば、DSE内の内部処理に影響を与える構成もあります。さらに、DSE Graphのセキュリティ保護は重要な結果をもたらし、多くの構成設定でクラスター運用のセキュリティを高めることができます。開発を行うか、プロダクションを実装するかにかかわらず、構成に関する十分な知識が不可欠です。
一般的なDSE Graph設定
DSE Graphのコア機能に影響する設定。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。| パッケージ・インストール | /etc/dse/dse.yaml |
| tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
dse.yaml Graphオプション
DSE Graphは、dse.yamlのDSE Graph用のクラスター全体のオプションをgraph:キーとgremlin-server:キーの下に格納します。変更する一般的なオプションのほとんどは、以下のセクションで説明されています。特に注意することとして、dse.yamlファイルのGremlin Serverオプションでグラフ・サンドボックスが構成されます。この機能はデフォルトで有効になっており、JVM内での悪意のある攻撃から保護します。
dse.yaml 設定を変更するには、クラスター内の各ノードでファイルを変更し、各ノードを再起動します。dse.yamlでの設定は、対象としているノードのシステム・レベルです。dse.yamlファイルは、OpsCenterを使用して変更することもできます。もう1つの方法は、スキーマAPI構成で説明されている、グラフごとにオプションを設定することです。
remote.yaml Gremlin Consoleオプション
remote.yamlファイルは、GremlinサーバーへのDSE Graph Gremlin Console接続の主要な構成ファイルです。ほとんどのオプションは、自明です。特に、DSE Graphで分析OLAPクエリーを使用している場合は、このファイルに変更が必要なことに注意してください。
レプリケーション係数
グラフのレプリケーション係数(RF)とシステム・レプリケーション係数(システムRF)は、DSEでの読み取りと書き込みのパフォーマンスに影響を与える可能性があります。DSEデータベースと同様に、これらの要因によって、分散グラフ・データベースが複数のノードに格納するデータのレプリカの数が制御されます。
| データ・センターごとのノード数 | グラフのレプリケーション係数 | グラフのシステム・レプリケーション係数 |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
| 4 | 3 | 4 |
| 5以上 | 3 | 5 |
Consistency_mode、datacenter_id、read_consistency、およびwrite_consistency
DSE Graphの整合性レベルは、グラフ操作とDSEデータベース操作の両方で制御されます。consistency_mode設定はグラフ操作を構成し、read_consistencyとwrite_consistency設定はDSEデータベースの読み取り操作と書き込み操作のGraphトランザクション内での整合性レベルを構成します。
consistency_mode(デフォルト:GLOBAL)は、ユーザー定義の頂点IDに適しています。自動生成頂点IDが使用される場合、この設定は、datacenter_id設定に行われた同時変更とともに、DC_LOCALに変更できます。consistency_modeとdatacenter_idの両方は、クラスターのすべてのノードで構成される必要があります。consistency_modeがGLOBALに設定されていると、datacenter_id設定は無視されます。Gremlinクエリーは、探索を介してグラフ・データを挿入し、読み取り、および更新するCQLコマンドを実行するため、DSEデータベースの整合性レベル設定がグラフ操作の実行に影響を与える可能性があります。ユーザー定義の頂点IDの読み取りまたは書き込みの整合性レベルは、一般にグラフごとに、read_consistency(デフォルト:ONE)およびwrite_consistency(デフォルト:LOCAL_QUORUM)設定を使用して設定できます。グラフ探索で検索インデックスを使用する場合、read_consistencyは複数データ・センター・クラスターでLOCAL_ONEに設定されます。このオプションはスキーマAPIを使用して設定されます。
schema_mode
データにアクセスするには、次の2つの構成項目が重要です。schema_modeとallow_scanです。
schema_mode設定には、自動スキーマ作成が許可されるかどうかを識別する2つの選択肢があります。Development:グラフ・スキーマAPIを使用してグラフ・スキーマを明示的に指定する前に、グラフ・データを読み込むことができますProduction(デフォルト):グラフ・データを読み込む前に明示的なグラフ・スキーマが必要です
schema_mode設定には、Production値がデフォルトとしてハード・コーディングされており、次のいずれかによってオーバーライドできます。- dse.yamlファイルのオプションを含める:
schema_mode: Development - グラフレベル・コマンドを使用する:
schema.config().option('schema_mode').set('Development')
schema_mode: Developmentは、使用するグラフ・スキーマを検出するのに役立ちます。ただし、設定schema_mode: Productionは、ランダム・スキーマの作成を防ぐために、開発が完了した後、重要です。schema_modeおよびallow_scanのデフォルトの設定は、既定の操作が制約の厳しい環境に適合するように、開発用ではなくプロダクション用に設定されています。schema.getEffectiveSchemaMode():ハード・コーディングされた値、dse.yaml値(指定されている場合)、および設定されているかもしれないグラフレベル設定をチェックします。schema.getEffectiveAllowScan():ハード・コーディングされた値、dse.yaml値(指定されている場合)、および設定されているかもしれないグラフレベル設定をチェックします。graph.getEffectiveAllowScan():ハード・コーディングされた値、dse.yaml値(指定されている場合)、設定されているかもしれないグラフレベル設定、およびトランザクション・レベル設定をチェックします。
DSE Graphのセキュリティ設定
DSE Graphのセキュリティに影響する設定。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。| パッケージ・インストール | /etc/dse/dse.yaml |
| tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
Graphサンドボックスおよびホワイトリスト/ブラックリスト登録されたコード
gremlin-server:キーの下の dse.yaml ファイルで構成され、デフォルトで有効になっています。このセキュリティ機能により、DSEインスタンスに損害を与える可能性のあるJVMでの悪意のあるコードの実行を阻止します。サンドボックス・ルールは、ブラックリスト(実行禁止)とホワイトリスト(実行許可)の両方のパッケージ、スーパークラスおよびタイプに定義されています。Gremlin Consoleに入力されたJava/Groovyコードの場合、指定されて許可された操作のみが実行されます。dse.yamlファイルのデフォルトのサンドボックス・ルールはオーバーライドされる場合があります。サンドボックス・ルールは以下の順で適用されます。- blacklist_supers(リスト項目を実装または拡張するすべてのクラスを含む)
- blacklist_packages(すべてのサブパッケージを含む)
- whitelist_packages(すべてのサブパッケージを含む)
- whitelist_types(サブクラスは含まず、指定されたタイプのみを含む)
- whitelist_supers(リスト項目を実装または拡張するすべてのクラスを含む)
- java.lang.System:currentTimeMillisとnanoTime以外のすべてのメソッドはブロックされます(ブラックリストに登録)。
- java.lang.Thread:currentThread().isInterruptedは、toStringを使用してラップされたスレッドを返すことができる許可されたメソッドで、sleepは別の許可されたメソッドであり、他のすべてのメソッドは許可されません。
gremlin_serverセクションにおいて、ホワイトリストとブラックリストに登録されている可能性のある項目の例を以下に示します。gremlin_server:
port: 8182
threadPoolWorker: 2
gremlinPool: 0
scriptEngines:
gremlin-groovy:
config:
# sandbox_enabled: false
sandbox_rules:
whitelist_packages:
- org.apache.tinkerpop.gremlin.process
- java.nio
whitelist_types:
- java.lang.String
- java.lang.Boolean
- com.datastax.bdp.graph.spark.SparkSnapshotBuilderImpl
- com.datastax.dse.graph.api.predicates.Search
whitelist_supers:
- groovy.lang.Script
- java.lang.Number
- java.util.Map
- org.apache.tinkerpop.gremlin.process.computer.GraphComputer
blacklist_packages:
- java.io
- org.apache.tinkerpop.gremlin.structure.io
- org.apache.tinkerpop.gremlin.groovy.jsr223
- java.nio.channelsフルーエントAPIは、許可できる操作を制限して実行のセキュリティを高めますが、サンドボックスを使用してlambda関数を有効にします。
認証、承認、および暗号化
DSEは、ユーザーによるアクセスの認証または承認、格納されたデータの暗号化によるセキュリティ保護、またはグラフ頂点ラベルまたはグラフに基づく(該当する場合)、SSLを使用したGremlin Consoleのセキュリティ保護ができます。
DSE Graphのセキュリティは、DSEのセキュリティにより管理されます。DSE Graphでは、Gremlin Consoleを安全に使用するために構成を変更する、dse.yamlファイルのgremlin-server:キーでGraphサンドボックスを変更するなど、独自の構成をいくつか行う必要があります。
DSE Graphは、DSE監査を使用した監査もサポートしています。「データベース監査の設定」を参照してください。
lambdaの制限
DSE Graphの探索パフォーマンス設定
DSE Graphの探索パフォーマンスに影響する設定。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。| パッケージ・インストール | /etc/dse/dse.yaml |
| tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
allow_scan
データにアクセスするには、次の2つの構成項目が重要です。schema_modeとallow_scanです。
allow_scan設定は、クラスター全体の完全なスキャンが許可されるかどうかを識別するブーリアン値の設定です。TRUE:任意のグラフ・クエリーでクラスターの完全なスキャンを許可します。CQLクエリーでのALLOW FILTERINGと同様です。開発中は便利ですが、完全なスキャンを許可すると、1つ以上のテーブルに対してコストのかかる線形スキャンを行うクエリーが実行される可能性があります。FALSE(デフォルト):クラスター全体のデータのサブセットに対する制限が含まれていない場合、クエリーは実行されません。
allow_scan設定にはデフォルトでFALSE値がハード・コーディングされており、以下の操作のいずれかを行うことにより、TRUE値にオーバーライドできます。- dse.yaml ファイルのオプションを含める:
allow_scan: TRUE - グラフレベル・コマンドを使用する:
schema.config().option('allow_scan').set('TRUE') - トランザクションレベル・コマンドを使用する:
graph.tx().config().option('allow_scan', TRUE).open()
allow_scan: trueに設定すると、すべてを探索することが可能になり、g.V()のように非常に広範なクエリーを使用して小さいテスト・データセットでそれらの関係を可視化できます。ただし、完全なスキャンで探索を実行すると時間がかかりすぎるため、開発が完了した後はallow_scan: falseが適切な設定であることに注意してください。 schema_modeおよびallow_scanのデフォルトの設定は、既定の操作が制約の厳しい環境に適合するように、開発用ではなくプロダクション用に設定されています。schema.getEffectiveSchemaMode():ハード・コーディングされた値、dse.yaml値(指定されている場合)、および設定されているかもしれないグラフレベル設定をチェックします。schema.getEffectiveAllowScan():ハード・コーディングされた値、dse.yaml値(指定されている場合)、および設定されているかもしれないグラフレベル設定をチェックします。graph.getEffectiveAllowScan():ハード・コーディングされた値、dse.yaml値(指定されている場合)、設定されているかもしれないグラフレベル設定、およびトランザクション・レベル設定をチェックします。
cache
- 隣接キャッシュ:頂点のプロパティとそれらの頂点のインシデント・エッジのプロパティを格納します。
- インデックス・キャッシュ:hasLabel()またはhas() stepなどのグローバル・インデックスを含むグラフ探索の結果を格納します。
cache(デフォルト:true)を使用してキャッシュを無効にできます。さらに、隣接キャッシュとインデックス・キャッシュの両方に、変更可能な設定があります。| キャッシュ設定 | デフォルト | 場所 | 説明 |
|---|---|---|---|
| vertex_cache_size | 10000l | スキーマAPIで設定します。 | 最近使用した頂点のトランザクションレベル・キャッシュの最大サイズ。 |
| adjacency_cache_clean_rate | 1024 | dse.yaml | 各グラフの隣接キャッシュから1秒あたりに消去する古い行の数。 |
| adjacency_cache_max_entry_size_in_mb | 0 | dse.yaml | 各グラフの隣接キャッシュの最大エントリー・サイズ。 |
| adjacency_cache_size_in_mb | 128 | dse.yaml | 各グラフの隣接(エッジおよびプロパティ)キャッシュに割り当てるRAMの容量。 |
| index_cache_clean_rate | 1024 | dse.yaml | インデックス隣接キャッシュから1秒あたりに消去する古いエントリーの数。 |
| index_cache_max_entry_size_in_mb | 0 | dse.yaml | インデックス隣接キャッシュの最大エントリー・サイズ。ゼロに設定すると、キャッシュ・サイズとCPU数に基づいてデフォルトが計算されます。 |
タイムアウト
タイムアウト設定は、クライアント側とサーバー側の両方で、さまざまな方法でDSE Graphの障害の原因になる可能性があります。クライアント側では、Gremlin Consoleからのコマンドが、Gremlinサーバーに到達する前にタイムアウトになる可能性があります。Gremlin Consoleでコマンド:remote config timeout noneを発行すると、デフォルトの最大タイムアウト3分を時間制限なしにオーバーライドできます。Gremlin Consoleに入力された要求はGremlinサーバーに送信され、Consoleは、要求を中止してユーザーに制御を返す前に応答を待機します。タイムアウトがnoneに変更されると、要求は決してタイムアウトしません。これは、複雑な探索や大規模なデータセットの場合に、サーバーに要求を送信して戻るまでにかかる時間がデフォルトのタイムアウトよりも長い場合に便利です。
サーバー側では、クラスター全体のタイムアウト設定、realtime_evaluation_timeout_in_seconds(デフォルト:30秒)またはanalytic_evaluation_timeout_in_minutes (デフォルト:1008分)は、それぞれ、OLTP探索またはOLAP探索が評価されるのを待機する最大時間になります。これらの設定は、dse.yamlファイルに設定されています。探索評価のタイムアウト動作を特定のグラフに対してオーバーライドする必要がある場合、evaluation_timeoutをグラフごとに設定して、OLTPまたはOLAP探索評価タイムアウトのいずれかをオーバーライドできます。複雑な探索が実行中にタイムアウトする場合は、適切なタイムアウト設定に変更するとエラーが修正されます。
dse.yamlファイルで調整できる追加のサーバー側設定は、schema_agreement_timeout_in_ms(30秒)で、スキーマを変更する際にスキーマ・バージョンがクラスター全体で合意するのを待機する最大時間です。特にインデックスが定義されている大きなスキーマがクラスターに送信される場合、データがグラフに送信される前にこの設定で調整が必要になる場合があります。
最後に、dse.yamlファイルで、system_evaluation_timeout_in_seconds(デフォルト:180秒)が、グラフ・システムが評価を要求するのを待つ最大時間として定義されます。グラフの作成または削除は、この設定の影響を受けるシステム要求であり、他のタイムアウト・オプションとは相互作用しません。
| タイムアウト | デフォルト | 影響 |
|---|---|---|
| :remote config timeout none | 3分 | Gremlin ConsoleからGremlinサーバーへのコマンド転送がタイムアウトする場合は、長くします。 |
| realtime_evaluation_timeout_in_seconds | 30秒 | OLTP探索評価がタイムアウトする場合は、長くします。 |
| analytic_evaluation_timeout_in_minutes | 1008分 | OLAP探索評価がタイムアウトする場合は、長くします。 |
| evaluation_timeout | なし | グラフごとに設定して、OLTPまたはOLAP探索評価タイムアウトをオーバーライドします。 |
| schema_agreement_timeout_in_ms | 30秒 | 大きなスキーマが、特にインデックス付きで送信される場合は、長くします。 |
| system_evaluation_timeout_in_seconds | 180秒 | グラフ・システム要求が完了しない場合は、長くします。 |
external_vertex_verify and internal_vertex_verify
これらの設定により、正確性の検証と読み込みパフォーマンスの向上との間のトレードオフが可能になります。たとえば、ユーザー定義の頂点ID external_vertex_verify(デフォルト:true)または自動生成頂点ID internal_vertex_verify(デフォルト:false)を持つ大きなデータセットを読み込む場合、これらのオプションは重要です。データがまだない新しいクリーンなグラフがあり、データに含まれる頂点IDがグラフに既に存在するかどうかを確認しない場合は、該当するオプションをfalseに設定し、DSE Graph Loaderによるデータの読み込みを高速化します。もちろん、データが既にあり、新しく読み込んだデータセットで上書きしない場合は、該当するオプションにtrue値を使用する必要があります。
tx_autostart and max_query_queue
大きなGraphSONファイルを読み込む場合、tx_autostartを使用すると、読み込み中に10,000要素に到達すると、クエリーで自動的に新しいトランザクションを開始できます。大きなファイルを読み込むときに制限を回避するもう1つの有効な方法は、ノード・システム・レベルでの制限を削除するようにmax_query_queueを dse.yaml ファイルで構成することです。
