10

私は mysql での作業に慣れていますが、次の一連のプロジェクトでは、基本的に mysql で EAV を回避し、それが提供するすべての優れた機能を採用するために、CouchDB (NoSQL) が適しているようです。

多くの調査と文書などを読んだ後、私がよく理解していないように見えることが1つあります。

サーバーで 3 つの Web アプリケーションをホストしているため、それに応じて 3 つのデータベースが必要であるとします。たとえば、1 つは製品と請求書のテーブルを備えた Web ショップ、1 つは記事とコメントのテーブルを備えたウェブログ、もう 1 つはゲームの統計テーブルを備えた Web ベースのゲームです (明らかに単純化しています)。

そのため、mysql の 1 つのインストールで複数のサイトをホストし、サーバーで実行する各アプリケーションは、テーブル、フィールド、およびコンテンツを含む独自のデータベースを取得します。

さて、CouchDb を使用して、まったく同じことを行いたいと思います。問題は、CouchDb でデータベースを作成することは、mysql でテーブルを作成することに似ていることです。つまり、ウェブログ用に「コメント」、「記事」などと呼ばれるデータベースを作成し、その中で記事ごとのドキュメントまたはコメントごとのドキュメントを作成します。

私の質問は、1 つの CouchDB インストールで複数の Web アプリケーションからデータを分離するにはどうすればよいですか?

私はここで根本的に間違ったことをしていると思いますが、うまくいけば、あなたの一人が私が正しい軌道に乗るのを手伝ってくれることを願っています.

4

3 に答える 3

6

CouchDBでは、無関係なデータを複数のデータベースに明示的に分離する必要はありません。ドキュメントとビューを正しく作成した場合、関連するデータのみがクエリに表示されます。

データを別々のデータベースに分割する場合は、新しいデータベースを作成するだけです。

$ curl -X PUT http://localhost:5984/somedb
{"ok":true}
于 2012-05-08T17:46:59.577 に答える
6

カウチデータベースでの私の経験から、関係のないデータを異なるデータベースに分離することは、パフォーマンスにとって非常に重要であり、簡単なことでもあります。ビューの生成は、couchdb の厄介な部分です。データベースが更新されるたびに、ビュー (従来のリレーショナル SQL データベースのインデックスと考えてください) を再生成する必要があります。これには、データベース内のすべてのドキュメントの反復が含まれます。したがって、タイプ A のドキュメントが 200 万あり、タイプ B のドキュメントが 300 あるとします。タイプ B のクエリでビューを再生成する必要がある場合、200 万および 300 百の列挙すべてがビューの生成中に実行され、長い時間がかかります (読み取りタイムアウトが発生する場合もあります)。

したがって、複数のデータベースを持つことは、ビュー (couchdb でクエリを実行する方法、明らかに重要で避けられない機能) を更新し続けることに関しては簡単です。

于 2016-01-14T17:35:47.180 に答える
2

@Zombies は、パフォーマンスに関して非常に正しいです。CouchDB は、単一のデータベースで多数のドキュメントを処理するのには適していません。たとえば、5000 以上のドキュメントを実行する必要がある場合、MongoDBは CouchDB よりも優れています。

CouchDB のビューは不可欠ですが、クエリを作成するための JavaScript オプションが限られているため、手間がかかります (ドキュメント参照やネストされたオブジェクトについても考えないでください)。さまざまなドキュメントに対して複数のデータベースを使用することを検討することは、非常に優れたソリューションです。次のように言う人もいます。

CouchDB は NoSQL データベースであるため、ドキュメントを並べ替えたり、ビュー以外のものを使用してドキュメントをフィルタリングしたりする必要はありません。NoSQL データベースのコア機能は、スキームのないドキュメントを格納する機能です [...]

また、パフォーマンスクエリの回避策を見つける必要がある場合は、非常に面倒です。データを分割できる場合は、データを分割するためにいくつかのデータベースを作成してもかまいません。それは「単一の CouchDB インストール」上にあります。CouchDB は小規模なデータベースに適していることを忘れないでください。データベースが小さいほど、クエリが高速になり、パフォーマンスが向上します。

(英語の間違いがあるかどうかはわかりませんが、そうであればご容赦ください)


編集ArangoDBの ようないくつかの企業は、MongoDB と CouchDB の比較を行っており、ドキュメントの数に関する私の発言を確認しています。結果は次のとおりです。

グラフィカルな比較

彼らのウェブサイトには他にもたくさんのリソースがあります。一方、この声明は個人的な経験であり、インターネットで見つけた .PHP ベンチマーク ソフトウェアを使用して、インターンシップのためにそれらをベンチマークした結果です。結果を以下に示します。

ここに画像の説明を入力

于 2016-04-25T14:48:54.560 に答える