web-dev-qa-db-ja.com

スケーラブルなCouchDBセットアップ

約ある既存のアプリケーションを移行したい。 CouchDBへのリレーショナルデータベースに保存された1,000万件のレコード。私がCouchDBで気に入っているのは、簡単なレプリケーションと高速にキャッシュされたビューです。私が気に入らないのは、書き込みとビューの作成速度が非常に遅く、1000万のドキュメントがあることです。

これらの潜在的なボトルネックを回避する必要がある1つのアイデアは、3つのCouchDBインスタンスを持つことです。

  1. インスタンスのみを書き込む:これはマスターインスタンスです。信頼できる唯一の情報源。ここで許可されるのは、更新、挿入、および削除のみです。このインスタンスには読み取りもビューもありません。
  2. 作成のみのインスタンスを表示:ビューの作成とキャッシュにのみ使用されます。このインスタンスには読み取りまたは書き込みはありません。
  3. 読み取り専用インスタンス:複製されたビューを介した読み取りアクセス。

インスタンス2はインスタンス1から複製されます。インスタンス2を使用するアプリケーションは存在しないため、本番アプリケーションに影響を与えることなく新しいビューを作成できます。

インスタンス3は、キャッシュされたすべてのビューを含むインスタンス2から複製されます。

これは実行可能な解決策ですか?

6
jensendarren

CouchDBはビューキャッシュを複製しないと確信しています(結局のところ、それらはキャッシュであるため)。したがって、これらの帯域外を複製する必要があります(これは、ポイントを逃します、IMO)。

CouchDBは、書き込みの多い負荷にはおそらくそれほど適していません。結局のところ、負荷が読み取り負荷の高い場合は、挿入/更新のたびにビューを呼び出すだけで、ビューが常に完全にキャッシュバックされるようになると思います。

免責事項:私はいくつかのサイトでCouchDBを使用していますが、あなたが話しているサイズにはほど遠いです。

1
djc

私はCouchDBを実行したことがなく、調査しただけなので、検証せずにここでの提案を真と見なさないでください...

まず、CouchDBの本番環境での使用経験に関するJohn P. Woodのシリーズを読むことを強くお勧めします: http://johnpwood.net/2009/06/15/couchdb-a-case-study/ ==

次に、インスタンスと言うとき、それは単一のCouchDBインスタンスを持つ物理サーバーですか? 3台のサーバーしか話していない場合、異なる役割を割り当てて容量を分割することは最適ではないと思います。私の直感は、3つのサーバーすべてを同一に保ち、完全なデータセットをロードして、並列読み取りクエリを可能にすることです...?

サーバーが3台しかない場合は、従来のRDBMSと従来のレプリケーションセットアップを検討します。 CouchDBが、この比較的少量の計算能力であなたに大きな違いをもたらすとは思えませんか?

もう1つ、Hadoopの上に構築されたHBaseをよく見てください。 Hadoopフレームワークは現在、YahooとFacebookの両方が大規模なユーザーであり、優れた企業スポンサーを獲得しています。これを考えると、HBaseは他の競合製品よりも早く開発され、十分にテストされる可能性があります。

HTH

1
Jesper M