NoSQLの傑出したもの:最高のドキュメントデータベース

「適切な仕事のための適切なツール。」そのような知恵がどこにでも当てはまる場合、開発者が特定のアプリケーション用に選択するデータベースの選択にも当てはまります。総称して「NoSQL」と呼ばれるデータ製品ファミリーの1つであるドキュメントデータベースは、データベーステクノロジではなくアプリケーションに集中したい開発者向けです

ドキュメントデータベースでは、データは異なる列タイプのテーブルに保存されません。代わりに、任意の数のフィールドと任意の数のネストされた構造を持つ自由形式の「ドキュメント」に格納されます。このようなドキュメントは通常、JSONとして表され、APIを介して、またはJSONをRESTエンドポイントに送信することによって更新されます。最新のプログラミング言語のほとんどはJSONとRESTをサポートしているため、ドキュメントデータベースを操作することは、従来のデータベースを操作するよりも、これらのデータ構造をネイティブに操作するように感じます。

このスキーマレス設計は、それが呼ばれるように、制限があります。挿入されたデータの一貫性を確保するために、開発者はさらに作業を行う必要があります。そのような一貫性はデータベース自体によって常に保証されるとは限らないためです。データベース作業の標準的な問題で広く理解されている言語であるSQLは、ほとんどのドキュメントデータベースでサポートされていないため、既存のデータベースの専門知識を持つユーザーは最初から始める必要があります。しかし、ドキュメントデータベースの利便性、速度、スケーラビリティ、および汎用性は、変幻自在な自由形式のデータ構造を必要とするアプリケーションを作成する場合に勝るものはありません。

ここでは、最もよく知られ、最も広く使用されている7つのドキュメントデータベースのプロファイルを作成しました。7つのうち4つ(CouchDB、Couchbase Server、MongoDB、およびRethinkDB)はオープンソースプロジェクトであり、開始するのに実際的な障壁はほとんどまたはまったくありません。CouchbaseとMongoDBは、商用ライセンスの下でサポートされているエンタープライズエディションでも利用できます。他の3つ(Amazon DynamoDB、Google Firebase、IBM Cloudant)は、主要なクラウドベンダーが提供するホスト型サービスであり、これらのクラウド内の他のサービスとの緊密な統合が大きな魅力です。

機能を比較するには、以下の表を参照してください。下部のスクロールバーを使用して、テーブルを右にスクロールしてすべての列を表示します。各データベースの簡単な説明を読んでください。

L W M S I A O

1.サードパーティのツールがこの機能を提供する場合があります。2。テーブルごと。3。エンタープライズエディションのみ。4。関数のみを表示します。5。マルチドキュメントトランザクションも利用できますが、シャードクラスターでは利用できません。

キー:= Linux、= Windows、= MacOS、= Solaris、= iOS、= Android、=その他のモバイル、
  Amazon DynamoDB Cosmos DB Couchbase CouchDB Google Firebase IBM Cloudant MarkLogic MongoDB RethinkDB
プラットフォーム クラウドのみ クラウドのみ LWM LWMIAO クラウドのみ クラウドのみ LWMS LWMS LWM
クエリシステム REST API MongoDBワイヤープロトコル Memcachedプロトコル、REST API REST API REST / JavaScript API REST API REST API JSONベースのAPI、部分的なREST API ReQLクエリ言語、REST API
SQLクエリ いいえ1 はい N1QL言語経由 番号 番号 番号 はい いいえ1 番号
強いタイピング はい はい はい 番号 はい 番号 XMLスキーマの場合 はい はい
ネイティブ参加 番号 はい はい 番号 番号 番号 はい はい はい
シャーディングパーティショニング はい はい はい はい NA はい はい はい はい2
クラスタリング NA はい はい はい NA NA はい はい はい
レプリケーション はい はい はい はい NA はい はい はい テーブルごと
一貫性:即時 読み取りごと はい 全体あたり 番号 接続されたクライアント 番号 はい 書き込みごと ドキュメントごと
一貫性:結果整合性 はい はい はい はい オフラインクライアント はい はい はい データベース全体
並行性 はい はい はい はい はい はい はい はい はい
インメモリ操作 NA NA 番号 番号 NA 番号 NA はい3 番号
ストアドプロシージャ 番号 JavaScript JavaScript4 JavaScript4 ルール JavaScript4 XQueryモジュール JavaScript 番号
トランザクション アプリ別 はい 単一のドキュメント 単一のドキュメント はい 単一のドキュメント 単一のドキュメント 単一のドキュメント5 単一のドキュメント
現行版 NA NA 5.0(2017年10月) 2.1.1(2017年11月) NA NA 9.0(2016年5月) 3.4.10(2017年10月) 2.3.6(2017年7月)
初回リリース 2012年 2017年 2011 2005年 2012年 2010年 2005年 2009年 2009年

Amazon DynamoDB

AmazonのDynamoDBドキュメントストアは、AmazonのSimpleDBの拡張として2012年に誕生しました。内部的には、Key-ValueストアであるDynamoを利用しています。DynamoDBの共同開発者は、後で同じアイデアの多くを利用してApacheCassandraを作成しました。 

DynamoDBの機能

Amazonの他のほとんどのクラウドサービスと同様に、DynamoDBは必要に応じて支払うマネージドサービスです。開発者は、非構造化ドキュメントまたはキーと値のペアのいずれかを保持するために提供するストレージ容量を設定し、データベースへの読み取りおよび書き込み要求に対してフラットな1時間あたりのレート制限を選択します。サーバーをプロビジョニングしたりレプリケーションを構成したりする必要はありません。Amazonはそれらすべてを内部で処理し、最近、自動スケーリングをミックスに追加しました。

当然、DynamoDBは、Amazonクラウド内の他のサービスとの便利な統合を開発者に提供します。たとえば、トリガーはAWSLambda関数を使用して設定できます。AmazonのBIおよび分析ツールも近くにあります。これらのサービスに近接していることは便利ですが、Amazonが機能をさまざまな方法でアップセルできることも意味します。たとえば、Redisでのキャッシングとアクセラレーションは、コストプラスのアドオンであるDynamoDBAcceleratorを介して利用できます。

DynamoDBローカル

DynamoDBはオープンソースの化身では見つかりません。これは、Amazonクラウドでホストされたオファリングとしてのみ利用できます。

とはいえ、他の多くのクラウドネイティブデータベースとは異なり、DynamoDBは、ダウンロードしてローカルで実行できるバージョンでも利用できます。ただし、DynamoDB Localは本番環境での使用を目的としたものではなく、接続を必要とせず、Amazonの請求書を実行せずに、テスト環境でアプリケーションをステージングする方法として使用されます。

Microsoft Azure Cosmos DB

Cosmos DBは野心的なプロジェクトであり、データを保存および取得するための複数のモデルを含むデータベースシステムです。Cosmos DBは、ドキュメントデータベース、列データベース、グラフデータベース、またはKey-Valueストアとして機能し、ユーザーが自分に合ったパラダイムを選択し、それらのパラダイムを操作するためのさまざまなAPIを利用できるようにします。 

CosmosDBの機能

Cosmos DBは、ドキュメントデータベースシステム用のまったく新しいAPIを発明するのではなく、人気のあるMongoDB(以下で説明)と互換性のあるAPIを提供します。利点の1つは、MongoDBインターフェイスライブラリまたはMongoDBのバイナリワイヤープロトコルを使用する既存のコードをそのまま使用できることです。これは、CosmosDBがMongoDBをサービスとして提供できることを意味します。同様に、Cosmos DBは、人気のある列ファミリーデータベースであるCassandraのAPIをサポートしています。 

Microsoftは、Cosmos DBのいくつかの利点を宣伝しています。これらの利点は、必ずしもドキュメントデータベース機能に限定されているわけではありませんが、ドキュメントデータベースアプリケーションを構築している人々にアピールすることを目的としています。そのような製品の1つは、調整可能な一貫性レベルです。Azureリージョン全体で他のクラスよりも強力な一貫性を必要とするドキュメントトランザクションのクラスがある場合は、トランザクションごとに手動で指定できます。

その他の機能は、ドキュメントデータベースに固有のものです。たとえば、MongoDBユーザーは、検索を最適化するためにドキュメントコレクションにインデックスを設定する必要があります。挿入されたドキュメント内のすべてのプロパティが自動的にインデックス付けされるため、MongoDBAPIを使用するCosmosDBユーザーはドキュメントのインデックス作成を設定する必要はありません。

MicrosoftAzureでのCosmosDBの使用

ローカルでホストされているバージョンのCosmosDBはありません。これは、MicrosoftAzureクラウドのサービスとしてのみ利用できます。とはいえ、Cosmos DBの開発APIは、Java、Node.js、.NET、Pythonなどの一般的なエンタープライズ言語のほとんどで利用できます。

カウチベースサーバー

Couchbaseは、後継者ほどCouchDBの兄弟ではありません。Couchbaseは、CouchDBとMembaseで行われた作業に基づいて構築されましたが、これらのプロジェクトのいずれにも関連していません。これはドキュメントデータベースと分散型Key-Valueストアを1つにまとめたもので、エンタープライズユースケースを対象とした自動フェイルオーバーやクロスデータセンターレプリケーションなどの高度な機能を備えています。

Couchbaseの機能

Couchbaseを他のNoSQL競合製品だけでなく、その前身であるCouchDBと区別する機能のひとつは、N1QL(「ニッケル」と発音)と呼ばれるSQLに似たクエリ言語です。N1QLは、ANSI SQL実装に期待されるすべてのコマンドを提供するわけではありませんが、SQLの経験がある人が実行可能な結果を​​得るのに十分な、JOIN操作などの便利な関数を提供します。

Couchbaseクエリシステムは、開発者だけでなく、通常は従来のデータベースを扱うDBAやビジネスアナリスト向けです。EXPLAINキーワードのような機能は、特にその群衆にアピールするために導入されたようです。

Couchbaseは、ドキュメントデータベースとキー値ストアの組み合わせとして、一意の識別子をキーとして使用してドキュメントを保存します。ドキュメントには、Key-Valueキャッシュのように機能するように、存続可能時間の値を割り当てることもできます。とはいえ、Redisのような真のKey-Valueキャッシングシステムは、基本的なKey-Valueストレージの方がはるかに高速ですが、Couchbaseはより柔軟性があり、RedisとCouchbaseを効果的に組み合わせて処理を高速化できます。その点で、CouchbaseはMemcachedプロトコルをネイティブでサポートしているため、Memcachedを使用する既存のアプリケーションを代わりにCouchbaseにプラグインできます。

Couchbaseコミュニティとエンタープライズ

Couchbase Serverには、本格的な有料のエンタープライズエディション、無料で使用できるコミュニティエディション、およびその他の基盤となるオープンソースエディションがあります。エンタープライズエディションとコミュニティエディションのバイナリダウンロードはCouchbaseのサイトから入手でき、ソースコードはCouchbaseの開発者サイトから入手できます。(Couchbaseオープンソースプロジェクトは複数のプロジェクトの集合体であるため、GitHubリポジトリは1つもありません。)

Community Editionは本番環境にデプロイできますが、Enterprise Editionのより高度な機能とサポートが不足しているため、購入者以外の方は注意してください。水平スケーリング機能など、Couchbaseの一部の機能は、CouchDBプロジェクトに組み込まれていますが、それはルールよりも例外です。

Couchbase Lite

アプリ開発者にとって注目に値するCouchbaseの別のエディションはCouchbaseLiteです。これは、本格的なエディションのインスタンスと同期できるCouchbaseの埋め込み可能なバージョンです。Couchbase Liteは、バックエンドと自動的に同期するデータストアを必要とするモバイルアプリのアプリケーションスタックであるCouchbaseMobileの主要コンポーネントです。Couchbase Mobileは、iOS、Android、Javaで利用できます。.Net、MacOS、およびtvOS。

CouchDB

CouchDBプロジェクトは2005年に元IBM開発者によって開始され、2008年にApache Software Foundationに移行しました。CouchDBがCouchbaseの基盤であると想定されることもありますが、CouchDBとCouchbaseは異なる目的を持つ並行プロジェクトです。

CouchDBとCouchbase

CouchbaseはドキュメントデータベースとKey-Valueストアの両方ですが、CouchDBは厳密にはドキュメントデータベースです。また、CouchbaseはフォールトトレランスやSQLのようなクエリ言語などのエンタープライズ機能に長い間焦点を当ててきましたが、そのような優れた機能はCouchDBに導入され始めたばかりです。

CouchDBの機能

CouchDBは、デプロイメントの単純さと使いやすさを強調しています。データベースからデータを取得するのは、JSON形式のクエリをREST HTTPSエンドポイントに送信するのと同じくらい簡単で、結果はJSONで返されます。最新のプログラミング言語のほとんどは、これらのことを実行でき、CouchDBクエリとレポートの背後にあるビューを作成するために必要なマッピングと削減も実行できます。ODBCドライバーやデータコネクターは必要ありません。

CouchDBの特別なソースの1つは、データ調整テクノロジーです。1つのCouchDBピアに加えられた変更は、バージョン管理システムと同様の方法で、他のピアと自動的に調整されます。ドキュメントバージョン間の競合は、そのドキュメントの以前のリビジョンであるかのように保持されます。

この結果整合性モデルは、常にまたは一貫して接続されていないデータベース(断続的に接続されているモバイルアプリケーションなど)や、特定のノードで最新かつ最高のバージョンのデータを必要としない場合に役立ちます。しかし、結果整合性もCouchDBの最大の注意点の1つです。即時の一貫性必要な場合、CouchDBはそれを見つける場所ではありません。

スケーラビリティは長い間Co​​uchDBの弱点でしたが、最近対処されました。バージョン2.0は、Cloudant / IBMによってオープンソース化され、プロジェクトに統合されたビットのおかげで、新しいクラスタリングテクノロジーでかき混ぜられました。最後に、MongoDBに精通していて、同様の宣言型クエリ構文を使用したい場合は、同じくCloudant / IBMのMangoプロジェクトが、外部アドオンとして提供します。

CouchDBのダウンロード

すべての主要なプラットフォーム用のCouchDBバイナリ、およびソースコードは、公式のCouchDBサイトからダウンロードできます。プロジェクトのソースはGitHubでも入手できます。

GoogleFirebaseリアルタイムデータベース

Google Firebaseは、DynamoDBに対するGoogleの回答と考えることができます。これは、クラウドバックエンドと複数のプラットフォーム上のローカルアプリ間で高速同期データストレージを提供する方法です。

Firebase Realtime Databaseは、Firebaseスタックの1つのコンポーネントであり、オーディエンスのエンゲージメントと洞察に重点を置いたアプリを構築することを目的としています。スタック全体には、認証、パフォーマンスモニタリング、ユーザー分析などの機能が含まれていますが、ここではFirebase自体に焦点を当てます。

GoogleFirebaseの機能

Googleは2014年にFirebaseを買収しました。それ以来、多くのGoogleCloud機能を利用するためにFirebaseを接続してきました。たとえば、Firebase向けGoogle Cloud Functionsを使用すると、Firebaseイベントに応答してクラウドでJavaScript関数をトリガーできます。Google Analytics for Firebaseを使用すると、モバイルアプリのデータをBigQueryにプルして、より詳細な分析を行うことができます。

ゲームはFirebaseのターゲットアプリケーションの1つであるため、Firebase用に提供されているSDKには、Unityクロスプラットフォームゲーム開発フレームワークが含まれています。従来のエンタープライズ向けまたは消費者向けのプロジェクトに取り組んでいる開発者には、他にもたくさんの選択肢があります。ネイティブiOSとAndroid、C ++、汎用Web / JavaScript、およびRESTをサポートするその他の言語(Java、Python、名前を付けます)。

Firebaseは、接続が保証されていないシナリオで機能するように設計されています。CouchDBと同様に、オフラインの場合はローカルで変更をキャッシュし、接続が回復するとバックエンドと自動的に同期します。Firebaseは、スタンドアロンの完全にオフラインのソリューションとして使用するようには設計されていないことに注意してください。たとえば、Androidでは、ローカルデータベースのストレージは10MBに制限されています。

GoogleCloudとGitHubのFirebase

Firebaseはスタンドアロン製品としては利用できませんが、Googleのクラウド製品の一部としてのみ利用できます。Firebase GitHubリポジトリには、SDKおよびさまざまなプラットフォーム固有のツールのソースコードがあります。

IBM Cloudant

Cloudantは、本質的にIBMがホストするCouchDBのエディションです。もともと、Cloudantは独立した会社であり、IBMのSoftLayerクラウドでホストされている「BigCouch」と呼ばれるCouchDBのエディションを提供していました。2014年、IBMは、分析とビッグデータに向けたIBMの全体的な推進の一環として、Cloudantを完全に買収しました。 

CloudantとCouchDB

Cloudantは、CouchDBのホストバージョン以上のものを意味します。Cloudantは、ネイティブに統合された全文検索など、CouchDB自体ではすぐに利用できない機能を提供します。CouchDBでの全文検索には、通常、外部プロジェクトとの統合が必要です。CloudantとCouchDBのインスタンスの間でデータを双方向に複製できるため、必要に応じてどちらか一方の間を比較的簡単に移動できます。

CloudantによるCouchDBの改善点のいくつかは、CouchDB 2.0の水平スケーリング機能やMangoクエリ言語インターフェースなど、基盤となるCouchDBプロジェクトに戻ってきました。ただし、Cloudantの機能が自動的にCouchDBに流れ落ちるという証拠としてそれを受け取らないでください。

Cloudant on IBM Cloud

Cloudantは、主にIBM Cloud上のクラウド製品であり、dashDB、DataWorks、WatsonAnalyticsなどの他のIBMCloudデータ製品と組み合わせて使用​​できます。

Cloudant Local

Cloudant Localと呼ばれるCloudantのファイアウォールの背後にあるエディションは、クラウドでホストされる製品と同じ機能をすべて提供します。Cloudant Localは、x86LinuxのUbuntuおよびRedHatフレーバー、およびRedHatまたはSuseを実行するIBM独自のSystemzで使用できます。開発者は、無料のテストおよび開発専用バージョンをDockerイメージでダウンロードできます。