cassandra 分散データベース
DESCRIPTION
Eric Evansさんの「Slideshow from Cassandra presentation @ FOSDEM 2010」 の日本語訳です。TRANSCRIPT
![Page 1: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/1.jpg)
Cassandra分散データベース
Eric [email protected]
@jericevans
FOSDEM2010年 2月 7日
(Japanese translation by あしたのオープンソース研究所 http://oss.infoscience.co.jp/)
![Page 2: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/2.jpg)
Cassandraはトロイ戦争中のトロイの予言者。彼女の予言は必ず的中したが、人々はその予言を信じなかった。
![Page 3: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/3.jpg)
非常にスケーラブルで、非集中化された(decentralized)、
構造化データストア(すなわち、データベース)。
![Page 4: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/4.jpg)
アウトライン
..1 プロジェクトのこれまでの歩み
..2 解説
..3 ケーススタディ
..4 ロードマップ
![Page 5: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/5.jpg)
![Page 6: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/6.jpg)
![Page 7: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/7.jpg)
![Page 8: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/8.jpg)
• 7人の新しいコミッタが参加
• 多くのコントリビュータ• IRCには 100人以上が参加
• すでに多数の課題(バグ、機能など)を解決• 3つのメジャーリリース、2つのポイントリリース
• トップレベルプロジェクトに昇格?
![Page 9: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/9.jpg)
アウトライン
..1 プロジェクトのこれまでの歩み
..2 解説
..3 ケーススタディ
..4 ロードマップ
![Page 10: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/10.jpg)
Cassandraとは...
• O(1) DHT (分散ハッシュテーブル)
• 結果整合性 (Eventual consistency)
• 「整合性」と「遅延」のトレードオフを調整可能
![Page 11: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/11.jpg)
![Page 12: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/12.jpg)
その一方で...
• 値は構造化され、索引付けされている• カラム / カラムファミリ
• 述語によるスライス化 (クエリ)
![Page 13: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/13.jpg)
カラムファミリ
![Page 14: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/14.jpg)
スーパーカラム・ファミリ
![Page 15: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/15.jpg)
クエリ
• get(): カラム名で取得
• multiget(): 一連のキーを対象にカラム名で取得• get slice(): カラム名または名前の範囲で取得
• カラムを返す• スーパーカラムを返す
• multiget slice(): 一連のキーを対象にカラムのサブセットを取得
• get count: カラムまたはサブカラムの数を取得
• get range slice(): 一定範囲のキーを対象にカラムのサブセットを取得
![Page 16: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/16.jpg)
カラムコンパレータ
• TimeUUID
• LexicalUUID
• UTF8
• Long
• Bytes
• ...
![Page 17: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/17.jpg)
更新
• insert(): カラムを追加/更新 (キーを指定)
• batch insert(): 複数のカラムを追加/更新 (キーを指定)
• remove(): カラムを削除
• batch mutate(): batch insert() に似ているが、削除も可能 (0.6での新機能で、batch insert()は廃止予定)
• キー範囲の削除(まもなく追加)
![Page 18: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/18.jpg)
整合性 (Consistency)
CAP定理:整合性 (Consistency)、可用性 (Availability)、または分断への耐性 (Partition tolerance)のうち、いずれか 2つを選択する
• Zero
• One
• Quorum ((N / 2) + 1)
• All
![Page 19: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/19.jpg)
クライアントAPI
• Thrift (12の異なる言語!)
• Ruby• http://github.com/fauna/cassandra/tree/master• http://github.com/NZKoz/cassandra object/tree/master
• Python• http://github.com/digg/lazyboy/tree/master• http://github.com/driftx/Telephus/tree/master (Twisted)
• Scala• http://github.com/viktorklang/Cassidy/tree/master• http://github.com/nodeta/scalandra/tree/master
![Page 20: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/20.jpg)
MySQLとのパフォーマンス比較 (50GB)
• MySQL• 300ms 書き込み• 350ms 読み取り
• Cassandra• 0.12ms 書き込み• 15ms 読み取り
![Page 21: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/21.jpg)
書き込み
![Page 22: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/22.jpg)
書き込みについて...
• 読み取りなし• シークなし• シーケンシャルディスクアクセス• 1つのカラムファミリ内ではアトミック
• 高速• 任意のノード• 常に書き込み可能 (ヒントハンドオフ)
![Page 23: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/23.jpg)
読み取り
![Page 24: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/24.jpg)
読み取りについて...
• 任意のノード• リードリペア• 通常のキャッシュ方法を利用
![Page 25: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/25.jpg)
アウトライン
..1 プロジェクトのこれまでの歩み
..2 解説
..3 ケーススタディ
..4 ロードマップ
![Page 26: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/26.jpg)
ケース 1: Digg
Diggは、ユーザーが記事やリンクを投稿することで、インターネット上の任意の場所にあるコンテンツを紹介、共有できるソーシャルニュースサイト。投稿された記事やリンクに対して投票したり、コメントしたりできる。
Alexa.comランキング 98位。
![Page 27: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/27.jpg)
Digg
![Page 28: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/28.jpg)
問題点
• テラバイト級のデータ、高いトランザクション(読み込みがメイン)
• 重度にシャーディングされた複数のクラスタ• 管理が重荷(作業量が膨大で、エラーが起こりやすい)• 可用性の要件を満たせない(地理的な分離)
![Page 29: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/29.jpg)
ソリューション
• 現在は「グリーンバッジ」で実際に利用• まもなく Cassandraをプライマリデータストアに
• データセンターとラックに対応したレプリケーション
![Page 30: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/30.jpg)
ケース 2: Twitter
Twitterは、ユーザーがツイートと呼ばれる 140字以内のテキストを投稿したり読んだりすることができるソーシャルネットワーキングサービス。いわゆるマイクロブログサービスである。
Alexa.comランキング 12位。
![Page 31: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/31.jpg)
![Page 32: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/32.jpg)
MySQL
• テラバイト級のデータ、˜1,000,000 ops/s
• 必要なのは重度のシャーディングと軽いレプリケーション• スキーマの変更が(不可能ではないにせよ)非常に困難• 人手によるシャーディングは作業量が膨大• シャーディングとレプリケーションの自動化が困難
![Page 33: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/33.jpg)
ケース 3: Facebook
Facebookは、ユーザーがプロフィールを作成したり、友人を追加したり、友人にメッセージを送信したりできるソーシャルネットワーキングサイト。ユーザーは、住んでいる場所や共通の興味などをテーマに作られたグループに参加できる。
Alexa.comランキング 2位。
![Page 34: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/34.jpg)
Inbox Search
• 100TB
• 160ノード
• 1日 5億回の書き込み(2年前の数字?)
![Page 35: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/35.jpg)
ケース 4: Mahalo
Mahalo.comは、ウェブディレクトリと知識交換のためのサイト。よく使われる検索語の多くを対象に、結果セットを手作業で追跡・構築している点が特徴。
(Mahaloはハワイ語で「ありがとう」の意味)
![Page 36: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/36.jpg)
MySQL
• 部分的デプロイ、1,600万本のビデオ(さらに増加中)
• シングルボックスの制限をすぐに超えてしまう書き込み(と保管)
• 管理が大変(クラスタリングが面倒)• 可用性の面での懸念
![Page 37: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/37.jpg)
アウトライン
..1 プロジェクトのこれまでの歩み
..2 解説
..3 ケーススタディ
..4 ロードマップ
![Page 38: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/38.jpg)
0.6
• batch mutateコマンド
• 認証(基本)• 新しい整合性レベル、ANY
• ファットクライアント• メモリマップド I/Oリード(64ビット jvmではデフォルト)
• 書き込み整合性の向上(HH)
• ネットワークの最適化• 行キャッシング• 管理ツールの改善• キースペースごとのレプリケーションファクター
![Page 39: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/39.jpg)
0.7
• より効率の高いコンパクション(メモリより大きな行サイズ)• カラムファミリの変更をさらに容易(ダイナミック?)に• SSTableのバージョニング
• SSTableの圧縮
• カラムファミリの切り捨てをサポート• 設定の取り扱いを改善• remove key range コマンド
• 管理ツールのいっそうの改善• ベクタークロックでサーバーサイドコンフリクトを解決
![Page 40: Cassandra 分散データベース](https://reader033.vdocuments.site/reader033/viewer/2022051014/54b7b0f04a7959ba688b45ad/html5/thumbnails/40.jpg)
おわり