少数の 大量データ読み出し処理) ストレージ仮想化 (対象ワークロード: 多数の 読み書き処理に特化) トランザクション仮想化 (対象ワークロード: 多数の トランザクショナルな読み書き処理) Denodo ◦ X X Trino / Starburst ◦ X X JBoss DV △ ◦ X Oracle BI △ ◦ X Oracle MicroTx X △ △ (XA-compliantなDBのみ) Atomikos X △ △ (XA-compliantなDBのみ) ScalarDB ◦ ◦ ◦ (多様なDBに対応)
(Distributed/Disaggregated WAL) ◦ CoordinatorにPaxosベースのDBを使うことで、Paxos Commitのような形態も可 User-defined tables Version TxID Before Col Before Version Before TxID Before Image TxStatus Before TxStatus Col PK After Image 1. Prepare Records w/ W-set 1. Prepare Records w/ W-set 3. Commit Records 3. Commit Records 2. Commit Status TxID Metadata TxStatus Application data managed by users Transaction metadata managed by ScalarDB R/W sets Coordinator User-defined tables 13 トランザクション仮想化の概要(トランザクションプロトコル概要) 13
JWTによるアクセス制御(既存IdPとの連携が可能に) • ClaimにABACのタグを指定可能 User X User Y Role_Project1 Sales Marketing Role_Project2 OIDC Provider Access Token (JWT) JWKS JWT Verification User/Role info
ユーザ、ロールごとにアクセス制御が可能 • ScalarDB Cluster 配下の DB へのアクセス制御は委譲が可能 Analytics Server Cluster Analytics Engine (Spark) User X User Y Query User/Role info User/Role info Analytics Delegate Yes/No What can X access? Tables that X can access
異種・複数のデータベースに対して自然言語で問い合わせが可能に • データベースごとのMCPサーバのデプロイは不要 MCP Host / LLM (e.g., Claude Desktop) MCP Client MCP Server A DB A MCP Server B DB B MCP Server C DB C MCP Client MCP Client 自然言語問合せ MCP Host / LLM (e.g., Claude Desktop) DB A ScalarDB MCP Server DB B DB C MCP Client 自然言語問合せ
customer information along with their order details for customers located in São Paulo state. I want to see the customer ID, city, state, order ID, and order status.Please join the customers and orders tables and limit the results to 10 records. 実行クエリ: SELECT c.customer_id, c.customer_city, c.customer_state, o.order_id, o.order_status FROM olist.customers AS c INNER JOIN olist.orders AS o ON c.customer_id = o.customer_id WHERE c.customer_state = 'SP' LIMIT 10
ログをレコードに分散させ、一つのレコードを一つのデータベースに見立てる ◦ CoordinatorテーブルをPaxos等で複製を管理するDBで保管すればPaxos Commit のような 形態も可能 • 異種のデータベースに対しても同じ抽象化を実施することによりデータベース間の 差異を吸収 Version TxID Before Col Before Version Before TxID Before Image TxStatus Before TxStatus Col PK After Image TxID Metadata TxStatus アプリケーション が管理するデータ ScalarDBが管理す るメタデータ User-defined Table Coordinator Table 57
space Database 1 UserID Balance Status Version 1 100 C 5 TxID XXX Database 2 UserID Balance Status Version 2 100 C 4 TxID YYY UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY Linearizableな読み込み 60
space UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 Tx1: Transfer 20 from 1 to 2 Database 1 UserID Balance Status Version 1 100 C 5 TxID XXX Database 2 UserID Balance Status Version 2 100 C 4 TxID YYY 61
space Database 1 UserID Balance Status Version 1 100 C 5 TxID XXX Database 2 UserID Balance Status Version 2 100 C 4 TxID YYY UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 Linearizableな書き込み (TxIDとバージョンが読んだもの と変わってなかったら) 62
space Database 1 UserID Balance Status Version 1 80 P 6 TxID Tx1 Database 2 UserID Balance Status Version 2 120 P 5 TxID Tx1 UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 63
space Database 1 UserID Balance Status Version 1 80 P 6 TxID Tx1 Database 2 UserID Balance Status Version 2 120 P 5 TxID Tx1 UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 Tx2 Tx2’s memory space UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 70 P 6 Tx2 2 130 P 5 Tx2 Tx2: Transfer 30 from 1 to 2 64
Balance Status Version 1 80 P 6 TxID Tx1 Database 2 UserID Balance Status Version 2 120 P 5 TxID Tx1 書き込み失敗 (TxIDとバージョンが 読んだものと変わってい るから) Tx1 Tx1’s memory space UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 Tx2 Tx2’s memory space UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 70 P 6 Tx2 2 130 P 5 Tx2 65
Balance Status Version 1 80 P 6 TxID Tx1 Database 2 UserID Balance Status Version 2 120 P 5 TxID Tx1 Coordinator (on Database 1 or 2 or 3) Status C TxID XXX C YYY A ZZZ Tx1 Tx1’s memory space UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 66
1 or 2 or 3) Status C TxID XXX C YYY A ZZZ C Tx1 Linearizableな書き込み (TxIDが存在しなければ) Tx1 Tx1’s memory space UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 Database 1 UserID Balance Status Version 1 80 P 6 TxID Tx1 Database 2 UserID Balance Status Version 2 120 P 5 TxID Tx1 67
Balance Status Version 1 80 C 6 TxID Tx1 Database 2 UserID Balance Status Version 2 120 C 5 TxID Tx1 Coordinator (on Database 1 or 2 or 3) Status C TxID XXX C YYY A ZZZ C Tx1 Linearizableな書き込み (TxIDが自分であるなら) Tx1 Tx1’s memory space UserID Balance Status Version 1 100 C 5 TxID XXX 2 100 C 4 YYY 1 80 P 6 Tx1 2 120 P 5 Tx1 68