メインコンテンツまでスキップ
バージョン: 3.14

ScalarDB Cluster の構成

注記

このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。

このドキュメントでは、ScalarDB Cluster の構成について説明します。ScalarDB Cluster は複数のクラスターノードで構成されており、各クラスターノードを構成する必要があります。

基本構成

クラスターノードの基本構成は次のとおりです。

名前説明デフォルト
scalar.db.cluster.membership.typeメンバーシップの種類。現在、KUBERNETES のみ指定できます。KUBERNETES
scalar.db.cluster.membership.kubernetes.endpoint.namespace_nameこの構成は、KUBERNETES メンバーシップタイプ用です。endpoint resource の名前空間名。default
scalar.db.cluster.membership.kubernetes.endpoint.nameこの構成は、KUBERNETES メンバーシップタイプ用です。メンバーシップ情報を取得するための endpoint resource の名前。
scalar.db.cluster.node.decommissioning_duration_secs廃止期間(秒単位)。30
scalar.db.cluster.node.grpc.max_inbound_message_size受信可能な最大メッセージサイズ。gRPCのデフォルト値
scalar.db.cluster.node.grpc.max_inbound_metadata_size受信できるメタデータの最大サイズ。gRPCのデフォルト値
scalar.db.cluster.node.portScalarDB Cluster ノードのポート番号。60053
scalar.db.cluster.node.prometheus_exporter_portPrometheus エクスポーターのポート番号。9080
scalar.db.cluster.grpc.deadline_duration_millisgRPC の期限期間(ミリ秒単位)。60000 (60 秒)
scalar.db.cluster.node.standalone_mode.enabledスタンドアロンモードが有効かどうか。スタンドアロンモードが有効になっている場合、メンバーシップ構成 (scalar.db.cluster.membership.*) は無視されることに注意してください。false
scalar.db.metadata.cache_expiration_time_secsScalarDB には、データベースへのリクエスト数を減らすためのメタデータキャッシュがあります。この設定では、キャッシュの有効期限を秒単位で指定します。-1を指定した場合は、キャッシュは期限切れになりません。60
scalar.db.active_transaction_management.expiration_time_millisScalarDB Cluster ノードは進行中のトランザクションを維持し、トランザクション ID を使用して再開できます。この構成では、このトランザクション管理機能の有効期限をミリ秒単位で指定します。60000 (60 秒)
scalar.db.system_namespace_name指定された名前空間名は ScalarDB によって内部的に使用されます。scalardb

トランザクションマネージャーの構成

このセクションでは、トランザクションマネージャーの構成について説明します。ScalarDB は、コンセンサスコミットを使用してトランザクションを実行する方法と、非トランザクションストレージ操作を実行する方法を提供します。

コンセンサスコミットを使用してトランザクションを実行する

ScalarDB は、コンセンサスコミットと呼ばれる独自のトランザクションプロトコルを提供します。これは、ScalarDB のデフォルトのトランザクションマネージャータイプです。コンセンサスコミットトランザクションマネージャーを使用するには、ScalarDB プロパティファイルに次の内容を追加します。

scalar.db.transaction_manager=consensus-commit
注記

scalar.db.transaction_manager プロパティを指定しない場合は、consensus-commit がデフォルト値になります。

基本設定

コンセンサスコミットトランザクションマネージャーでは、次の基本設定が利用可能です。

名前説明デフォルト
scalar.db.transaction_managerconsensus-commit を指定する必要があります。-
scalar.db.consensus_commit.isolation_levelコンセンサスコミットに使用される分離レベル。SNAPSHOT または SERIALIZABLE のいずれかを指定できます。SNAPSHOT
scalar.db.consensus_commit.serializable_strategyコンセンサスコミットに使用されるシリアル化可能な戦略。EXTRA_READ または EXTRA_WRITE のいずれかを指定できます。scalar.db.consensus_commit.isolation_level プロパティで SNAPSHOT が指定されている場合、この構成は無視されます。EXTRA_READ
scalar.db.consensus_commit.coordinator.namespaceコーディネーターテーブルの名前空間名。coordinator
scalar.db.consensus_commit.include_metadata.enabledtrue に設定すると、Get および Scan 操作の結果にトランザクションメタデータが含まれます。特定のテーブルのトランザクションメタデータ列の詳細を表示するには、DistributedTransactionAdmin.getTableMetadata() メソッドを使用します。このメソッドは、トランザクションメタデータ列が追加されたテーブルメタデータを返します。この構成を使用すると、トランザクション関連の問題を調査するのに役立ちます。false

パフォーマンス関連の構成

コンセンサスコミットトランザクションマネージャーでは、次のパフォーマンス関連の構成が利用できます。

名前説明デフォルト
scalar.db.consensus_commit.parallel_executor_count並列実行のためのエグゼキュータ(スレッド)の数。128
scalar.db.consensus_commit.parallel_preparation.enabled準備フェーズが並行して実行されるかどうか。true
scalar.db.consensus_commit.parallel_validation.enabled検証フェーズ (EXTRA_READ 内) が並列で実行されるかどうか。scalar.db.consensus_commit.parallel_commit.enabled の値
scalar.db.consensus_commit.parallel_commit.enabledコミットフェーズが並列で実行されるかどうか。true
scalar.db.consensus_commit.parallel_rollback.enabledロールバックフェーズが並列で実行されるかどうか。scalar.db.consensus_commit.parallel_commit.enabled の値
scalar.db.consensus_commit.async_commit.enabledコミットフェーズが非同期で実行されるかどうか。false
scalar.db.consensus_commit.async_rollback.enabledロールバックフェーズが非同期に実行されるかどうか。scalar.db.consensus_commit.async_commit.enabled の値
scalar.db.consensus_commit.parallel_implicit_pre_read.enabled暗黙的な事前読み取りが並列で実行されるかどうか。true
scalar.db.consensus_commit.coordinator.group_commit.enabledトランザクション状態のコミットがバッチモードで実行されるかどうか。この機能は、2 フェーズコミットインターフェイスでは使用できません。false
scalar.db.consensus_commit.coordinator.group_commit.slot_capacityグループコミット機能のグループ内のスロットの最大数。値が大きいとグループコミットの効率は向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1]20
scalar.db.consensus_commit.coordinator.group_commit.group_size_fix_timeout_millisグループ内のスロットのサイズを固定するためのタイムアウト。値が大きいとグループコミットの効率が向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1]40
scalar.db.consensus_commit.coordinator.group_commit.delayed_slot_move_timeout_millis遅延スロットをグループから別の分離グループに移動して、元のグループが遅延トランザクションの影響を受けないようにするためのタイムアウト。値が大きいとグループコミットの効率が向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1]1200
scalar.db.consensus_commit.coordinator.group_commit.old_group_abort_timeout_millis進行中の古いグループをアボートするためのタイムアウト。値が小さいと、積極的なアボートによってリソースの消費量が減りますが、長時間実行されるトランザクションで不要なアボートが発生する可能性も高くなります。60000
scalar.db.consensus_commit.coordinator.group_commit.timeout_check_interval_millisグループコミット関連のタイムアウトをチェックする間隔。20
scalar.db.consensus_commit.coordinator.group_commit.metrics_monitor_log_enabledグループコミットのメトリックが定期的にログに記録されるかどうか。false

基盤となるストレージまたはデータベースの構成

Consensus Commit にはストレージ抽象化レイヤーがあり、複数の基盤となるストレージをサポートしています。scalar.db.storage プロパティを使用してストレージ実装を指定できます。

データベースを選択して、各ストレージで使用可能な構成を確認します。

JDBC データベースでは次の構成を使用できます。

名前説明デフォルト
scalar.db.storagejdbc を指定する必要があります。-
scalar.db.contact_pointsJDBC 接続 URL。
scalar.db.usernameデータベースにアクセスするためのユーザー名。
scalar.db.passwordデータベースにアクセスするためのパスワード。
scalar.db.jdbc.connection_pool.min_idle接続プール内のアイドル接続の最小数。20
scalar.db.jdbc.connection_pool.max_idle接続プール内でアイドル状態のままにできる接続の最大数。50
scalar.db.jdbc.connection_pool.max_total接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。100
scalar.db.jdbc.prepared_statements_pool.enabledこのプロパティを true に設定すると、準備されたステートメントのプールが有効になります。false
scalar.db.jdbc.prepared_statements_pool.max_openステートメントプールから同時に割り当てることができるオープンステートメントの最大数。制限がない場合は負の値を使用します。-1
scalar.db.jdbc.isolation_levelJDBC の分離レベル。READ_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READ、または SERIALIZABLE を指定できます。基盤データベース固有
scalar.db.jdbc.table_metadata.connection_pool.min_idleテーブルメタデータの接続プール内のアイドル接続の最小数。5
scalar.db.jdbc.table_metadata.connection_pool.max_idleテーブルメタデータの接続プール内でアイドル状態のままにできる接続の最大数。10
scalar.db.jdbc.table_metadata.connection_pool.max_totalテーブルメタデータの接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。25
scalar.db.jdbc.admin.connection_pool.min_idle管理者の接続プール内のアイドル接続の最小数。5
scalar.db.jdbc.admin.connection_pool.max_idle管理者の接続プール内でアイドル状態のままにできる接続の最大数。10
scalar.db.jdbc.admin.connection_pool.max_total管理者の接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。25
注記

SQLite3 を JDBC データベースとして使用している場合は、scalar.db.contact_points を次のように設定する必要があります。

scalar.db.contact_points=jdbc:sqlite:<SQLITE_DB_FILE_PATH>?busy_timeout=10000

他の JDBC データベースとは異なり、SQLite3 doesn't fully support concurrent accessSQLITE_BUSY によって内部的に頻繁に発生するエラーを回避するには、busy_timeout パラメータを設定することをお勧めします。

マルチストレージのサポート

ScalarDB は、複数のストレージ実装を同時に使用することをサポートしています。scalar.db.storage プロパティの値として multi-storage を指定すると、複数のストレージを使用できます。

複数のストレージの使用の詳細については、マルチストレージトランザクションを参照してください。

パーティション間スキャン構成

以下で説明するようにパーティション間スキャンオプションを有効にすると、Scan 操作でパーティション全体のすべてのレコードを取得できます。さらに、cross_partition_scan.filteringcross_partition_scan.ordering をそれぞれ有効にすることで、パーティション間 Scan 操作で任意の条件と順序を指定できます。現在、順序付けオプション付きのパーティション間スキャンは、JDBC データベースでのみ使用できます。フィルタリングと順序付けを有効にするには、scalar.db.cross_partition_scan.enabledtrue に設定する必要があります。

パーティション間スキャンの使用方法の詳細については、スキャン操作を参照してください。

警告

非 JDBC データベースの場合、トランザクションはより低い分離レベル (つまり、SNAPSHOT) で実行される可能性があるため、SERIALIAZABLE 分離レベルでパーティション間スキャンを有効にすることはお勧めしません。非 JDBC データベースを使用する場合は、トランザクションの一貫性が重要でない場合にのみ、自己責任でパーティション間スキャンを使用してください。

名前説明デフォルト
scalar.db.cross_partition_scan.enabledパーティション間スキャンを有効にします。false
scalar.db.cross_partition_scan.filtering.enabledパーティション間スキャンでフィルタリングを有効にします。false
scalar.db.cross_partition_scan.ordering.enabledパーティション間スキャンで順序付けを有効にします。false

非トランザクションストレージ操作を実行する

非トランザクションストレージ操作を実行するには、scalar.db.transaction_manager プロパティを single-crud-operation に設定する必要があります。

scalar.db.transaction_manager=single-crud-operation

また、基盤となるストレージまたはデータベースの構成の説明に従って、基盤となるストレージまたはデータベースを構成する必要があります。

ScalarDB Cluster GraphQL 構成

ScalarDB Cluster GraphQL の構成は次のとおりです。

名前説明デフォルト
scalar.db.graphql.enabledScalarDB Cluster GraphQL が有効かどうか。false
scalar.db.graphql.portGraphQL サーバーのポート番号。8080
scalar.db.graphql.pathGraphQL エンドポイントの URL のパスコンポーネント。/graphql
scalar.db.graphql.namespacesGraphQL サーバーがスキーマを生成するテーブルの名前空間のコンマ区切りリスト。指定しない場合、GraphQL サーバーは、すべての ScalarDB 管理名前空間内のすべてのテーブルのスキーマを生成します。
scalar.db.graphql.graphiqlGraphQL サーバーが GraphiQL IDE を提供するかどうか。true
scalar.db.graphql.schema_checking_interval_millisScalarDB スキーマに変更が検出された場合に GraphQL サーバーが GraphQL スキーマを再構築する間隔 (ミリ秒単位)。30000 (30 秒)

サーバーの実行中に ScalarDB スキーマを作成または変更する

GraphQL スキーマはサーバーの起動時に静的に構築されるため、ScalarDB スキーマが変更された場合 (たとえば、テーブルが追加、変更、または削除された場合)、対応する GraphQL スキーマは再構築されない限り変更を反映しません。これに対処するために、GraphQL サーバーは、定期的なチェックとオンデマンドチェックの 2 つのメカニズムを提供します。

定期的なチェックを実行する

サーバーは、ScalarDB スキーマに変更が発生したかどうかを定期的にチェックし、必要に応じて対応する GraphQL スキーマを再構築します。デフォルトでは、チェックは 30 秒ごとに行われますが、間隔は scalar.db.graphql.schema_checking_interval_millis プロパティを使用して構成できます。

定期的なチェックを実行する必要がない場合は、プロパティ値を -1 に設定して無効にすることができます。

オンデマンドチェックを実行する

また、HTTP API の /update-graphql-schema エンドポイントに POST リクエストを実行して、サーバーに ScalarDB スキーマの変更をチェックし、必要に応じて対応する GraphQL スキーマを再構築するように要求することもできます。

たとえば、HTTP API が localhost:8080 で実行されていて、scalar.db.graphql.path プロパティが /graphql に設定されている場合、次のコマンドを実行してこのエンドポイントを呼び出すことができます。

curl -X POST http://localhost:8080/graphql/update-graphql-schema

ScalarDB Cluster SQL 構成

ScalarDB Cluster SQL の構成は次のとおりです。

名前説明デフォルト
scalar.db.sql.enabledScalarDB Cluster SQL が有効かどうか。false
scalar.db.sql.statement_cache.enabledステートメントキャッシュを有効にします。false
scalar.db.sql.statement_cache.sizeキャッシュされたステートメントの最大数。100
scalar.db.sql.default_transaction_modeデフォルトのトランザクションモード。TRANSACTION または TWO_PHASE_COMMIT_TRANSACTION を設定できます。TRANSACTION
scalar.db.sql.default_namespace_nameデフォルトの名前空間名。SQL ステートメントで名前空間名を指定しない場合は、この値が使用されます。