2

我们目前正在评估 Windows Cassandra 部署,我已经设法编写了一个非常简单的压力测试。该测试尝试将包含各种数据的 100 万行插入到单个本地节点(到/从本地主机,无复制,集群上只有一个节点)。

该测试适用于前 100k 行(或者说,它并不总是阻塞在完全相同的行上)。可以正确地从数据库中读取插入的行,并且一切正常。然后测试似乎消耗了机器上所有可用的套接字/缓冲区/一些网络资源,并且测试无法连接到 Cassandra 并停止插入行。即使从浏览器刷新一个完全独立的网页也会有一段时间失败。

我首先指责了测试,但是杀死它并重新启动它不起作用。我需要等待大约一分钟才能有新的连接可用(超时?)。然后我可以恢复测试并继续抽取数据。我使用 Fluent Cassandra 和 Cassandra-Sharp 客户端编写了测试,结果相同。

是否需要在 Cassandra 或 C# 客户端中设置一些设置,例如最大并发连接数?

或者,是否有人有一个工作压力测试来源的链接,该测试从 C# 中插入了几百万行,所以我可以将它与我的测试进行比较并找出我的错误?

4

2 回答 2

1

我的猜测是您没有打开套接字连接。您可以通过将上下文包装在会话中来使连接在 FluentCassandra 中保持打开状态。如果您不这样做,则执行的每个请求都在一个新套接字上。

于 2012-09-25T03:03:23.593 回答
0

我直接使用了 Thrift API,而不是 Cassandra Sharp 或 Fluent Cassandra API。它表明此代码有效。

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();

虽然以下代码最终重现了更高级别的 API 在“socket.Open()”上遇到的问题。

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 回答