Couchbaseレビュー:スマートNoSQLデータベース

中規模から大規模のすべての企業にはデータベースが必要です。大規模な多国籍企業は、多くの場合、グローバルに分散されたデータベースを必要とし、データベースを財務または在庫アプリケーションに使用する場合、強力な一貫性が必要です。両方のニーズを満たすことができるデータベースはほとんどありません。

Couchbase Serverは、メモリファーストの分散型の柔軟なJSONドキュメントデータベースであり、ローカルクラスター内で強力な一貫性を備えています。Couchbase Serverは、クラスター間で結果整合性を備えたデータセンター間レプリケーションもサポートしています。 

Couchbase Liteは、オフラインで動作し、オンライン時にCouchbase SyncGatewayと同期する組み込みモバイルデータベースです。Sync Gatewayは、CouchbaseServerおよび複数のCouchbaseLiteインスタンスと同期します。

Couchbase Serverは、オンプレミス、クラウド、Kubernetes、またはハイブリッド構成でデプロイできます。オープンソースバージョンとエンタープライズバージョンの両方があります。

Couchbase Serverのクエリ言語であるN1QLは、JSONドキュメントデータベース用に設計されたSQLスーパーセットであり、分析用の拡張機能を備えています。Couchbaseは、Key-Valueデータアクセスと全文検索もサポートしています。

データベースの背後にある会社であるCouchbaseは、2011年にMembase(メモリ内にキャッシュされたクラスター化されたKey-Valueデータベースのメーカー)とCouchOne(Apache CouchDBドキュメントデータベースの開発者)が合併したことから成長しました。バリューレイヤー、2012年にJSONドキュメントレイヤーを追加し、2014年にモバイルデータベース、2015年にSQLのようなクエリ、2017年にフルテキスト検索、2018年に分析を追加しました。

Couchbaseの代替品と競合他社

Couchbaseの代わりに、別の柔軟なドキュメントデータベースであるMongoDBがあります。キャッシュ用にRedisと組み合わせたMongoDB。Oracle Database、ハイエンドのリレーショナルデータベース。およびSQLServer、Microsoftのリレーショナルデータベース製品。リレーショナルデータベースシステムは、単一の大規模サーバーで使用するように設計されており、スケールアウトするのは困難です。MongoDBは、マスタースレーブレプリケーションを実行するように設計されています。これは少し拡張できますが、適切にスケールアウトするにはシャーディングが必要です。RedisはMongoDBの高速化に役立ちますが、結合されたシステムの管理を複雑にする可能性のある別の可動部分を導入します。

Couchbaseの他の最近の代替手段には、CockroachDB、Azure Cosmos DB、Amazon Aurora、Aerospike、Amazon DocumentDB、およびAmazonDynamoDBが含まれます。以前のレビューで、リレーショナルオプションとNoSQLオプションの両方について説明しました。

CouchbaseServerアーキテクチャ

Couchbase Serverは、データサービス、インデックスサービス、クエリサービス、セキュリティ、レプリケーション、検索、イベント、分析、管理など、複数の役割を果たします。これらのサービスはそれぞれ、1つ以上のノードで実行できます。

Couchbase Serverは、メモリとネットワーク中心のアーキテクチャ、ワークロードの分離、すべてへの非同期アプローチという3つの基本原則に基づいて設計されています。

書き込みはメモリにコミットされてから、ディスクに永続化され、読み取りまたは書き込みをブロックせずに非同期でインデックスが作成されます。最もよく使用されるデータとインデックスは、高速読み取りのためにメモリに透過的に保持されます。このメモリの多用は、CouchbaseのRAM要件を増加させますが、レイテンシとスループットには適しています。

Couchbase Serverは、各サービスを個別に拡張して、サービスをより効率的にすることができます。クエリサービスはより多くのCPUリソースの恩恵を受けることができ、インデックスサービスはSSDを使用でき、データサービスはより多くのRAMを使用できます。Couchbaseはこれを多次元尺度構成法(MDS)と呼んでおり、CouchbaseServerの際立った機能の1つです。

非同期操作は、Couchbase Serverが書き込み、読み取り、またはクエリのブロックを回避するのに役立ちます。開発者は、必要に応じて、耐久性と一貫性とレイテンシーのバランスをとることができます。

Couchbase JSONデータモデルは、基本的なデータタイプと複雑なデータタイプ(数値、文字列、ネストされたオブジェクト、配列)の両方をサポートします。正規化または非正規化されたドキュメントを作成できます。Couchbase Serverはスキーマを必要とせず、サポートさえしません。対照的に、MongoDBはスキーマを必要としませんが、開発者が選択した場合、スキーマをサポートおよび適用できます。

後で詳しく説明するように、Couchbase Serverドキュメントには、Key-Value、SQLベースのクエリ、全文検索、JavaScriptイベントの4つのメカニズムを介してアクセスできます。 JSONドキュメントにサブドキュメントまたは配列がある場合は、ドキュメント全体を転送および解析しなくても、パス式を使用してそれらに直接アクセスできます。イベントモデルは、データの変更(OnUpdate)またはタイマーでトリガーできます。さらに、CouchbaseMobileとの同期を通じてCouchbaseServerドキュメントにアクセスできます。  

Couchbase Serverは、バケット、vBucket、ノード、およびクラスターに編成されています。バケットはJSONドキュメントを保持します。vBucketsは基本的に、ノード間で自動的に分散されるシャードです。ノードは、CouchbaseServerの単一インスタンスをホストする物理マシンまたは仮想マシンです。クラスターはノードのグループです。同期レプリケーションは、クラスター内のノード間で発生します。

CouchbaseServerの導入オプション

Couchbase Serverは、オンプレミス、クラウド、およびKubernetesにインストールできます。Couchbase Server Enterprise Editionは、開発とテストが無料で、サブスクリプションによって本番環境で利用できます。オープンソースのCouchbaseServer Community Editionは、あらゆる目的で無料です。一部の省略された機能を除いて、Couchbase Server CommunityEditionはCouchbaseServer EnterpriseEditionとAPI互換です。

Google Cloud Platformでクラウドテストドライブセッションを作成しました。これにより、(5分の展開遅延の後)3ノードのCouchbaseServerクラスターとSyncGatewayノードがすべて3時間有効になりました。4つのCouchbaseチュートリアルを実行するのに約1時間かかりました。これにより、サーバーにクエリを実行する感覚が得られました。

Couchbase Autonomous Operator

EnterpriseEditionでのみサポートされるCouchbaseAutonomous Operatorは、CouchbaseServerとオープンソースのKubernetesおよびRedHatOpenShiftとのネイティブ統合を提供します。オペレーターは、カスタムリソース定義を作成し、それ自体をカスタムCouchbase Serverコントローラーとして登録して、Couchbase Serverクラスターを管理することにより、KubernetesAPIを拡張します。これにより、KubernetesでCouchbaseクラスターを実行するために必要なDevOpsの労力が軽減され、Couchbase Serverクラスターの構成、作成、スケーリング、リカバリなど、一般的なCouchbaseServerタスクの管理を自動化できます。オペレーターは、Azure Kubernetes Service、Amazon Elastic Kubernetes Service、およびGoogle KubernetesEngineとも連携します。

クロスデータセンターレプリケーション(XDCR)

前述したように、Couchbase Serverは同期レプリケーションを実行し、クラスター内で強力な一貫性を備えています。クラスター、データセンター、およびアベイラビリティーゾーン間で非同期のアクティブ-アクティブレプリケーションを実行し、書き込みの待ち時間が長くなるのを防ぎます。XDCRを使用すると、Couchbaseをグローバルに分散したデータベースにすることができますが、クラスター間の最終的な(強力ではなく)一貫性が可能になります。

基本的なXDCRは、すべてのCouchbaseServerエディションでサポートされています。XDCRフィルタリング、スロットリング、およびタイムスタンプベースの競合解決はすべてEnterpriseEditionの機能です。

Couchbaseクエリツール

キーを使用してCouchbaseServerにクエリを実行し、JSONドキュメントまたはBlobなどの関連する値を取得できます。SQLのようなN1QL言語または全文検索を使用してクエリを実行することもできます。バケットにクエリをサポートするインデックスがある場合、N1QLクエリとフルテキストクエリの両方が高速になります。

N1QL

「ニッケル」と発音されるN1QLは、標準SQLに非常によく似ており、JSONの拡張機能があります。SQLを何十年も使用していることを考えると、MongoDBの集約パイプラインよりもはるかに簡単に取得できることがわかりました。

N1QLには、実際には2つの類似したバリアントがあります。1つはCouchbase Server Queryサービス用で、もう1つはEnterpriseEditionの機能であるAnalyticsサービス用です。N1QL for Analyticsは、SQL ++に基づいています。

N1QL拡張のいくつかはUSE KEYSNESTUNNEST、とMISSINGUSE KEYSおよびUSE HASHJOINsのクエリヒントです。アレイNESTUNNESTパックおよびアンパックします。;のMISSINGJSON固有の代替手段NULLです。IS NOT MISSING特定の値が存在するかNULL、ドキュメント内にあることを意味します。ある値のためのキーワードNOT MISSINGNOT NULLですKNOWN。N1QLクエリはパスを使用できます。これは、全文検索にも適用されます。

全文検索

Couchbaseは、Solrなどの外部フルテキスト検索エンジンをサポートしていますが、独自のGoベースのフルテキスト検索エンジンであるBleveも備えています。BleveはCouchbaseMobileとCouchbaseServerに含まれており、期待するほとんどの検索構文をサポートしています。

Couchbase SDK

すべての主要なCouchbaseサービスは、SDKを介したプログラミング用に公開されています。SDKは、C / C ++ 、. Net(C#、F#、およびVisual Basic .Net)、Go、Java、Node.js、PHP、Python、およびScalaで使用できます。

SDKに加えて、Couchbaseは、Spring Data、.NET LINQ、およびCouchbase独自のOttoman Node.jsODMなどのいくつかのフレームワークとの緊密な統合を提供します。たとえば、次のサンプルクエリはLinq2Couchbaseを使用しています。

{{

     サーバー=新しいリスト{新しいURI( "// localhost:8091 /")}

});

var context = new BucketContext(ClusterHelper.GetBucket( "travel-sample"));

var query =(in context.Query()から

               ここで、a.Country == "イギリス"

               を選択)。

               Take(10);

query.ToList()。ForEach(Console.WriteLine);

ClusterHelper.Close();

Couchbase Mobile

Couchbase Mobileには、モバイルデバイスで実行されるCouchbase Liteと、サーバーノードで実行されるCouchbase SyncGatewayの2つの部分があります。Couchbase Liteは、iOS、Android、.Net、およびXamarinで実行され、Swift、Objective-C、Java、Kotlin、およびC ++言語をサポートします。

たとえば、次のJavaコードは、Androidで実行するクエリを定義しています。

データベースデータベース= DatabaseManager.getDatabase();

クエリsearchQuery = QueryBuilder

  .select(SelectResult.expression(Expression.property( "airportname")))

  .from(DataSource.database(database))

  。どこ(

    Expression.property( "type")。equalTo(Expression.string( "airport"))

      .and(Expression.property( "airportname")。like(Expression.string(prefix + "%")))

);

Couchbaseベンチマーク

Couchbase Serverのベンチマークは行っていませんが、サードパーティ(Altoros)は、YCSBJSONとKey-ValueテストおよびTPCx-IoTテストを使用してベンチマークを行っています。以下のグラフは、JSONドキュメントのベンチマーク用です。ご覧のとおり、CouchbaseServerはMongoDBとDataStaxの両方を上回っています。Altorosが必要なすべてのスクリプトを提供しているため、これらのベンチマークを自分で再実行できます。

アルトロス

全体として、Couchbase Serverは、SQLに似たクエリ言語と全文検索エンジンを備えたNoSQL JSONドキュメントデータベースと同様にスタックし、CouchbaseMobileは価値提案をモバイルデバイスに拡張します。Couchbaseがあなたにとって意味があるかどうかは、アプリケーションと要件によって異なります。

リレーショナルデータベースの信頼できるスキーマ構造、またはグラフデータベースのコネクション型が必要な場合、Couchbaseは必要なことを実行しません。ただし、グローバルにスケーラブルなドキュメントデータベースが必要な場合は、Couchbaseが適しています。

費用: Couchbase Server Community Edition:無料。 Couchbase Server Enterprise Edition:年間サブスクリプションはノードごとに価格設定されており、ノードに必要なコアとRAMに応じてさまざまな価格で利用できます。開発ノードとテストノードは無料です。 Enterprise Editionクラウド展開は、時間単位で利用できます。通常のソフトウェア価格は、AWSではCouchbaseServerで$ 0.662 /ノード/時間、Mobile SyncGatewayでは$ 1.641 /ノード/時間で、最初は4つのサーバーノードと2つの同期ノードを使用する標準テンプレートを使用します、自動スケーリングあり。価格は、MicrosoftAzureとGoogleCloudPlatformでほぼ同等です。独自のライセンスを持参して、クラウドリソースに対してのみ支払うこともできます。

プラットフォーム: Couchbase Server:Linux、Windows Server 2012R2以降。Kubernetes、OpenShift; AWS、Azure、GCP。Couchbase Serverの開発とテスト:MacOS 10.11以降、Windows 10 AnniversaryUpdate以降。Docker。Couchbase Lite:iOS、Android、.Net。Couchbase Sync Gateway:Linux、Windows Server 2010以降、MacOS10.12.6以降。AWS、Docker、OpenShift。