nosql bigtable and azure table
DESCRIPTION
NoSQLの中でGoogle App Engine データストアとWindows Azure TableはACIDトランザクションのサポート、PaaSでのサービスなどの面で似たような立ち位置にある。その比較と、事例を紹介するTRANSCRIPT
株式会社リード・レックス
Google の Big Table と Azure Table の特性比較と失敗しない使い方
株式会社リード・レックス開発部 インターネットソリューショングループ
部長 近江 武一
NoSQL の中で Google App Engine Datastore( 以下 GAE Datastore) とWindows Azure Table は ACID トランザクションのサポート、 PaaS でのサービスなどの面で似たような立ち位置にある。その比較と、事例を通じ失敗しない使い方を紹介する
概要
04/11/2023 (C) ReedRex Co,. LTD. 2
TRENDS
04/11/2023 (C) ReedRex Co,. LTD. 3
1. ここ 20 年の間で、データの永続化手段は、 RDBMS とファイルシステムの2つに集約
2. 扱うデータ量が急激に増えた。 100 万超のサービスの通常化、 20 年前なら Yahoo Japan クラスがゴロゴロしている
3. コモディティ化されたハードウェアによって急激な単価低下( CPU 、 Memory 、 HDD) が起きた
4. クラウドの台頭(安価なハードウェアを大量に用意するタイプのパブリッククラウド)
ここ 20 年ほどの間の流れ
04/11/2023 (C) ReedRex Co,. LTD. 4
SQ
L
ファイルシステム
永続化ストレージの 2 極化
構造化データ(関係モデル)
トランザクション
柔軟な問い合わせ
データの一貫性
セキュリティ
可用性
コスト
大容量
単純さ
扱い易さ
スケーラビリティスループット
04/11/2023 (C) ReedRex Co,. LTD. 5
JPIX Backplane のトラフィック遷移 2002-2012
04/11/2023 (C) ReedRex Co,. LTD. 6
• 1992 年Windows 3.1, OS/2 2.0, 486 DX2 66MHz, HDD 100MB
• 2012 年Windows 7, Mac OSX, Linux, 2GHz Multi Core, HDD 数 100MB~
• パブリッククラウド -- Amazon, Google, Azureコモディティ化された低価格なハードウェアを大量に用意してサービスを提供
ハードウェアのコモディティ化
04/11/2023 (C) ReedRex Co,. LTD. 7
04/11/2023 (C) ReedRex Co,. LTD. 8
• 永続化ストレージモデルの停滞
• 処理データ量の増大
• ハードウェアのコモディティ化
Gap の増大
04/11/2023 (C) ReedRex Co,. LTD. 9
狭間を埋める NoSQLSQL Alternative としての NoSQL
04/11/2023 (C) ReedRex Co,. LTD. 10
SQ
L
ファイルシステム
Gap を埋める NoSQL
構造化データ(関係モデル)
トランザクション
柔軟な問い合わせ
データの一貫性
セキュリティ
可用性
コスト
大容量
単純さ
扱い易さ
スケーラビリティ
NoSQL A
NoSQL B
NoSQL C
04/11/2023 (C) ReedRex Co,. LTD. 11
• 「 SQL 」→ SQL を問い合わせに使うRDBMS• 現在の関係データベース管理システムRDBMS は機能が豊富• 関係モデル• Codd's 12 Rules
• Transaction 処理• ACID トランザクション、並行処理時での分離
• Query の最適化• データの完全性• 物理・論理データの独立性• セキュリティ• リカバリー
SQL vs NoSQL ?
04/11/2023 (C) ReedRex Co,. LTD. 12
• 用途を限定すれば、 SQL の全機能はいらないのでは?
• 使わない機能に払っている隠れたコストがある
NoSQL は、 SQL 以外の代替手段を考えようというムーブメント
Alternative SQL としてのNoSQL
04/11/2023 (C) ReedRex Co,. LTD. 13
• Write Op の同期性• DISK や Replication 先に同期で書くか、• ジャーナルログを持つか• 耐障害性• トランザクションのレベル• 複数同時アクセス時の一貫性があるか• Query の柔軟性がどこまであるのか• 可用性、対障害性をどう考えるか• スケーラビリティをどう担保するか
NoSQL もいろいろある
04/11/2023 (C) ReedRex Co,. LTD. 14
Bigtable/Azure Table
MongoDB
SQ
L
Gap を埋める NoSQL
構造化データ(関係モデル)
トランザクション
柔軟な問い合わせ
データの一貫性
セキュリティ
可用性
コスト
大容量
単純さ
扱い易さ
スケーラビリティ
パフォーマンス
04/11/2023 (C) ReedRex Co,. LTD. 15
• Bigtable-like• 動機:Googleの検索、gmail など
• Pros:大量データの保持、トランザクション• Cons:高レイテンシー、• Casandra• 動機:Facebook で検索のために開発• Pros:大量データの保持、リアルタイムな更新、結果整合性• Cons:一貫性、トランザクション
• MongoDB• 動機:DoubleClick のメンバーが中心となって開発• Pros:Read パフォーマンス、柔軟な Index,Query柔軟性• Cons:一貫性、トランザクション
典型的な例
04/11/2023 (C) ReedRex Co,. LTD. 16
分散ストレージ、トランザクション処理、 K/V Store1. 複数エンティティのトランザクション処理2. 高いスケーラビリティ3. 高いコンカレンシー4. 貧弱な Query5. 書き込みは DISK と同期、 replication 先も同様6. レイテンシー 読み書きは、 20-30ms のレイテン
シー
例 : Bigtable/Azure Table
04/11/2023 (C) ReedRex Co,. LTD. 17
読み込み性能に特化したドキュメント指向の NoSQL1. 読み込みは、 memcached なみ2. 柔軟な Query ( Index あり)3. 書き込みは、 Disk と同期しない4. 書き込みは、同時実行15. リプリケーションは非同期のみ6. トランザクションは、同一ドキュメントのみ7. Shading は、 migrate コストが高い8. Shade をまたがった Query はできない。
例: MongoDB
04/11/2023 (C) ReedRex Co,. LTD. 18
GAE Datastore/Azure Table
注目すべき特性
04/11/2023 (C) ReedRex Co,. LTD. 19
とても似てる• GAE Datastore • Google App Engine Datastore, Bigtable が
ベース• Windows Azure Table• Microsoft の実装の Bigtable
• HBase • Bigtable clone 、 Apache HBase
Bigtable-like / GAE Datastore, HBase, Azure Table
04/11/2023 (C) ReedRex Co,. LTD. 20
1. 分散データストア2. Key/Value Store3. トランザクション(制限あり)4. 追記型( LSM-tree)5. 複数ストレージへの書き込みでバックアップ
を作成している6. データセンターを跨ったリプリケーションを
している
GAE Datastore/Azure Table 共通の特徴(1)
04/11/2023 (C) ReedRex Co,. LTD. 21
1. 複数エンティティのトランザクション処理2. 高いコンカレンシー3. 書き込みは DISK と同期、 replication 先
も同様4. 高いスケーラビリティ5. 高いレイテンシー6. 制限された Query
GAE Datastore/Azure Table 共通の特徴(2)
04/11/2023 (C) ReedRex Co,. LTD. 22
基本構成Azure Table は、 Bigtable と GFS の組み合わせに類似している。
(1) GFS ではレプリカ間の緩やかな整合性が許可され、すべてのレプリカのビット単位の同一性を保証していないが、 Azure Table はこれを保証
(2) Bigtable は tablet の書き込みの コミット ログを 2 つの GFS ファイルに並行して書き込むことで GFS の障害を回避。Azure Table では Stream Layer の Journaling で耐障害性を担保
Bigtable と Azure Table の基本の比較
04/11/2023 (C) ReedRex Co,. LTD. 23
04/11/2023 (C) ReedRex Co,. LTD. 24
• 分散ストレージ vs. トランザクション 同一ロケーションのトランザクションが基本分散トランザクションはコストが高い(☓Azure Table)
• 高コンカレンシー vs. 高レイテンシー複数のリクエストを同時に発行して処理全体の時間を短縮
ポイント
04/11/2023 (C) ReedRex Co,. LTD. 25
どちらも、 Entity Group Transaction と呼ばれるトランザクションをサポート• GAE Datastore
同一 Entity Group に属する複数の Entity をトランザクション処理可能
• Azure Table同一 Table, PartitionKey のデータは、 トランザクション処理可能
トランザクション
04/11/2023 (C) ReedRex Co,. LTD. 26
データの配置のモデルが重要分散ストレージにどのようにデータを配置するか。分散トランザクションにしないため、同じロケーションであることが必要
• Bigtableエンティティ作成時に親となるエンティティを決めて、Entity Group を作成。同一Entity Groupは、同じロケーションに配置される。
• Azure Tableエンティティ、作成時に、Table, PartitionKey で指定。両者が同じエンティティは、同じロケーションに置かれる。
Data Location – 配置
04/11/2023 (C) ReedRex Co,. LTD. 27
ロケーションが違うと、一貫性の欠如の問題が発生する(結果整合)• GAE Datastore
結果整合になっても機能を提供す• secondary index, cross group transaction
• Azure TableCase by case なので、アプリケーションで実装してもらう。
重要
04/11/2023 (C) ReedRex Co,. LTD. 28
相違点Google App Engine Datastore と、 Azure Table の違い
04/11/2023 (C) ReedRex Co,. LTD. 29
1. Secondary index別記
2. Cross group transactionGAE Datastoreだけにある。参加できるグループは5つまで
3. 3. Backup/restoreGAE Datastoreだけにある。
4. 4. Transactional Task EnqueuingGAE Datastoreだけにあるhttps://developers.google.com/appengine/docs/go/datastore/transactions?hl=ja#Transactional_Task_Enqueuing
5. 分離と整合性別記
5 つの違い
04/11/2023 (C) ReedRex Co,. LTD. 30
GAE Datastore ではカラムの属性で検索する場合にIndex が作成されるが、 Azure Table ではストレージでIndex を作成する機能は無い• GAE Datastore
トランザクションに癖があるhttps://developers.google.com/appengine/articles/transaction_isolation
• Windows Azure自作が必要。作ってみると GAE Datastore と同じような制限が出てしまう。
Property で検索
04/11/2023 (C) ReedRex Co,. LTD. 31
• GAE Datastore同一 Entity Group内では同時には1つのトランザクションしか実行されない。同一Group内は分離レベル SERIALIZABLE
• Azure Table 同一 Table, Partition Key 内のトランザクションはスナップショットアイソレーションで実行。分離レベル READ COMMITTED
Entity Group 内の並列性
04/11/2023 (C) ReedRex Co,. LTD. 32
事例
04/11/2023 (C) ReedRex Co,. LTD. 33
1000 万ユーザーを越えるスケールを想定して ID/課金管理のシステムを Windows Azure Table で構築クラウド環境の利点を生かして、上記想定スケールでのパフォーマンステストを実施
某社スマートフォン向け ID/課金管理 プラットフォーム
04/11/2023 (C) ReedRex Co,. LTD. 34
Azure Table3つの魅力
1. PaaS(Platform as a Service)使った分だけ従量制で課金、インストール、運用の手間が無い必要に応じて任意のスケールテストが可能常時3台のバックアップと自動フェイルオーバー
2. 一貫性保障の構造化データストアトランザクション処理をサポート高いスケーラビリティ
3. 低コスト¥0.88/ストレージ トランザクション 10,000 回¥10.93/GB/月
© Reed Rex Corp. 35
単一テーブルに複数クラスを入れる
データモデル ー 方針
04/11/2023 (C) ReedRex Co,. LTD. 36
Table Name
内容
MetaData オブジェクトのメタデータ(予約)Data オブジェクトのデータIndex インデックスLog APIログなどのデータ
• Person, Friends, Payments などのアプリケーションのファーストクラスオブジェクトは Data に入る
• Data内には複数の Class のインスタンスが入るので、Type で区別を付ける (Type は、 Rowkey の prefix に )
• Index には、 Entity Group を跨った secondary indexを入れる。注:同一 Entity Group 内に入る Index は Dataへ
• Log は、 API のログなどログデータを年月をキーにして入れる。
データモデル ー データの格納
04/11/2023 (C) ReedRex Co,. LTD. 37
• 関連性の高いデータが同一 Entity Group になるようにする。
• Entity Group=分散の単位• Entity Group が大きいと上手く分散されない• Entity Group が小さすぎると、分散トランザ
クションが頻発してパフォーマンスが出ない• Entity Group の決め方が重要
Entity Group とは?
04/11/2023 (C) ReedRex Co,. LTD. 38
• Entity Group=同一テーブル、 Partitionkey• ユーザー毎に Partitionkey を決めて、
「 Table 」 Data に入れる• ユーザー内の処理はトランザクションで処理、ユーザー間の処理は分散トランザクションで処理
※コンシューマー向けのシステムでは最初に検討すべきパターン
Entity Group
04/11/2023 (C) ReedRex Co,. LTD. 39
この使い方では、 Azure Table の「 Table 」は、 SQL でいうと tablespace (file group) に似た扱い同一領域( Data )に複数のクラスをシリアライズすることが可能(スキーマレス)Table と partitionkey が同じときだけトランザクションが可能
SQL との違い
04/11/2023 (C) ReedRex Co,. LTD. 40
• パーティションを分けることで分散ストレージとして利用できる
?• どれぐらいパーテーションを分割しても
大丈夫なのか
疑問
04/11/2023 (C) ReedRex Co,. LTD. 41
© Reed Rex Corp. 42
• 大量のパーティションを作成してもパフォーマンスは変わらない• 4億件ほど作成して確認• ユーザー毎にパーティションを作れば、ユーザーデータのレスポンスは、ユーザー数が増えても変わらない
スケーラビリティ
データ件数と処理時間遷移
0 50 100 150 200 250 300 350 400 0
10
20
30
40
50
60
70
80
90
100
0
200
400
600
800
1000
1200
1400
1600
1800
2000
Avg
Throughput
Data Count In Storage [x106]
Avg [
ms]
Thro
ughput
[Enti
ties/s
]
© Reed Rex Corp. 43
実装上の工夫
• パーティションを跨いだ処理ユーザー毎にパーティションを分けると、月次の売上処理が遅くなる。
• 多くのパーティションをまたぐので• 別テーブルを作る売上用の月次、日時で、パーティションを切ったテーブルを別途用意して書き込む
• 別トランザクションにするAzure Queueを使って別途行う。
• パーティションを跨いだトランザクションはサポートされていない• 集計データなので同期で書きこむ必要はない(=レスポンスを早く返せ
る)
© Reed Rex Corp. 44
04/11/2023 (C) ReedRex Co,. LTD. 45
ポイント
• Azure Table は大量のパーティションを扱うことができる
• パーテーションを分散することで、パフォーマンス劣化無しで、大量データが扱える
• コストは、トランザクション単価+ストレージ使用料の従量制
• パーティションを跨いだ処理は別途データを用意する
© Reed Rex Corp. 46
日本最大規模のソーシャルイベント11/30 ~ 12/25 の期間に利用可能な、アプリ上でくつしたを飾って、友人のベルを鳴らし合ったり、イベントに参加したりすることでレベルアップ、プレゼントに応募できる仕組みまた、mixi の決済機能を用いて、友人へギフトを送ったりすることができる機能もある
2009/2010は、GAE2011は、Windows Azure でサービス提供
mixi xmas 2011
04/11/2023 (C) ReedRex Co,. LTD. 47
11/30 サービススタート後、 49 時間で 100万人に到達。12/20 時点で 250 万ユーザーが利用しました。12/16~ 18 にはテレビ CM と連動したキャンペーンが展開され、 Windows Azure の拡張性を活用して柔軟にスケールアウトさせることにより、突発的なアクセス増加にも対応しています
スケール
04/11/2023 (C) ReedRex Co,. LTD. 48
1. ストレージへのピーク時のアクセスの軽減• ピーク時の想定アクセス数からストレージへの
アクセス頻度を計算すると Azure Storage のパフォーマンス目標値を超える
2. レスポンスの改善• 必要な、 mixi api のアクセス、ストレージの
アクエス数からレスポンスタイムを計算すると規定の時間を超える
課題
04/11/2023 (C) ReedRex Co,. LTD. 49
• memcached と、 K/V S は相性が良い• Read は、どちらも Key で Value を持ってくるだけ• Write は、 Key を使って、 Value を更新するので書き
込みをフックして memcached側をメンテすることが可能
• SQLだと select や、 update が柔軟すぎてエンティティのキャッシュは難しく、 Query ( SQL文)をキーにして結果を cache することになる。更新側をフックして cache をメンテするのも難しいので、 cache の有効性が低くなりがち。
対策 (1) memcached の利用
04/11/2023 (C) ReedRex Co,. LTD. 50
• 複数パーテーションに対する Query は同時に実行する
• LINQ 式は、 IQueryable を有効利用• 実際投げられている http request をロ
グに書いて確認
対策 (2) ストレージ系チューニングの小技
04/11/2023 (C) ReedRex Co,. LTD. 51
04/11/2023 (C) ReedRex Co,. LTD. 52
• Windows Azure Storage にはパフォーマンス上限がある
• memcached を使うことでストレージへのアクセスが減らせる
• K/V S は、 memcached と相性が良く、同期が取りやすい
• Storage のチューニングは request を見てやるのが基本
ポイント
04/11/2023 (C) ReedRex Co,. LTD. 53
Facebookページ統合運用管理ツール
投稿管理「内容作成」「公開承認」など運用管理フロー内での作業範囲に合わせて、各担当者別に権限を設定可能
投稿監視管理画面上でタスクの依頼も設定でき、担当者間の連携が可能
オリジナルページユーザーとのコミュニケーションを活性化させるオリジナルページの生成が可能
Windows Azure Platformを利用
sociobridge
04/11/2023 (C) ReedRex Co,. LTD. 54
• 国内 1,000 万、全世界で8億を超えるFacebook ユーザーの負荷に耐えられるスケーラビリティ
• 投稿管理、ワークフローを実装するトランザクション処理
ストレージへの要求
04/11/2023 (C) ReedRex Co,. LTD. 55
• パーテーション• サブスクリプション毎に分割• Entity Group Transaction が必要なデータ
は、同一 Table に保存• Secondary Index は自前で実装
Windows Azure Table/Blob を利用
04/11/2023 (C) ReedRex Co,. LTD. 56
• 一回の Table の読み書きは、最低でも20ms かかる
• ページの表示は、 3秒以内で行う
• ページを分割して、 ajax で並列化
レイテンシー問題
04/11/2023 (C) ReedRex Co,. LTD. 57
04/11/2023 (C) ReedRex Co,. LTD. 58
• テナント毎にパーテーションを分割Entity Group が Subscription になるように
• 不特定多数のユーザーからのアクセスは、Blob で担保
モデル ー マルチテナント
04/11/2023 (C) ReedRex Co,. LTD. 59
• 一括書き込みのパフォーマンス向上に Batch Request を多用
• Azure Table の Entity Group Transaction は、 http POST の content-type multipart/mixed 。
• 2つの特性がある1. ACID トランザクションで実行2. ラウドトリップタイムの削減• 複数の SaveChanges() を集約することで、リクエス
ト数を少なくしてパフォーマンスが向上
トランザクション
04/11/2023 (C) ReedRex Co,. LTD. 60
End
ご清聴ありがとうございました。
04/11/2023 (C) ReedRex Co,. LTD. 61