コンテンツにスキップ

NoSQL

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Snowcocoa (会話 | 投稿記録) による 2013年2月16日 (土) 15:59個人設定で未設定ならUTC)時点の版 (カテゴリーを追加)であり、現在の版とは大きく異なる場合があります。

NoSQL(一般に”Not only SQL”と解釈される)とは、リレーショナルデータベース管理システム (RDBMS) 以外のデータベース管理システムを指すおおまかな分類語である。リレーショナルデータベースをやみくもに使用してきた長い歴史を打破し、それ以外のデータベースの利用・発展を促進させようとする運動の標語としての意味合いを持つ。関係モデルではないデータストアの特徴として、固定されたスキーマに縛られないこと、関係モデルの結合操作を利用しないこと(場合によっては単にそのような機能が欠落しているだけ)、水平スケーラビリティが確保しやすい事が多いこと、トランザクションを利用できないものが多いことなどが挙げられる。学術的な世界では、この種のデータベースのことを構造型ストレージ (: structured storage) と呼ぶことが多い[1][2][3][4]

NoSQL系データベース管理システムには、データの格納および取得が高度に最適化されているものが多い。その最適化のために機能性を最小限にしているものもある。「値」およびそれを取得するための「キー」だけを格納できるKey-Value型データベースは、その最たる例である。

NoSQL系データベース管理システムが有用な場面は、関係モデルを必要としないデータを扱う時や、大量のデータを扱う時である。用途は多様であり、数百万のkey-valueペアを格納したり、数個程度の連想配列を格納したり、数百万の構造的データを格納したりと、様々に使われる。この構造は、大規模なデータを統計的に解析したり、増えつづける情報をリアルタイムに解析するのにも便利である。

産業界での有名な実装として、GoogleBigTableアマゾンAmazon DynamoDBなどがある。オープンソースの実装も数多く存在し、例えばMongoDB RedisApache HBaseApache Cassandraなどがある。

歴史

NoSQLという用語は1998年、SQLインターフェイスを持たない軽量な関係データベースのオープンソースソフトウェアの名前として最初に用いられた。その著者Carlo StrozziはNoSQL運動について、「関係モデル全体と一線を画すものであるから、『NoREL』などと名づけられるべきだった」と主張している[5]。この用語は、Last.fmのJohan Oskarssonの呼びかけによって2009年初頭に開催されたオープンソースの分散データベースについての会合において、Rackspace英語版の従業員Eric Evansによって再導入された[6]。この名前はMySQLMS SQLPostgreSQLなど関係データベースのシステムで広く用いられていた命名法を参照して付けられたものであり、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 には、主要なものとして、以下のものがある[12]

  • キー・バリュー型 (Key Value Store) - キーに対してバリュー(値)という単純な構造。Amazon DynamoDB, Basho Riak, Redisなど。大半はバリューとして単純なバイナリデータ(BLOB)のみが格納できるが、 Redisのようにリスト、マップ、ソート済みセットといったリッチなデータ構造をサポートするものもある。またバリューに加えて、タグやメタデータと呼ばれる追加情報が格納できるものも多い。日本発のものには okuyama, Hibari などがある。
  • ソート済みカラム指向 - 行キーに対してカラム(名前と値の組み合わせ)の集合を持つ。行ごとに好きな名前のカラムを好きな数だけ格納できる。カラムはカラム名によってソートされるため、例えばカラム名に時刻を使うことで1行の中に時系列のデータを格納することできる。Apache Cassandra, Apache HBaseなど。
  • ドキュメント指向 - XMLやJSONといった、 スキーマレスでデータ構造が柔軟なもの。MongoDB, Apache CouchDB など。XMLデータベースなどのシステムでは、XQueryを利用できるものもある。

オープンソースのプロジェクト一覧

参考文献

  1. ^ Hamilton, James (2009年11月3日). “Perspectives: One Size Does Not Fit All”. 2009年11月13日閲覧。
  2. ^ Lakshman, Avinash; Malik, Prashant. Cassandra — A Decentralized Structured Storage System. Cornell University. http://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf 2009年11月13日閲覧。. 
  3. ^ 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. http://labs.google.com/papers/bigtable-osdi06.pdf 2009年11月13日閲覧。. 
  4. ^ Kellerman, Jim. “HBase: structured storage of sparse data for Hadoop”. 2009年11月13日閲覧。
  5. ^ NoSQL Relational Database Management System: Home Page”. Strozzi.it (2007年10月2日). 2010年3月29日閲覧。
  6. ^ NOSQL 2009”. Blog.sym-link.com (2009年5月12日). 2010年3月29日閲覧。
  7. ^ NoSQL: What's in a name?”. Eric Evans's Weblog (2009年10月30日). 2010年5月31日閲覧。
  8. ^ Agrawal, Rakesh et al. (2008). “The Claremont report on database research”. SIGMOD Record (ACM) 37 (3): 9--19. エラー: 不正なDOI指定です. ISSN 0163-5808. 
  9. ^ Looking to the future with Cassandra | Digg About”. About.digg.com (2009年9月9日). 2010年3月29日閲覧。
  10. ^ 例:CloudTPS: Scalable Transactions for Web Applications in the Cloud”. Globule.org. 2010年3月29日閲覧。
  11. ^ Cassandra: Structured Storage System over a P2P Network” (PDF). 2010年3月29日閲覧。
  12. ^ Database Landscape Map – December 2012

関連項目