NoSQL
NoSQLとは、リレーショナルデータベース管理システム(RDBMS)以外のデータベース管理システムを指し、リレーショナルデータベースの長い歴史を打破するものとして、広い意味での関係モデル以外に属するデータベースの発展を促進させようとする運動である。関係モデルではないデータストアの特徴として、固定されたスキーマに縛られないこと、関係モデルの結合操作を利用しないこと(場合によっては単にそのような機能が欠落しているだけ)、水平スケーラビリティが確保しやすい事が多い、トランザクションを利用できないものが多いことなどが挙げられる。学術論文や正式な文書ではこの種のデータベースのことを構造型ストレージ (英: structured storage) と呼ぶことが多い[1][2][3][4]。
産業界での有名な実装として、GoogleのBigTable、アマゾンのAmazon DynamoDBなどがある。オープンソースの実装も数多く存在し、MongoDB、Apache HBase、Apache Cassandraなどがある。
歴史
NoSQLという用語は1998年、SQLインターフェイスを持たない軽量な関係データベースのオープンソースソフトウェアの名前として最初に用いられた。その著者Carlo StrozziはNoSQL運動について、「関係モデル全体と一線を画すものであるから、『NoREL』などと名づけられるべきだった」と主張している[5]。この用語は、Last.fmのJohan Oskarssonの呼びかけによって2009年初頭に開催されたオープンソースの分散データベースについての会合において、Rackspaceの従業員Eric Evansによって再導入された[6]。この名前はMySQL、MS SQL、PostgreSQLなど関係データベースのシステムで広く用いられていた命名法を参照して付けられたものであり、ACID保証を提供しないような非関係型の分散データストアの勃興を表現する意図が込められていた。
NoSQL運動が普及するに従い、その名前のもつネガティブな印象(SQLは不要である、など)が問題となり議論が起こっている。Eric EvansはNoSQLをNot only SQLのバクロニムとして理解するのが好ましいとしている[7]。
アーキテクチャ
現代的な関係データベースは、小規模の高頻度なトランザクションか、巨大だが書き込みをほとんど伴わないトランザクションに最適化されて設計されているため、近年必要とされてきている大規模データに基づく (英: data-intensive) 応用事例では性能が劣化してしまう[8]。そのような応用の例として、検索のための文書のインデキシング、トラフィックの高いウェブサイトのサーバ、ストリーミングデータの配布などがあり、Diggのgreen badge[9]、Facebookのインボックスの検索、eBayのシステム全体などがその実例である。
NoSQLのアーキテクチャにおいては、結果整合性のみを保証するなどして一貫性の保証を弱く設計したり、トランザクションをひとつのデータアイテムに限るという制限を設けたりすることが多い。補助的なミドルウェアの層を付加することによって完全なACID保証を提供している場合もある[10]。
いくつかのNoSQLシステムは分散アーキテクチャを採用している。そのようなシステムでは、多くの場合は分散ハッシュテーブルを用いて、データを複数のサーバーに、冗長性を持たせながら配置する。これにより、サーバーを追加するだけでシステムを容易にスケールアップさせることができ、障害への耐性も強くなる[11]。
分類
NoSQL には、主要なものとして、以下のものがある。
- キー・バリュー型 (Key Value Store) - キーに対して値という単純な構造。
- カラム指向 - キーに対して、カラム(名前と値の組み合わせ)の集合。Apache Cassandra, Apache HBase, Amazon DynamoDB, Basho Riakなど。
- ドキュメント指向 - XMLやJSONといった、 スキーマレスでデータ構造が柔軟なもの。MongoDB, Apache CouchDB など。XMLデータベースなどのシステムでは、XQueryを利用できるものもある。
オープンソースのプロジェクト一覧
- Apache Cassandra - Key Value Store
- Apache CouchDB - スキーマレス
- Apache HBase - Key Value Store
- ArangoDB - multi-model database
- Basho Riak - Distributed Database / Key Value Store
- Chordless
- Db4o
- GT.M
- Hypertable
- Memcachedb
- Mnesia
- MongoDB - スキーマレス
- Project Voldemort
- Redis
- SimpleDB
- Neo4j
- DEX
- BaseX
- eXist
- AllegroGraph
- OrientDB
- InfiniteGraph
- Sones GraphDB
- InfoGrid
- HyperGraphDB
参考文献
- ^ Hamilton, James (2009年11月3日). “Perspectives: One Size Does Not Fit All”. 2009年11月13日閲覧。
- ^ Lakshman, Avinash; Malik, Prashant. Cassandra — A Decentralized Structured Storage System. Cornell University 2009年11月13日閲覧。.
- ^ Chang, Fay; Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, and Robert E. Gruber. Bigtable: A Distributed Storage System for Structured Data. Google 2009年11月13日閲覧。.
- ^ Kellerman, Jim. “HBase: structured storage of sparse data for Hadoop”. 2009年11月13日閲覧。
- ^ “NoSQL Relational Database Management System: Home Page”. Strozzi.it (2007年10月2日). 2010年3月29日閲覧。
- ^ “NOSQL 2009”. Blog.sym-link.com (2009年5月12日). 2010年3月29日閲覧。
- ^ “NoSQL: What's in a name?”. Eric Evans's Weblog (2009年10月30日). 2010年5月31日閲覧。
- ^ Agrawal, Rakesh et al. (2008). “The Claremont report on database research”. SIGMOD Record (ACM) 37 (3): 9--19. エラー: 不正なDOI指定です. ISSN 0163-5808.
- ^ “Looking to the future with Cassandra | Digg About”. About.digg.com (2009年9月9日). 2010年3月29日閲覧。
- ^ 例:“CloudTPS: Scalable Transactions for Web Applications in the Cloud”. Globule.org. 2010年3月29日閲覧。
- ^ “Cassandra: Structured Storage System over a P2P Network” (PDF). 2010年3月29日閲覧。