Slide 1

Slide 1 text

Cosmos DB における ACID トランザクションの実現 11 Oct 2020 第3回 Azure Cosmos DB 勉強会 Yuji Ito Architect @Scalar, Inc. 1

Slide 2

Slide 2 text

© 2020 Scalar, inc. ⾃⼰紹介 • 分散データベースの開発 – 性能評価と改善 – 障害時のデータ⼀貫性検証などを通して信頼性向上 – Cassandra 調査や検証、改善提案 • 以前は SSD の R&D やファームウェア開発 2

Slide 3

Slide 3 text

© 2020 Scalar, inc. Contents 1. Cosmos DB におけるトランザクション 2. Scalar DB on Cosmos DB 3

Slide 4

Slide 4 text

© 2020 Scalar, inc. Cosmos DB におけるトランザクション • The database engine in Azure Cosmos DB supports full ACID (Atomicity, Consistency, Isolation, Durability) compliant transactions with snapshot isolation. All the database operations within the scope of a container's logical partition are transactionally executed within the database engine that is hosted by the replica of the partition. 4 https://docs.microsoft.com/en-us/azure/cosmos-db/database-transactions-optimistic-concurrency

Slide 5

Slide 5 text

© 2020 Scalar, inc. • 同じパーティション内の item に対する操作のみトランザクション可 – 異なるパーティション間のトランザクション不可 – 異なるコンテナ間のトランザクション不可 Cosmos DB におけるトランザクションの制限 5 ... Partition 0 Partition 1 Partition N Container A ... Container B トランザクション可 トランザクション不可 トランザクション不可 : Item

Slide 6

Slide 6 text

© 2020 Scalar, inc. • 銀⾏⼝座 – パーティション・キー “name” (個⼈のアカウント) • 決済⽤、貯蓄⽤の⼆種類の残⾼間ではトランザクション可能 • ⼝座間ではトランザクション不可能 – 残⾼間で移動する処理に、⼝座間で送⾦処理すると不整合が発⽣ Partition “SUZUKI” 例: 送⾦トランザクション 6 { “name”: “ito”, “checking”: 0, “saving”: 10000 } { “name”: “suzuki”, “checking”: 3000, “saving”: 5000 } Partition “ITO” トランザクション可 トランザクション不可

Slide 7

Slide 7 text

© 2020 Scalar, inc. Cosmos DB におけるトランザクション • トランザクションで操作したい item を同コンテナ同パーティションに⼊れなければ ならない – パーティションが不均等になる Þ Scalar DB でコンテナ、パーティション制限のないトランザクションを実現 7

Slide 8

Slide 8 text

© 2020 Scalar, inc. Scalar DB • 分散データベースに ACID トランザクションを提供するライブラリ – https://github.com/scalar-labs/scalardb 8 Core(SQL)

Slide 9

Slide 9 text

© 2020 Scalar, inc. Scalar DB on Cosmos DB • 制限のない ACID トランザクションを使⽤可能 – 分離レベルとして、Snapshot と Serializable を選択可能 • Cosmos DB の利点を引き続き利⽤可能 – スケーラビリティ – RU によりスケールアウト – 安定したレイテンシ – ⾼可⽤性 – SLA 99.99% 9

Slide 10

Slide 10 text

© 2020 Scalar, inc. Scalar DB on Cosmos DB の制限 • グローバル分散に制限あり – Consistency Level として STRONG が必要なため – 将来的な対応を検討中 10

Slide 11

Slide 11 text

© 2020 Scalar, inc. 性能評価 • ワークロード – 2 ⼝座間での送⾦トランザクション – 予め 10000 アカウントを挿⼊ • 環境 – Cosmos DB – RU – ⼝座データベース: 4000, 8000, 16000, 32000 (auto-scaled) – コーディネータデータベース: ⼝座データベースの 25% – メタデータ⽤データベース: 400 (最⼩) – クライアント: F2s_v2 (2 vCPUs, 4 GiB RAM) – Cosmos DB ネックになるまでトランザクションをリクエストするスレッド数を増 加させてから測定 11

Slide 12

Slide 12 text

© 2020 Scalar, inc. 性能評価 • ほぼリニアに性能向上することを確認 12

Slide 13

Slide 13 text

© 2020 Scalar, inc. まとめ • Cosmos DB のトランザクションにはコンテナ、パーティションに制限あり • Scalar DB により Cosmos DB でも制限のないトランザクションを実現 • Scalar DB トランザクション性能は Cosmos DB 上でスケールアウトする 13