Keyword : Riak, NoSQL, general
NoSQL <= Not only SQL <= No, I don't like SQL
- NoSQLというかデータストアの業界とその分類、使い分けのコツ
- Riakというデータベースを理解して使ってもらう!!!
- SQLとはなにか?(データベースの歴史から?)
- NoSQLの分類軸(インターフェース、CAP、保存/キャッシュ/分析)
- スケールアウト型おおまかにいって2通り: 構造化しゃーでぃんぐ、P2P型シャーディング
- レプリケーションと整合性(Quorum, 分散合意、アトミックブロードキャスト、Vector Clocks etc)
- Riakの特徴: P2P型シャーディング、Soft State, Siblings 「とりあえず書きこむ」
- データベースが動く処理系(ネイティブコード、JVM, Erlang VM)による特徴の違い
- 永続化のアプローチも(WAL, mmap, etc?)
データとは何か?
0100010101110001111 <- これはデータか? { "foo" : "bar", "baz":[] } <- これはデータか? ....
データベースとは何か? データを出し入れできる データを安全に出し入れできる(Constraintをこわさない) データを高速に出し入れできる データをなくさない データをデータ構造を保ったまま保存できる
SQL history
関係モデル 70年代 SQLデータベース 80年代 NoSQL 00年代
コンピュータの登場は1940年台、その前は?
階層型DB, CodaSYL (COBOL)
NoSQLの歴史はSQLよりも古い(えっ
データベース的な
1, 2, 3, 4 どこまでがデータベース? どこからがNoSQL?
SQL \ ACID | + | - | -----------+-----+-----+ + | 1 | 2 | -----------+-----+-----+ - | 3 | 4 |
1 - 狭い範囲でのデータベース *SQL 2 - CassandraとかHiveとか ... 3 - InnoDB etc 4 - "No"SQL, Riak
SQLかそうでないか≒JOINがあるかどうか(JOINは難しい)
歴史的には、 1->4 への移行 4->2 へいこうとしていなくはない (4 -> 3 -> 1 -> 4 -> 2) <= Qをはさむ
"Web Scale" の時代
「実態は、NoSQLではなくNoACID」
この講義ではNoACIDのはなしをします。SQLはデータモデリングやアプリ構造の話なので、もうひとつ実はレイヤーが上
NoACIDにして解きたい問題はスケーリング(Write, Read, Size)、可用性(Read, Write)。
東工大のスライドを流用
BigTable, HBase vs Dynamo, Cassie, Riak
その他のデータベースはいっぱいありすぎてわからん
Q. 整合性(Consistency) って何だとおもう?
整合性のふたつの文脈 ・RDBMSの整合性は、concurrent update というか、同じデータを別のスレッドが見に行くとかそういう話 ・NoSQLでいう整合性は、「レプリカ間」の整合性のはなし
→前者は他の講義で話したはず…こんかいは後者
CAP定理→スケールアウトではなくレプリケーションに関するもの。BASEもそっち。
CAP定理とBASEの概念
CAP定理の概念をよく覚えて「高可用かつトランザクション」とかいってる製品を信用してはいけない。
- Quorum
- 分散合意の問題は難しい
- アトミックブロードキャスト
- ベクタークロック(Lamport Clockによる)←これがBASEというものを体現している
- CRDT (Commutative Replicated Datatypes) 可換データ型
ACIDするための技術 アトミックブロードキャストプロトコル WAL BASEするための技術 AAE CRDT
- System R: Astrahan, M. M.; Blasgen, M. W.; Chamberlin, D. D.; Eswaran, K. P.; Gray, J. N.; Griffiths, P. P.; King, W. F.; Lorie, R. A.; McJones, P. R.; Mehl, J. W.; Putzolu, G. R.; Traiger, I. L.; Wade, B. W. & Watson, V. (1976), 'System R: Relational Approach to Database Management', ACM Trans. Database Syst. 1 , 97--137 .
- GFS: Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung, "The Google File System," SOSP 2003.
- BigTable: Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, and Robert E. Gruber. 2006. Bigtable: a distributed storage system for structured data. In Proceedings of the 7th USENIX Symposium on Operating Systems Design and Implementation - Volume 7 (OSDI '06), Vol. 7. USENIX Association, Berkeley, CA, USA, 15-15.
- Dynamo: Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swaminathan Sivasubramanian, Peter Vosshall, and Werner Vogels. 2007. Dynamo: amazon's highly available key-value store. In Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles (SOSP '07). ACM, New York, NY, USA, 205-220. DOI=10.1145/1294261.1294281 http://doi.acm.org/10.1145/1294261.1294281
- Cassandra: Avinash Lakshman and Prashant Malik. 2010. Cassandra: a decentralized structured storage system. SIGOPS Oper. Syst. Rev. 44, 2 (April 2010), 35-40. DOI=10.1145/1773912.1773922 http://doi.acm.org/10.1145/1773912.1773922
- Paxos: Leslie Lamport, Paxos Made Simple ACM SIGACT News (Distributed Computing Column) 32, 4 (Whole Number 121, December 2001) 51-58.
- Paxos: Tushar D. Chandra, Robert Griesemer, and Joshua Redstone. 2007. Paxos made live: an engineering perspective. In Proceedings of the twenty-sixth annual ACM symposium on Principles of distributed computing (PODC '07). ACM, New York, NY, USA, 398-407. DOI=10.1145/1281100.1281103 http://doi.acm.org/10.1145/1281100.1281103
- Raft: Diego Ongaro and John Ousterhout, In Search of an Understandable Consensus Algorithm, Draft 2013.
- ZAB: Benjamin Reed and Flavio P. Junqueira, A simple totally ordered broadcast protocol, LADIS 2008.
- ZAB: Flavio Junqueira, Benjamin Reed, and Marco Serafini, "DISSECTING ZAB", Yahoo! Labs Technical Report, YL2007-2010.
- ZAB: Flavio Junqueira, Benjamin Reed, and Marco Serafini, Zab: High-performance broadcast for primary-backup systems, DSN 2011.
- Vector Clocks: Mattern, F. (October 1988), "Virtual Time and Global States of Distributed Systems", in Cosnard, M., Proc. Workshop on Parallel and Distributed Algorithms, Chateau de Bonas, France: Elsevier, pp. 215–226
- CRDT: Marc Shapiro, Nuno Preguiça, Carlos Baquero, and Marek Zawirski. 2011. Conflict-free replicated data types. In Proceedings of the 13th international conference on Stabilization, safety, and security of distributed systems (SSS'11), Xavier Défago, Franck Petit, and Vincent Villain (Eds.). Springer-Verlag, Berlin, Heidelberg, 386-400.
- Other Readings in Distributed Systems
- Rusty Klophaus. 2010. Riak Core: building distributed applications without shared state. In ACM SIGPLAN Commercial Users of Functional Programming (CUFP '10). ACM, New York, NY, USA, , Article 14 , 1 pages. DOI=10.1145/1900160.1900176 http://doi.acm.org/10.1145/1900160.1900176
- Christopher Meiklejohn. 2013. Riak PG: distributed process groups on dynamo-style distributed storage. In Proceedings of the twelfth ACM SIGPLAN workshop on Erlang (Erlang '13). ACM, New York, NY, USA, 27-32. DOI=10.1145/2505305.2505309 http://doi.acm.org/10.1145/2505305.2505309
- Bryan Fink. 2012. Distributed computation on dynamo-style distributed storage: riak pipe. In Proceedings of the eleventh ACM SIGPLAN workshop on Erlang workshop (Erlang '12). ACM, New York, NY, USA, 43-50. DOI=10.1145/2364489.2364497 http://doi.acm.org/10.1145/2364489.2364497
- 分散トランザクション、Soft State(BASE / ACID)
- データベースでのリカバリの話はしない
- NoSQLというかデータストアの業界とその分類、使い分けのコツ
- Riakというデータベースを理解して使ってもらう!!!
- SQLとはなにか?(データベースの歴史から?)
- NoSQLの分類軸(インターフェース、CAP、保存/キャッシュ/分析)
- スケールアウト型おおまかにいって2通り: 構造化しゃーでぃんぐ、P2P型シャーディング
- レプリケーションと整合性(Quorum, 分散合意、アトミックブロードキャスト、Vector Clocks etc)
- Riakの特徴: P2P型シャーディング、Soft State, Siblings 「とりあえず書きこむ」
- データベースが動く処理系(ネイティブコード、JVM, Erlang VM)による特徴の違い
- 永続化のアプローチも(WAL, mmap, etc?)
おまけ(maybe)
- 分散トランザクション、Soft State(BASE / ACID)
- データベースでのリカバリの話はしない
いろんなタイプがあり、軸がある
- 1台で動くタイプ、ライブラリタイプ
- N台で動くタイプ、スケールアウト型/単なる冗長構成型
- CAP定理でいうCA, AP
最近はSQL(っぽいインターフェース)を持ったものも増えている
故障モデルはまあ、実際にあった怖い話をちょっとしようかと思います
。ビザンチン故障は遭遇したことがないのであまり触れないと思います(批判はするかも)。
合意のあたりで,その難しさについて御解説頂けたら嬉しく思います.
停止故障,ビザンチン故障の細かい分類がもしもあれば嬉しく思います.
また,NOSQLのデータモデルとして,graph, document, kvsについてざざっと触れて頂け
たら幸いです.