NoSQL

NoSQL(元々は「Not only SQL 」または「非リレーショナル」の意味)[ 1 ]、従来のテーブルベースのリレーショナルデータベースの構造とは異なる方法でデータを保存および取得するデータベース設計の一種を指します。スプレッドシートのようにデータを行と列に整理するリレーショナルデータベースとは異なり、NoSQLデータベースは、キーと値のペア幅の広い列グラフドキュメントなどの単一のデータ構造を使用して情報を保持します。この非リレーショナル設計は固定のスキーマを必要としないため、大規模で非構造化されていることが多いデータセットを管理するために簡単に拡張できます。[ 2 ] NoSQLシステムは、 SQLのようなクエリ言語をサポートしたり、複数のデータベースタイプが組み合わされたポリグロットパーシステントセットアップでSQLデータベースと連携したりできるため、 「Not only SQL」と呼ばれることもあります[ 3 ] [ 4 ]非リレーショナルデータベースは1960年代後半にまで遡りますが、「NoSQL」という用語はソーシャルメディアプラットフォームなどのWeb 2.0企業のニーズに後押しされて2000年代初頭に登場しました。 [ 5 ] [ 6 ]

NoSQLデータベースは、そのシンプルな設計、マシンのクラスタにわたるスケーリング機能(水平スケーリングと呼ばれる)、およびデータ可用性の正確な制御により、ビッグデータおよびリアルタイムWebアプリケーションで人気がある。[ 7 ] [ 8 ]これらの構造は特定のタスクを高速化することができ、多くの場合、固定データベーステーブルよりも適応性が高いと見なされる。[ 9 ]しかし、多くのNoSQLシステムでは、厳密な一貫性(CAP定理による)よりも速度と可用性を優先し、結果整合性を使用している。結果整合性とは、更新が最終的にすべてのノードに届く(通常は数ミリ秒以内)が、最新データへのアクセスに短い遅延(古い読み取りと呼ばれる)が発生する可能性がある整合性である。[ 10 ]ほとんどのシステムでは完全なACIDトランザクションサポートが欠如しているが、MongoDBなど一部のシステムでは、ACIDトランザクションが主要機能として含まれている。[ 11 ]

導入の障壁

NoSQL の普及を阻む要因としては、SQL ではなく低レベルのクエリ言語を使用していること、テーブル間でアドホック結合を実行できないこと、標準化されたインターフェースがないこと、リレーショナル データベースに既に多額の投資を行っていることなどが挙げられます。 [ 12 ] NoSQL システムの中には、書き込みの欠落などによってデータが失われるリスクがあるものもありますが、先行書き込みログ(変更を適用する前に記録する方法) などの機能によってこれを防ぐことができます。[ 13 ] [ 14 ]複数のデータベースにまたがる分散トランザクション処理では、データの一貫性を保つことが NoSQL システムとリレーショナル システムの両方にとって課題となります。リレーショナル データベースでは、別々のデータベースをリンクするルールを適用できず、分散更新を管理するためのACIDトランザクションとX/Open XA標準の両方をサポートするシステムはほとんどありません。 [ 15 ] [ 16 ]インターフェース環境内の制限はセマンティック仮想化プロトコルを使用することで克服され、NoSQL サービスはほとんどのオペレーティング システムからアクセス可能になります。[ 17 ]

歴史

Last.fm プレーヤー
Last.fm プレーヤー

NoSQLという用語は、1998年にカルロ・ストロッツィによって、標準的な構造化照会言語(SQL)インターフェースを公開していないものの、リレーショナルであった軽量のStrozzi NoSQLオープンソースリレーショナルデータベースに名前を付けるために使用されました。 [ 18 ]彼のNoSQL RDBMSは、2009年頃のNoSQLデータベースの一般的な概念とは異なります。ストロッツィは、現在のNoSQLの動きは「リレーショナルモデルから完全に逸脱しているため、より適切には『NoREL』と呼ぶべきだった」と示唆しています。[ 19 ]これは「リレーショナルではない」という意味です

当時Last.fmの開発者だったヨハン・オスカーソンは、2009年初頭に「オープンソースの分散型非リレーショナルデータベース」について議論するイベントを開催し、NoSQLという用語を再導入しました。[ 20 ]この名前は、GoogleのBigtable / MapReduceやAmazonのDynamoDBのオープンソースクローンを含む、非リレーショナル分散型データストアの増加を示すために付けられました。

種類と例

NoSQLデータベースの分類には様々な方法があり、異なるカテゴリとサブカテゴリに分類されますが、一部は重複しています。以下は、データモデルによる分類ですが、網羅的ではありません。例を挙げます。[ 21 ]

タイプこのタイプの注目すべき例
キーバリューキャッシュApache IgniteCouchbaseCoherenceeXtreme ScaleHazelcastInfinispanMemcachedRedis、Velocity
キーバリューストアAzure Cosmos DBArangoDBAmazon DynamoDBAerospikeCouchbaseScyllaDB
キーバリューストア(結果整合性)Azure Cosmos DBOracle NoSQL データベースRiakVoldemort
キーバリューストア(順序付き)FoundationDBInfinityDBLMDBMemcacheDB
タプルストアApache RiverGigaSpacesTarantoolTIBCO ActiveSpaces、OpenLink Virtuoso
トリプルストアAllegroGraphMarkLogicOntotext-OWLIMOracle NoSQLデータベース、Profium Sense、Virtuoso Universal Server
オブジェクトデータベースObjectivity/DBPerstZODBdb4oGemStone/SInterSystems CachéJADEObjectDatabase++ObjectDBObjectStoreODABARealmOpenLink VirtuosoVersantオブジェクトデータベースインデックス付きデータベースAPI
ドキュメントストアAzure Cosmos DBArangoDBBaseXClusterpointCouchbaseCouchDBDocumentDBeXist-dbGoogle Cloud FirestoreIBM DominoMarkLogicMongoDBRavenDBQizxRethinkDBElasticsearchOrientDB
ワイドカラムストアAzure Cosmos DBAmazon DynamoDBBigtableCassandraGoogle Cloud DatastoreHBaseHypertableScyllaDB
ネイティブマルチモデルデータベースArangoDBAzure Cosmos DBOrientDBMarkLogicApache Ignite[ 22 ] [ 23 ] CouchbaseFoundationDBOracle Database、AgensGraph
グラフデータベースAzure Cosmos DBAllegroGraphArangoDBApache GiraphGUN(Graph Universe Node)InfiniteGraphMarkLogicNeo4JOrientDBVirtuoso
マルチバリューデータベースD3 PickデータベースExtensible Storage Engine(ESE/NT)、InfinityDBInterSystems Caché、jBASE Pickデータベース、mvBase Rocket Software、mvEnterprise Rocket SoftwareNorthgate Information Solutions Reality(オリジナルのPick/MVデータベース)、OpenQM、Revelation SoftwareのOpenInsight(Windows)およびAdvanced Revelation(DOS)、UniData Rocket U2、UniVerse Rocket U2

キーバリューストア

キーバリュー(KV)ストアは、連想配列(マップまたは辞書とも呼ばれます)を基本的なデータモデルとして使用します。このモデルでは、データはキーと値のペアのコレクションとして表現され、各キーはコレクション内で最大1回しか出現しません。[ 24 ] [ 25 ]

キーバリューモデルは最も単純かつ非自明なデータモデルの一つであり、より高度なデータモデルはしばしばその拡張として実装される。キーバリューモデルは、キーを辞書式順序で維持する離散順序モデルに拡張することができる。この拡張は計算力が非常に高く、選択的なキー範囲を効率的に取得することができる。[ 26 ]

キーバリューストアは、結果整合性からシリアル化可能性まで、幅広い一貫性モデルを使用できます。一部のデータベースはキーの順序付けをサポートしています。ハードウェア実装には様々な種類があり、データをメモリ(RAM)に保存するユーザーもいれば、ソリッドステートドライブ(SSD)や回転式ディスク(ハードディスクドライブ(HDD)とも呼ばれます)に保存するユーザーもいます。

ドキュメントストア

ドキュメントストアの中心的な概念は「ドキュメント」です。この定義の詳細はドキュメント指向データベースによって異なりますが、いずれの場合も、ドキュメントはデータ(または情報)を何らかの標準形式またはエンコーディングでカプセル化し、エンコードすることを前提としています。使用されるエンコーディングには、XMLYAMLJSON、そしてBSONのようなバイナリ形式が含まれます。ドキュメントは、データベース内でそのドキュメントを表す一意のキーによってアドレス指定されます。ドキュメント指向データベースのもう一つの特徴は、ドキュメントの内容に基づいてドキュメントを取得するためのAPIまたはクエリ言語を備えていることです。

実装によって、ドキュメントを整理およびグループ化する方法が異なります。

  • コレクション
  • タグ
  • 非表示のメタデータ
  • ディレクトリ階層

リレーショナルデータベースと比較すると、コレクションはテーブル、ドキュメントはレコードに類似していると考えることができます。しかし、両者は異なります。テーブル内のすべてのレコードは同じフィールドの順序を持​​ちますが、コレクション内のドキュメントは全く異なるフィールドを持つ場合があります。

グラフ

グラフデータベースは、有限数の関係で接続された要素からなるグラフとして、関係が適切に表現されるデータ用に設計されています。データの例としては、社会関係、公共交通機関の接続、道路地図、ネットワークトポロジなど が挙げられます

グラフデータベースとそのクエリ言語
名前言語備考
エイジェンズグラフサイファーマルチモデルグラフデータベース
AllegroGraphSPARQLRDFトリプルストア
Amazon NeptuneグレムリンSPARQLグラフデータベース
ArangoDBAQL、JavaScriptGraphQLマルチモデル DBMSドキュメントグラフデータベースキーバリューストア
Azure Cosmos DBGremlinグラフデータベース
DEX/SparkseeC++JavaC#Pythonグラフデータベース
FlockDBScalaグラフデータベース
GUN(グラフユニバースノード)JavaScriptグラフデータベース
IBM Db2SPARQLDB2 10で RDFトリプルストアが追加されました
InfiniteGraphJavaグラフデータベース
JanusGraphJavaグラフデータベース
MarkLogicJavaJavaScriptSPARQLXQueryマルチモデルドキュメントデータベースRDFトリプルストア
Neo4jサイファーグラフデータベース
OpenLink VirtuosoC++C#JavaSPARQLミドルウェアデータベースエンジンのハイブリッド
オラクルSPARQL 1.111gで追加された RDFトリプルストア
OrientDBJava、SQLマルチモデルドキュメントおよびグラフデータベース
OWLIMJavaSPARQL 1.1RDFトリプルストア
Profium SenseJavaSPARQLRDFトリプルストア
RedisGraphサイファーグラフデータベース
SqrrlエンタープライズJavaグラフデータベース
ターミナスDBJavaScript、PythonデータログオープンソースRDFトリプルストアとドキュメントストア[ 27 ]

パフォーマンス

NoSQLデータベースのパフォーマンスは通常、 1秒あたりの操作数で測定されるスループットという指標を使用して評価されます。パフォーマンス評価では、本番環境の構成、データベースのパラメータ、予想されるデータ量、 同時ユーザーワークロードなどの適切なベンチマークに注意を払う必要があります

ベン・スコフィールドは、NoSQLデータベースのさまざまなカテゴリーを次のように評価しました。[ 28 ]

データモデルパフォーマンススケーラビリティ柔軟性複雑性データ整合性機能性
キーバリューストアなし変数(なし)
列指向ストア中程度最小限
ドキュメント指向ストア可変(高)変数(低)
グラフデータベース変数変数低~中グラフ理論
リレーショナルデータベース変数変数中程度関係代数

パフォーマンスとスケーラビリティの比較は、YCSBベンチマーク を使用して最も一般的に行われます

リレーショナルデータの処理

ほとんどのNoSQLデータベースはクエリ内での結合機能がないため、データベーススキーマは通常、異なる方法で設計する必要があります。NoSQLデータベースでリレーショナルデータを処理するための主な手法は3つあります。(結合をサポートするNoSQLデータベースについては、テーブル結合とACIDサポートを参照してください。)

複数のクエリ

1つのクエリですべてのデータを取得するのではなく、目的のデータを取得するために複数のクエリを実行するのが一般的です。NoSQLクエリは従来のSQLクエリよりも高速であることが多いため、追加のクエリにかかるコストは許容範囲内です。過剰な数のクエリが必要な場合は、他の2つのアプローチのいずれかが適切です

キャッシュ、レプリケーション、非正規化データ

外部キーのみを保存するのではなく、モデルのデータと共に実際の外部値を保存するのが一般的です。例えば、各ブログコメントにはユーザーIDに加えてユーザー名が含まれる場合があり、これにより、別の検索を必要とせずにユーザー名に簡単にアクセスできます。しかし、ユーザー名が変更されると、データベース内の多くの場所でユーザー名を変更する必要があります。したがって、このアプローチは、書き込みよりも読み取りがはるかに多い場合により効果的です。[ 29 ]

データのネスト

MongoDBのようなドキュメントデータベースでは、より多くのデータをより少数のコレクションに格納するのが一般的です。たとえば、ブログアプリケーションでは、ブログ投稿ドキュメント内にコメントを保存することで、1回の検索ですべてのコメントを取得できます。したがって、このアプローチでは、特定のタスクに必要なすべてのデータが1つのドキュメントに含まれます

ACIDと結合のサポート

データベースのドキュメントにACID特性(原子性、一貫性、独立性、永続性)または結合操作のサポートが記載されている場合、そのデータベースはACID特性または結合操作をサポートしているとみなされます。ただし、これは必ずしも、ほとんどのSQLデータベースと同様に、その機能が完全にサポートされていることを意味するわけではありません。

データベースACID結合
Aerospikeはいいいえ
エイジェンズグラフはいはい
Apache Igniteはいはい
ArangoDBはいはい
Amazon DynamoDBはいいいえ
Couchbaseはいはい
CouchDBはいはい
IBM Db2はいはい
InfinityDBはいいいえ
LMDBはいいいえ
MarkLogicはいはい[注 1 ]
MongoDBはいはい[注 2 ]
OrientDBはいはい[注 3 ]
  1. ^結合は必ずしもドキュメントデータベースに適用されるわけではありませんが、MarkLogicはセマンティクスを使用して結合を行うことができます。 [ 30 ]
  2. ^ MongoDBはバージョン5.1までシャードコレクションからの結合をサポートしていませんでした。 [ 31 ]
  3. ^ OrientDBは外部レコードへの直接リンクを保存することで、リンクを使用した1:1結合を解決できます。 [ 32 ]

NoSQLデータベースにおけるクエリの最適化とインデックス作成

DynamoDBMongoDBCassandraCouchbase 、HBase、Redisなどのさまざまな NoSQL データベースは、インデックスが作成されていないフィールドをクエリするときにさまざまな動作を示します。多くのデータベースでは、このようなクエリに対してテーブル全体のスキャンまたはコレクション スキャンが実行され、データを取得した後にフィルター操作が適用されます。ただし、最新の NoSQL データベースには、クエリ パフォーマンスを最適化するための高度な機能が組み込まれていることがよくあります。たとえば、MongoDB は複合インデックスとクエリ最適化戦略をサポートし、Cassandra はセカンダリ インデックスとマテリアライズド ビューを提供し、Redis は特定のユース ケースに合わせたカスタム インデックス メカニズムを採用しています。Elasticsearch などのシステムでは、効率的なテキストベースの検索に転置インデックスを使用しますが、インデックスが作成されていないフィールドに対してはフル スキャンが必要になることがあります。この動作は、多くの NoSQL システムの設計が、任意のフィールドに対する最適化されたクエリではなく、スケーラビリティと効率的なキーベースの操作に重点を置いていることを反映しています。その結果、これらのデータベースは基本的なCRUD操作とキーベースの検索には優れていますが、結合やインデックスなしのフィルタリングを含む複雑なクエリへの適合性は、データベースの種類(ドキュメント、キーと値、ワイドカラム、グラフ)と特定の実装によって異なります。[ 33 ]

参照

参考文献

  1. ^ http://nosql-database.org/「NoSQL 定義: 非リレーショナル、分散型、オープンソース、水平スケーラブルといった点に主眼を置いた次世代データベース」
  2. ^ 「NoSQLデータベースとは? | IBM」 www.ibm.com 2022年12月12日2024年8月9日閲覧
  3. ^ 「NoSQL (Not Only SQL)」NoSQLデータベース、Not Only SQLとも呼ばれる
  4. ^ Fowler, Martin . 「NosqlDefinition」。NoSQLの支持者の多くは、NoSQLはSQLに「ノー」という意味ではなく、むしろSQLだけではないという意味だと主張している。
  5. ^ Mohan, C. (2013). 「歴史は繰り返す:NoSQL騒動の賢明な側面とそうでない側面」(PDF) . Proc. 16th Int'l Conf. on Extending Database Technology.
  6. ^ 「Amazonが『NoSQL』データベースで未来へ回帰」 WIRED、2012年1月19日。 2017年3月6日閲覧
  7. ^ Leavitt, Neal (2010). 「NoSQLデータベースは期待に応えられるか?」(PDF) . IEEE Computer . 43 (2): 12– 14. Bibcode : 2010Compr..43b..12L . doi : 10.1109/MC.2010.58 . S2CID 26876882 . 
  8. ^ 「RDBMSがデータベース市場を席巻、NoSQLシステムも追い上げている」 DB-Engines.com、2013年11月21日。2013年11月24日時点のオリジナルよりアーカイブ2013年11月24日閲覧。
  9. ^ Vogels, Werner (2012年1月18日). 「Amazon DynamoDB – インターネット規模のアプリケーション向けに設計された高速かつスケーラブルなNoSQLデータベースサービス」 All Things Distributed . 2017年3月6日閲覧
  10. ^ 「Jepsen: MongoDB stale reads」 Aphyr.com 2015年4月20日. 2017年3月6日閲覧
  11. ^ 「MongoDB ACIDトランザクション」 . GeeksforGeeks . 2024年3月12日. 2024年10月25日閲覧
  12. ^ Grolinger, K.; 東野, WA; Tiwari, A.; Capretz, MAM (2013). 「クラウド環境におけるデータ管理:NoSQLとNewSQLのデータストア」(PDF) . Aira, Springer . 2014年1月8日閲覧
  13. ^ 「Typesafe Reactive Platform における大規模データ分析」Slideshare.net2015年6月11日。 2017年3月6日閲覧
  14. ^ Fowler, Adam. 「NoSQLに関する10の誤解」 Dummies.com . 2017年3月6日閲覧
  15. ^ 「SQLにNo!、No!にNo!」 Iggyfernandez.wordpress.com 2013年7月29日。 2017年3月6日閲覧
  16. ^ Chapple, Mike. 「ACIDモデル」 . about.com . 2016年12月29日時点のオリジナルよりアーカイブ2012年9月26日閲覧。
  17. ^ Lawrence, MySQLとMongoDBを含むリレーショナルSQLおよびNoSQLシステムの統合と仮想化 (2014). 「MySQLとMongoDBを含むリレーショナルSQLおよびNoSQLシステムの統合と仮想化」.国際計算科学および計算知能会議1 .
  18. ^ Lith, Adam; Mattson, Jakob (2010). 「大規模データ向けストレージソリューションの調査:リアルタイムデータ抽出とバッチデータ挿入のための高性能かつスケーラブルなデータストレージソリューションの比較」(PDF) . チャルマース工科大学コンピュータサイエンス・エンジニアリング学部. p. 70. 2011年5月12日閲覧
  19. ^ 「NoSQLリレーショナルデータベース管理システム:ホームページ」 Strozzi.it、2007年10月2日。 2010年3月29日閲覧
  20. ^ "NoSQL 2009" . Blog.sym-link.com. 2009年5月12日. 2011年7月16日時点のオリジナルよりアーカイブ。 2010年3月29日閲覧
  21. ^ Strauch, Christof. 「NoSQLデータベース」(PDF) pp.  23– 24 . 2017年8月27日閲覧
  22. ^ https://apacheignite.readme.io/docs Ignite ドキュメント
  23. ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html fire-up-big-data-processing-with-apache-ignite
  24. ^ Sandy (2011年1月14日). 「キーバリューストアとNoSQLムーブメント」 . Stackexchange . 2012年1月1日閲覧.キーバリューストアは、アプリケーション開発者がスキーマレスなデータを保存することを可能にします。このデータは通常、キーを表す文字列と、「キーバリュー」関係において値とみなされる実際のデータで構成されます。データ自体は通常、プログラミング言語のプリミティブ型(文字列、整数、配列)か、プログラミング言語のバインディングによってキーバリューストアにマーシャリングされたオブジェクトです。この構造により、固定データモデルの必要性がなくなり、適切なフォーマットが可能になります。
  25. ^ Seeger, Marc (2009年9月21日). 「キーバリューストア:実践的概要」(PDF) . Marc Seeger . 2012年1月1日閲覧.キーバリューストアは、データの保存とアクセスに関して、リレーショナルデータベースシステムに代わる高性能な選択肢を提供します。本稿では、現在利用可能なキーバリューストアのいくつかと、それらのRubyプログラミング言語とのインターフェースについて簡潔に概説します。
  26. ^ Katsov, Ilya (2012年3月1日). 「NoSQLデータモデリングテクニック」 . Ilya Katsov . 2014年5月8日閲覧
  27. ^ 「TerminusDB オープンソースのインメモリドキュメントグラフデータベース」terminusdb.com . 2021年12月16日閲覧
  28. ^ Scofield, Ben (2010年1月14日). 「NoSQL - リレーショナルデータベースの終焉(?)」 . 2014年6月26日閲覧
  29. ^ 「リレーショナルからNoSQLへの移行:始め方」 Couchbase.com 201911月11日閲覧
  30. ^ 「MarkLogicで結合ができない?それはセマンティクスの問題だ! - General Networks」 . Gennet.com . 2017年3月3日時点のオリジナルよりアーカイブ。 2017年3月6日閲覧
  31. ^ 「シャードコレクションの制限」 . docs.mongodb.com . 2020年1月24日閲覧
  32. ^ 「SQLリファレンス・OrientDBマニュアル」 . OrientDB.com . 2020年1月24日閲覧
  33. ^サリバン、ダン. NoSQL for Mere Mortals . ISBN 978-0134023212

さらに詳しい情報