Skip to content

Instantly share code, notes, and snippets.

@yuokada
Created February 27, 2012 01:44
Show Gist options
  • Save yuokada/1920610 to your computer and use it in GitHub Desktop.
Save yuokada/1920610 to your computer and use it in GitHub Desktop.
Cassandra Memo

Cassandraとは

オープンソースの分散データベース管理システムである。 元はFacebook社において大規模データの格納のために開発されたものである。 Facebookのデータチームを率いるJeff HammerbacherはCassandraをDynamoのようなインフラストラクチャ上で動作するBigTableデータモデルであると表現している。

Cassandraはイベンチュアル・コンシステンシーにより構造化されたキー・バリュー型データストアを提供する。 キーは複数の値にマッピングされ、これらはcolumn familyとしてグルーピングされる。 column familyはCassandraデータベースが作成される際は固定されているが、後にfamilyに対し列を追加することは可能である。 さらに、列は特定のキーにのみ追加されるので、どのfamilyにおいても異なるキーは任意の列数を持つことができる。 各キーに対応するcolumn familyの値は連続して記録され、このことによりCassandraは列指向データベースマネジメントシステムと行指向データベースシステムの複合型であると言える。

実績

tiwtter, digg, facebookで現在も利用中。 アメリカ政府では400台のクラスタを構成して運用中。

特徴

  • 列指向データベース
  • 分散ハッシュテーブル
  • カラムナデータ構造 ¥(カラム指向データ構造¥)
  • CAP定理でいうAPが強い。一貫性は落ちる
  • 一貫性はApp側で行う必要があり  複数のノードで分散してデータを保持する。このノードの集まりのことを「クラスタ」と呼ぶ。
  • すべてのノードが同一の機能を持ち、1つのデータは複製されて同じクラスタ内の複数のノードに格納される。
  • SPOFなし
  • クライアントは、クラスタのどのノードに対してもデータの書き込みや読み込みをリクエストすることができる。 書き込みリクエストを受け取ったノードでは、トークンを計算してデータやその複製を保持するノードを決定する。
  • 無停止でスケールアウトできる
  • 書き込みが高速。読み込みはそれほど早くないけど最新バージョンを使うことでそれほど気にする必要はなくなる
  • Hadoop Mapreduce 対応(ver 0.7 以降)

データモデル

Cassandraのデータモデルは、「キースペース」「カラムファミリー」「キー」「スーパーカラム」「カラム」の5つの要素から構成される。 [キースペース]+[カラムファミリー]+[キー](+[スーパーカラム]+)[カラム]が、データを特定するためのキーとして扱われる。

セカンダリインデックス

ver0.7でサポートされた機能 日本語でちゃんと解説されているサイトはまだ見かけない。 みんな英語読んで自分が使えたらOKな感じで誰も翻訳してくれてない。 セカンダリインデックスの解説はここが一番詳しいと教えてもらったのでここを読んでかいつまんで解説する。 Secondary Indexes | DataStax Cassandra 0.7 Documentation About Indexes in Cassandra | DataStax Cassandra 1.0 Documentation

まとめ

  • Cassandra は銀の弾丸じゃないですよ。
  • RDBMSと併用しながら使っている事例が多い。(ex.FacebookのInboxサーチ, twitterのログ解析)

Link

主要NoSQLの種類と特性を整理--分散DBMS「Cassandra」も解説 - builder Developers summit cassandraで見るNoSQL へ~たのめも:Riak と Cassandra と HBase、あらまー! - livedoor Blog(ブログ) Cassandraとh baseの比較して入門するno sql

Okada-no-MacBook-Air% ./bin/cassandra-cli --host localhost --port 9160
Connected to: "Test Cluster" on localhost/9160
Welcome to Cassandra CLI version 1.0.7
Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.
[default@unknown] use Trace;
Authenticated to keyspace: Trace
分散データベース管理システムCassandraにPython + Lazyboyでデータ登録 - Symfoware
http://symfoware.blog68.fc2.com/blog-entry-353.html
Cassandraに登録した住所を郵便番号で検索する - Symfoware
http://symfoware.blog68.fc2.com/blog-entry-354.html
pycassa/pycassa - GitHub
https://github.com/pycassa/pycassa
www.datastax.com/doc-source/pdf/cassandra10.pdf
http://www.datastax.com/doc-source/pdf/cassandra10.pdf
Okada-no-MacBook-Air% sudo pip install lazyboy
Downloading/unpacking lazyboy
Downloading Lazyboy-0.7.4.tar.gz
Running setup.py egg_info for package lazyboy
Requirement already satisfied (use --upgrade to upgrade): Thrift in /Library/Python/2.7/site-packages (from lazyboy)
Downloading/unpacking Cassandra>=0.4.0 (from lazyboy)
Downloading Cassandra-0.5.0.tar.gz
Running setup.py egg_info for package Cassandra
Installing collected packages: lazyboy, Cassandra
Running setup.py install for lazyboy
Running setup.py install for Cassandra
changing mode of build/scripts-2.7/Cassandra-remote from 644 to 755
changing mode of /usr/local/bin/Cassandra-remote to 755
Successfully installed lazyboy Cassandra
Cleaning up...
Okada-no-MacBook-Air% cat module.txt
BeautifulSoup==3.2.0
Cassandra==0.5.0
Lazyboy==0.7.4
Paste==1.7.5.1
PasteDeploy==1.5.0
PasteScript==1.7.5
PyMySQL==0.5
PyRSS2Gen==1.0.0
PyYAML==3.10
Twisted==11.0.0
altgraph==0.7.1
bdist-mpkg==0.4.4
bert==1.0.0
bertrpc==0.1.1
bonjour-py==0.3
coverage==3.5.1
erlastic==1.0.0
feedparser==5.0.1
httplib2==0.7.2
include-server==3.1-toolwhip.1
macholib==1.3
mock==0.7.2
modulegraph==0.8.1
mox==0.5.3
nose==1.0.0
numpy==1.5.1
ordereddict==1.1
py2app==0.5.3
pyDes==2.0.1
pyOpenSSL==0.12
pycassa==1.4.0
python-dateutil==1.5
python-prefork==0.1.2
seiyu==0.1.5dev
simplejson==2.2.1
thrift==0.8.0
wsgiref==0.1.2
xattr==0.6.1
yjnewscomment==0.1.0
zope.interface==3.5.1
@yuokada
Copy link
Author

yuokada commented Feb 28, 2012

cap
可用性-ネットワーク分断体制のラインを重視したプロダクト。

BrewersCapTheorem - ブリュワーの CAP 定理
http://www.hyuki.com/yukiwiki/wiki.cgi?BrewersCapTheorem

Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発

  • ノード数に比例して性能がスケールする
  • 更新を行わずに書き込みだけに特化すれば一貫性がないことは無視出来る。
  • フォールトトレラント耐性
  • チューニング可能

Cassandraの構造 - LunaBiblos
http://lunarium.info/arc/index.php/Cassandra%E3%81%AE%E6%A7%8B%E9%80%A0

Cassandraのしくみ データの読み書き編
http://www.slideshare.net/yukim/cassandra-3885571
Cassandraとh baseの比較して入門するno sql
http://www.slideshare.net/yutuki/cassandrah-baseno-sql

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment