NoSQL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

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

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

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

産業界での有名な実装として、GoogleBigTableアマゾンAmazon DynamoDBなどがある。オープンソースの実装も数多く存在し、例えばMongoDBRedisApache 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を利用できるものもある。

オープンソースのプロジェクト一覧[編集]

実装例[編集]

ドキュメントストア[編集]

名称 言語 補足
BaseX Java, XQuery XMLデータベース
Cloudant英語版 Erlang, Java, Scala, C JSONストア(オンラインサービス)
Clusterpoint英語版 C++ XML, 全文検索
Couchbase Server Erlang, C, C++ JSONとバイナリドキュメント
Apache CouchDB Erlang JSONデータベース
djondb[13][14][15] C++ JSON, ACIDドキュメントストア
Solr Java サーチエンジン
ElasticSearch英語版 Java JSON, サーチエンジン
eXist英語版 Java, XQuery XMLデータベース
Jackrabbit英語版 Java Java Content Repository英語版実装
IBM Lotus Notes and IBM Lotus Domino Lotus Script, Java, IBM X Pages, その他 MultiValue英語版
MarkLogic Server英語版 XQuery, Java, REST JSON対応のXMLデータベース, テキスト, バイナリ
MongoDB C++, C#, Go BSONストア(JSONのバイナリフォーマット)
ObjectDatabase++英語版 C++, C#, TScript英語版 C++ネイティブクラスのバイナリ
Oracle NoSQL Database英語版 Java, C
OrientDB英語版 Java JSON, SQLサポート
CoreFoundation Property list C, C++, Objective-C JSON, XML, バイナリ
Sedna英語版 XQuery, C++ XMLデータベース
SimpleDB Erlang オンラインサービス
TokuMX英語版 C++, C#, Go MongoDBとフラクタルツリーインデックス
OpenLink Virtuoso英語版 C++, C#, Java, SPARQL ミドルウェアデータベースエンジンのハイブリッド

グラフ[編集]

名称 言語 補足
AllegroGraph英語版 SPARQL RDFグラフストア
IBM DB2 SPARQL RDFグラフストアを追加したDB2 10
DEX/Sparksee英語版 Java, C++, .NET, Python ハイパフォーマンスグラフデータベース英語版
FlockDB英語版 Scala
InfiniteGraph英語版 Java ハイパフォーマンス, スケーラブル, 分散型グラフデータベース
Neo4j Java
OpenLink Virtuoso英語版 C++, C#, Java, SPARQL ミドルウェアデータベースエンジンのハイブリッド
OrientDB英語版 Java
Sones GraphDB英語版 C# GraphQLと呼ばれるクエリー言語を備えたグラフデータベース
Sqrrl Enterprise英語版 Java セルレベルのセキュリティに特化した分散型, リアルタイムグラフデータベース
OWLIM英語版 Java, SPARQL 1.1 推論付きRDFグラフストア

キーバリューストア[編集]

eventually consistent[編集]

ヒエラルキー[編集]

RAMキャッシュ[編集]

ソリッドステート・回転ディスク[編集]

ordered[編集]

オブジェクトデータベース[編集]

タビュラー[編集]

タプルストア[編集]

トリプル/クアッドストア (RDF) データベース[編集]

ホスト型[編集]

マルチバリューデータベース[編集]

参考文献[編集]

  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:http://doi.acm.org/10.1145/1462571.1462573. 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
  13. ^ The enterprise class NoSQL database. djondb. Retrieved on 2013-09-18.
  14. ^ http://tinman.cs.gsu.edu/~raj/8711/sp13/djondb/Report.pdf
  15. ^ Undefined Blog: Meeting with DjonDB. Undefvoid.blogspot.com. Retrieved on 2013-09-18.
  16. ^ Riak: An Open Source Scalable Data Store” (2010年11月28日). 2010年11月28日閲覧。
  17. ^ Tweed, Rob; George James (2010年). “A Universal NoSQL Engine, Using a Tried and Tested Technology (PDF)”. p. 25. 2014年3月14日閲覧。 “Without exception, the most successful and well-known of the NoSQL databases have been developed from scratch, all within just the last few years. Strangely, it seems that nobody looked around to see whether there were any existing, successfully implemented database technologies that could have provided a sound foundation for meeting Web-scale demands. Had they done so, they might have discovered two products, GT.M and Caché.....*”

関連項目[編集]