2

現在、Windows Cassandraの展開を評価しており、非常に簡単なストレステストを作成することができました。このテストでは、さまざまなデータを含む100万行を単一のローカルノードに挿入しようとします(ローカルホストとの間、レプリケーションなし、クラスター上の1つのノードのみ)。

このテストは、最初の100k行で正常に機能します(つまり、まったく同じ行で常にブロックされるとは限りません)。挿入された行はデータベースから正しく読み取ることができ、すべてが正常に機能します。次に、テストはマシン上で使用可能なすべてのソケット/バッファ/一部のネットワークリソースを消費しているように見え、テストはCassandraへの接続に失敗し、行の挿入を停止します。ブラウザから完全に独立したWebページを更新しても、しばらくの間失敗します。

私は最初にテストを非難しましたが、それを強制終了して再起動しても機能しません。新しい接続が利用可能になるまで約1分待つ必要があります(タイムアウト?)。その後、テストを再開してデータをポンピングし続けることができます。Fluent CassandraクライアントとCassandra-Sharpクライアントの両方を使用してテストを作成し、同じ結果が得られました。

同時接続の最大数など、CassandraまたはC#クライアントで設定する必要のある設定はありますか?

または、C#から数百万行を挿入する作業ストレステストのソースへのリンクを誰かが持っているので、それを私のテストと比較して私の間違いを理解することができますか?

4

2 に答える 2

1

私の推測では、ソケット接続を開いたままにしていないと思います。コンテキストをセッションでラップすることにより、FluentCassandraで接続を開いたままにすることができます。これを行わないと、実行される各リクエストは新しいソケットで実行されます。

于 2012-09-25T03:03:23.593 に答える
0

CassandraSharpまたはFluentCassandraAPIの代わりにThriftAPIを直接使用しました。このコードが機能することを示しました。

socket = new TSocket("127.0.0.1", 9160);
socket.Open();
client = new Cassandra.Client(new TBinaryProtocol(new TFramedTransport(socket)));
client.set_keyspace("Test");

foreach (Data data in myData) {
    Write(client, data);
}

socket.Close();

次のコードは最終的に「socket.Open()」で高レベルのAPIが遭遇する問題を再現します。

foreach (Data data in myData) {
    socket = new TSocket("127.0.0.1", 9160);
    socket.Open();
    client = new Cassandra.Client(new TBinaryProtocol(new TFramedTransport(socket)));
    client.set_keyspace("Test");

    Write(client, data);

    socket.Close();
}

socket.Close()メソッドは、おそらくバグであるソケットのすべてのリソースを解放しません。

于 2012-08-13T15:07:08.247 に答える