ScalarDB 3.18 リリースノート
注記
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このページには、ScalarDB 3.18 のリリースノートのリストが含まれています。
v3.18.1
発売日: 2026年8月2日
まとめ
このリリースでは、不要なメタデータおよびインデックスポリシーの更新を回避するために repairTable を改善し、jdbc:spanner 接続文字列 のサポートを追加し、複数の Consensus Commit トランザクション処理の問題を修正し、ScalarDB Cluster のメタデータ修復と ScalarDB SQL の SELECT 実行を改善し、クラスターのロールバック/一時停止と SQL ステートメントキャッシュのバグを解決し、セキュリティの脆弱性に対処するためにいくつかの依存関係をアップグレードしました。
Community edition
改善点
- メタデータが既に最新の状態の場合にテーブルのメタデータの再書き込みをスキップする (Cosmos DB の場合は、コンテナーのインデックスポリシーが既に一致する場合にその更新もスキップする) ように
repairTableを改善し、不要な書き込みを回避するようにしました。 (#3613)
バグの修正
- Spanner (エミュレーター、omni、クラウドインスタンス) に接続するために、既にサポートされている
jdbc:cloudspannerパターンに加えて、jdbc:spannerで始まる接続文字列を受け入れるようになりました。 (#3559) - 同じインデックス値を持つ別のレコードが同時に削除および挿入されている場合に、セカンダリインデックスを使用した
Get操作がIllegalArgumentExceptionで失敗する可能性がある Consensus Commit の問題を修正しました。 (#3607) - 読み取り専用でのコーディネーター書き込み省略が無効で、コーディネーターのグループコミットが有効な場合に、読み取り専用トランザクションが失敗する可能性がある Consensus Commit の問題を修正しました。 (#3614)
- コーディネーターのグループコミット機能が有効になっている場合に、
DistributedTransactionManager.rollback(String)/abort(String)を使用して ID でインフライトのグループコミットされたトランザクションをアボートすると、その操作が失われる可能性があるバグを修正しました。 (#3619) - lazy recovery 中に書き込みトランザクションが同時にコミットされたレコードの読み取りが、古い (コミット前の) 値を返す可能性がある Consensus Commit トランザクションマネージャーの問題を修正しました。 (#3621)
- Jackson、Netty、Azure Cosmos DB、および Azure Blob Storage ライブラリをアップグレードしてセ キュリティ問題を修正しました: CVE-2026-42579, CVE-2026-42583, CVE-2026-42584, CVE-2026-42587, CVE-2026-44249, CVE-2026-45416, CVE-2026-45674, CVE-2026-47691, CVE-2026-50010, CVE-2026-54512, CVE-2026-54513, CVE-2026-55831, CVE-2026-55833, CVE-2026-56745, CVE-2026-59901, and GHSA-r7wm-3cxj-wff9 (#3754)
- PostgreSQL JDBC ドライバーをアップグレードしてセキュリティ問題を修正しました: CVE-2026-42198 and CVE-2026-54291 (#3758)
Enterprise edition
機能強化
ScalarDB SQL
- Spring Boot の自動設定に対する自動設定の順序を明示的に宣言するために、
ScalarDbJdbcConfigurationに@AutoConfigureBeforeを追加しました。
改善点
ScalarDB Cluster
- ScalarDB Cluster は、アップグレード後に必要なコンパニオン before-image セカンダリインデックスを作成するために、ノード起動時に認証および ABAC システムメタデータテーブルを修復するようになりました。これにより、以前のバージョンからアップグレードされたデプロイメントは、手動で
repairTable()を実行することなく、自動的にこれらのインデックスを取得できます。
ScalarDB SQL
- ワンショット SELECT ステートメントおよび SELECT のみのバッチに対する読み取り専用最適化を有効にしました。
バグの修正
ScalarDB Cluster
- クラスターのリクエスト転送ホップ制限を超えた
rollbackが失敗を表面化する代わりにサイレントに成功として報告されるバグを修正しました。これにより、lazy recovery までレコードが prepared 状態のままになる可能性がありました。 - クラスターノードまたはトランザクションコーディネーターの一時停止がノードが一時停止されていないにもかかわらず成功と報告されるレースコンディションを修正しました。これは、一時停止解除または別の一時停止リクエストが同時に発行された場合、および以前の一時停止がすでに成功した後に未処理リクエストを待機する一時停止がタイムアウトした場合に発生する可能性がありました。
- Jackson、Netty、および LangChain4j ライブラリをアップグレードしてセキュリティ問題を修正しました: CVE-2026-40682, CVE-2026-42027, CVE-2026-42440, CVE-2026-42583, CVE-2026-42584, CVE-2026-42587, CVE-2026-44249, CVE-2026-45416, CVE-2026-50010, CVE-2026-54512, CVE-2026-54513, CVE-2026-55405, CVE-2026-55831, CVE-2026-55833, CVE-2026-56745, CVE-2026-59901, and GHSA-r7wm-3cxj-wff9
- Bouncy Castle ライブラリおよび grpc_health_probe バイナリをアップグレードしてセキュリティ問題を修正しました: CVE-2025-14813, CVE-2026-5598, CVE-2026-25681, CVE-2026-27136, CVE-2026-27145, CVE-2026-33811, CVE-2026-33814, CVE-2026-39820, CVE-2026-39821, CVE-2026-39822, CVE-2026-39836, CVE-2026-42499, and CVE-2026-42504
ScalarDB SQL
- パラメーター化された SQL 用のキャッシュスロットを非パラメーター化 DML ステートメントが占有するステートメントキャッシュの不具合を修正しました。キャッシュ適格性は、解析された SQL 内のバインドマーカーの存在に基づいて正しく制御されるようになりました。
v3.18.0
発売日: 2026年05月01日
まとめ
このリリースには、多くの改善点、セキュリティ問題の修正、およびバグ修正が含まれています。
破壊的変更
- JDBC コネクションプールが Apache Commons DBCP2 から HikariCP に移行しました:
- 次の設定プロパティはサポートされなくなりました。設定されている場合は警告がログに記録されて無視されます:
scalar.db.jdbc.connection_pool.max_idlescalar.db.jdbc.table_metadata.connection_pool.max_idlescalar.db.jdbc.admin.connection_pool.max_idlescalar.db.jdbc.prepared_statements_pool.enabledscalar.db.jdbc.prepared_statements_pool.max_open
- プリペアドステートメントプーリングは HikariCP には同等の機能がないため、利用できなくなりました。
- コネクションプールのデフォルト動作は DBCP2 ではなく HikariCP に従います。これにより、設定変更がなくても実行時の動作が変わる可能性があります (例: コネクション取得タイムアウトとアイドルエビクション)。
- 次の設定プロパティはサポートされなくなりました。設定されている場合は警告がログに記録されて無視されます:
- 既存のテーブルは、新しい before-image セカンダリインデックスを作成するために
repairTable()が必要です。 Consensus Commit のインデックスベースのGet、Scan、ScanAll操作は、コンパニオンのbefore_<col>インデックスに依存するようになりました。既存のテーブルそれぞれでrepairTable()を実行するまで、ScalarDB はスタートアップ時に警告をログに出力し、インデックスベースの読み取りは以前の動作にフォールバックします。これにより、インデックス列が同時に更新されているレコードを見落とす可能性があります。設定scalar.db.consensus_commit.index.eventually_consistent_read.enabledはオプトアウト用に提供されていますが、新しいワークロードにはお勧めしません。 - MySQL Connector/J が MariaDB Connector/J に置き換わりました。 SSL はデフォルトで有効になりません。MySQL 8.0 以降に
caching_sha2_password認証で接続する場合は、JDBC URL にsslMode=REQUIREDまたはallowPublicKeyRetrieval=trueを追加してください。jdbc:mysql://URL の場合、ScalarDB が互換性のために自動的にpermitMysqlSchemeを追加するため、操作は不要です。 BigIntColumn.MAX_VALUEおよびBigIntColumn.MIN_VALUE定数が削除されました。 これらを参照していたコードは、代わりにLong.MAX_VALUEおよびLong.MIN_VALUEを使用する必要があります。
Community edition
機能強化
AuthAdmin.getRole(roleName)を追加しました。 (#3238)- 操作レベルの属性を追加し、グローバル機構を必要とせずに、操作ごとにクロスパーティションスキャン、フィルタリング、および並べ替えを許可しました。 (#3425)
DistributedTransactionAdmin.hasPrivilege()を追加しました。 (#3432)AuthenticationMethod列挙と認証方法対応のユーザー管理 API をAuthAdminに追加し、OIDC 認証をサポートしました。 (#3433)DistributedTransactionManagerのbeginおよびstartメソッドにattributesパラメータを追加し、トランザクションスコープの属性設定を有効にしました。また、DistributedTransactionManagerの CRUD メソッドは、操作の属性を内部で開始されたトランザクションに渡します。また、Consensus Commit でcc-transaction-isolation属性経由で、トランザクションごとに分離レベルを指定できるようになりました。 (#3466 #3517 #3540)- Google Cloud Spanner を JDBC ストレージとして、PostgreSQL 互換方言経由でサポートを追加しました。 (#3510)
改善点
- Consensus Commit プロトコルでのワンフェーズコミット最適化の適用範囲を拡張しました。これにより、トランザクションが後で更新するレコードのみを読む場合、SERIALIZABLE 分離レベルでもワンフェーズコミットを使用できるようになり、読取-修正-書込ワークロードのパフォーマンスが向上します。 (#3295)
- JDBC アダプターで描画操作のバッチ実行サポートを追加し、複数の描画実行時のパフォーマンスを向上させました。同じ SQL ステートメントを持つ描画はグループ化され、バッチで実行されます。 (#3304)
- JDBC アダプターのコネクションプーリングライブラリを Apache Commons DBCP2 から HikariCP に移行し、パフォーマンスと信頼性を向上させました。 (#3305)
- Consensus Commit トランザクションの動作を変更し、同一トランザクション内で Delete 後に Insert/Upsert/Update 操作を許可するようにしました。以前はこれにより
IllegalArgumentExceptionがスローされていましたが、現在は指定されていない列に null 値を含む新しいレコード挿入として処理されます。 (#3319) - Get/Scan ビルダーに @CheckReturnValue アノテーションを追加しました。 (#3320)
- DynamoDB でセカンダリインデックス列に null 値を設定するサポートを追加しました。null 値が設定されると、属性はアイテムから削除され、レコードはセカンダリインデックススキャンに表示されません。 (#3326)
- TIME (マイクロ秒精度)、TIMESTAMP (ミリ秒精度)、TIMESTAMPTZ (ミリ秒精度) 列の値を挿入または更新する際、範囲外の精度は例外をスローするのではなく切り捨てられるようになりました。 (#3393)
- Consensus Commit のインデックスベース Get、Scan、ScanAll 操作で、インデックス列を別のトランザクションから同時に更新されるレコードが見逃される可能性がある問題を修正しました。ScalarDB は、プライマリキー以外の列のユーザー定義セカンダリインデックスごとに companion before-image セカンダリインデックスを保持し、インデックス読取中に PREPARED/DELETED レコードを復元するために使用します。 (#3419 #3463)
- MySQL Connector/J を MariaDB Connector/J に置き換え、GPLv2 ライセンスの懸念を解決しました。 (#3428)
- JDBC インデックス名が基盤となるデータベースでサポートされている最大識別子長を超える場合、ハッシュを使用して短縮されるようになりました。 (#3481)
- 以前すべてのストレージバックエンドに適用されていた BigInt 値範囲制限 (
-2^53から2^53) を緩和しました。この制限は現在 Cosmos DB とオブジェクトストレージのみに適用されます。他のバックエンド (JDBC、Cassandra、DynamoDB) は BigInt 列の完全な Java long 範囲をサポートするようになりました。 (#3490) - Oracle BIGINT 列型マッピングを NUMBER(16) から NUMBER(19) に変更し、完全な Java long 範囲をサポートするようにしました。 (#3507)
- 非推奨ポリシーを変更し、API と設定に非推奨のマーク付けされたものは 5.0.0 ではなく 4.0.0 で削除されるようになりました。 (#3520)
バグの修正
- オブジェクトストレージアダプターのオプションの問題を修正しました。 (#3237)
- Oracle で
NUMBER(1)データ型を使用する列でテーブルをインポートする場合 (通常は BOOLEAN データに使用)、その列は ScalarDB Schema Loaderoverride-columns-type設定を使用して ScalarDB BOOLEAN にマップできるようになりました。 (#3239) - オブジェクトストレージで許可される最大文字列長を増加させるための修正。 (#3248)
- オブジェクトストレージアダプターのデータサイズ制限のエラーメッセージに表示される上限値を更新しました。 (#3264)
- SERIALIZABLE 分離レベルを使用する場合、Oracle データベースに対して各操作後のスナップショット更新を確保するための明示的なコミットを追加しました。 (#3294)
- セキュリティ問題を修正するため Jackson ライブラリをアップグレードしました: GHSA-72hv-8253-57qq (#3394)
- 列削除がサポートされていない場合でも
dropColumnFromTable()がセカンダリインデックスを削除する問題を修正しました。 (#3450) - セキュリティ問題を修正するため Netty ライブラリをアップグレードしました: CVE-2026-33870 および CVE-2026-33871 (#3452)
- lazy recovery が PREPARED レコードをロールバックした後、インデックスベース Get および Scan 操作が不正確な結果を返す可能性があるバグを修正しました。after-image インデックス値がクエリに一致しても、before-image (復元された) 値が一致しない場合があります。 (#3488)
Enterprise edition
改善点
ScalarDB Cluster
getRole()API とその同等の API を追加し、名前で単一の ロールを取得できるようにしました。- 既存のバックアップサイトテーブルでレプリケーションを開始するためのサポートを追加しました。
- ScalarDB Cluster SQL トランザクションで
executeBatchAPI をサポートを追加し、単一の呼び出しで複数の SQL ステートメントをバッチ実行できるようにしました。 - SQL トランザクションのクライアント側最適化 (piggyback_begin および write_buffering) を追加し、クライアントとクラスター間の RPC オーバーヘッドを削減しました。
scalar.db.cluster.node.admin.portプロパティを使用して、admin サービス用に別の gRPC ポートを設定するサポートを追加しました。DistributedTransactionAdmin.hasPrivilege()を追加して、指定されたユーザーがテーブルに対して特定の権限を持っているかどうかを確認できるようにしました。- トランザクション begin/start メソッドで attributes パラメーターのサポートを追加し、分離レベルなどのトランザクションスコープ設定を有効にしました。
- OIDC JWT 認証サポートを追加しました。
CredentialsHolder経由の ThreadLocal ベースのユーザーパスワード認証サポートを追加し、複数のユーザーが単一のTransactionManagerを共有できるようにしました。- プロパティベースの OIDC JWT 認証サポートをクライアント用に追加し、JWT アクセストークンを設定プロパティを介して渡すことができるようにしました。