1

私はerlang/elixirでアプリケーションを開発しています。erlangからCouchbase2.0にアクセスしたいのですが。バイナリプロトコルのmemcachedクライアントであるerlmcプロジェクト(https://github.com/JacobVorreuter/erlmc)を見つけました。メモには、「バージョン1.3以降のmemcachedが必要です」と記載されています。

Couchbase 2.0がデータへのアクセスにmemcachedバイナリプロトコルを使用していることを理解しており、erlangからこれを行うための最良の方法を探しています。

マニュアルでは、8092の「CouchbaseAPIポート」について説明し、11210(11211 memcached通常ポートに近い)を「内部クラスターポート」と呼びます。 http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-network-ports.html

だから、問題はこれです:

ポート8092でCouchbase2.0と通信するようにerlmcを設定するのは正しい方法ですか?

Erlmcは、適切なサーバーを見つけるためにキーをハッシュする方法について話します。これにより、memcachedプロトコルのバージョンが古すぎる可能性があると思います(または、接続する必要があるcouchbase 2.0に組み込みのMOXIがありますか?どのポート?)

erlangビューのポートはどれですか?そして、おそらくビューのRESTインターフェースはストレートキールックアップをサポートしていないので、それにアクセスするためのコードを書く必要がありますよね?

NIFは同時ではなく、同時にCouchbase 2.0にアクセスしたいプロセスの数が不明なため、純粋なerlangソリューションを使用したいと思っています。

前回Couchを使ったのはCouchDBだったので、CouchとMembaseが合併した後、物事をつなぎ合わせようとしています。

間違った方向に進んでいる場合は、erlangからCouchbase2.0に非常に一貫した方法でアクセスするための最良の方法についてアドバイスしてください。memcachedプロトコルはかなりしっかりしているはずなので、おそらく2、3年前のライブラリが機能するはずですよね?

ありがとう!

4

5 に答える 5

2

簡単な答えは次のとおりです。はい、Couchbaseはmemcachedテキストプロトコルと互換性があります。

ただし、ここで重要なのは「memcachedテキストプロトコル」です。memcachedは2つの異なるプロトコルタイプ(テキストとバイナリ)を使用しているため、テキストプロトコルを使用しているクライアントを使用する必要があります。

Mochiでは、memcachedにmerleを使用しており、これでうまくいくようです。最近、私の同僚の1人がそれをフォークし、いくつかのマイナーな修正を行いました:https ://github.com/twonds/merle

また、 https://github.com/EchoTeam/mcdを確認することを検討してください。このクライアントはリファクタリングを使用できますが、本番環境で実証されており、単純なシャーディングも可能です。

于 2012-11-22T13:10:40.373 に答える
2

Xavierの貢献のおかげで、プーリングを追加してすべてをリファクタリングしました。これで、ビルドとパフォーマンスに問題はありません。自分でベンチマークできるように、basho_benchドライバーも含めました。ここでコードを見つけることができます。これはテキストプロトコルよりも優れたパフォーマンスを発揮すると確信しています。

于 2012-12-15T07:26:16.483 に答える
1

私は独自のvbucket対応のerlmcベースのerlangcouchbaseクライアントを作成する必要がありました。違い:
-couchbaseからvbucketマップを取得するためのhttp接続-2
つの「予約済み」バイトをvbucket IDで埋めます(たとえば、Pythonクライアントを参照)
-パフォーマンス上の理由から非同期tcp接続を1回アクティブにします

于 2012-12-04T16:40:21.520 に答える
1

私がこれまでに持っている唯一の答えは: https ://github.com/chitika/cberl

このプロジェクトは、C++の「公式」couchbaseクライアントに基づいています。

2つの問題が考えられます。

1)放棄される可能性があります(最後のアクティビティは3か月前でした)2)NIFを使用しているため、私が理解しているように、同時にアクセスすることはできません。

于 2012-12-04T20:24:58.287 に答える
1

ErlangではCouchbaseを使用しませんが、Pythonではmemcacheクライアントに接続する必要があります。Erlangライブラリと具体的に話すことはできませんが、両方の状況にレッスンが当てはまるといいのですが。

Memcacheクライアントの制限

Memcacheクライアントは、memcache機能にのみアクセスできます。memcacheプロトコルで指定されていないビューやその他の機能を使用することはできません。ビューにアクセスする場合は、ポート8092( docs )でRESTプロトコルを個別に使用する必要があります。

VanillaMemcacheクライアントを使用したCouchbaseへの接続

そのページに記載されているポートは、内部で使用されるか、Couchbase専用に作成された「スマート」クライアントによって使用されます。デフォルトでは、memcacheクライアントは、Couchbaseクラスター内の任意のノードの通常のmemcacheポート11211に接続できます。Couchbase用に特別に作成されていないmemcacheクライアントのmemcacheクラスター機能を使用しないでください。バニラmemcachedの通常の配布方法は、Couchbaseと互換性がありません。

説明

memcachedクライアントに接続するには、Couchbaseバケットのポートに直接接続する必要があります。新しいバケットを設定するときは、バケットにアクセスできるポートを指定します。デフォルトのバケットはポート11211に設定されています。各バケットは、独立したmemcachedインスタンスのように機能しますが、クラスター内のすべてのノードに内部的に分散されます。どのCouchbaseサーバーのバケットポートにも接続でき、同じデータセットにアクセスできます。

これは、memcacheクライアントの分散memcache機能を使用しようとしないことを意味します。これらの機能は、アドホックmemcachedクラスター用に設計されています。単一のmemcachedサーバーであるかのように、Couchbaseサーバーの適切なポートに接続するだけです。

これが可能な理由は、リクエストを処理するための適切なCouchbaseサーバーを見つけるMoxiインスタンスがあるためです。このMoxiインスタンスは、すべてのCouchbaseサーバーのバケットごとに自動的に実行されます。特定のキーを持つノードに接続していない場合でも、Moxiはリクエストを適切なサーバーに透過的に送信します。

このようにして、クラスタートポロジを追跡するための追加のロジックを必要とせずに、バニラMemcacheクライアントを使用してCouchbaseと通信できます。モクシーはあなたのためにその部分の世話をします。

バイナリプロトコル

ある時点でバイナリプロトコルが機能していましたが、flush_allコマンドを使用しようとすると問題が発生しました。しかし、それは少し前のことです。サポートのレベルがニーズを満たしているかどうかを確認するために、自分で実験することをお勧めします。

于 2012-12-08T03:13:37.133 に答える