【问题标题】:Number of connections handled by singleton object of CassandraCassandra 的单例对象处理的连接数
【发布时间】:2016-01-17 19:41:29
【问题描述】:

我有一个三节点 Cassandra 集群,目前每秒 50 次写入。现在,它将是 100 次写入/秒,以下是我的集群的详细信息:

键空间定义:

CREATE KEYSPACE keyspacename WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 };

分区器:

 org.apache.cassandra.dht.RandomPartitioner

我在 c# 中有客户端(datastax c# 驱动程序),我正在使用单例设计模式,或者只创建一个 cassandra 服务器对象。它将用于从环中写入和读取数据。这样做的原因是 tcp 连接没有在环上关闭。到目前为止,我的戒指工作正常,能够承受 50 次写入/秒的负载。现在它将增加到 100 次写入/秒。 所以,我的问题是,考虑到我的环配置,相同的设计模式是否能够处理相同的问题?

C#代码:

public static ISession GetSingleton()
            {
                if (_singleton == null)
                {
                    Cluster cluster = Cluster.Builder().AddContactPoints(ConfigurationManager.AppSettings["cassandraCluster"].ToString().Split(',')).Build();
                    ISession session = cluster.Connect(ConfigurationManager.AppSettings["cassandraKeySpace"].ToString());
                    _singleton = session;
                }
                return _singleton;
            }

【问题讨论】:

    标签: cassandra cassandra-2.0 datastax


    【解决方案1】:

    在 Cassandra 方面,每秒 100 次写入是相当低的。它会很容易处理。

    从客户端来看,我认为您的设计没有问题。在我看来,使用单例模式是个好主意。但是我不知道,所以不能给你一个准确的答案:

    • 您写入的数据的大小是多少。
    • 您的网络的性能如何。
    • 您使用同步还是异步执行。

    一般来说,我们可以合理地考虑 10 毫秒/写入。通过同步执行,您将能够写入 100 次/秒。但是你不能无限期地继续下去,因为驱动程序不会创建更多的连接。

    另一方面,您可以使用 ExecuteAsync 方法异步执行写入。 C# Cassandra 驱动程序将为您管理连接池。

    我可以给你的另一个提示是PreparedStatement

    【讨论】:

    • PreparedStatement 如何帮助增加写入次数。此外,转到此文档,它建议每个应用程序只执行一个会话实例。由于会话本身会创建多个连接。为什么会这样? docs.datastax.com/en/developer/java-driver/1.0/java-driver/…
    • PreparedStatement 被一次性解析。因此需要节省大量时间。这就是为什么它将帮助您增加每秒的写入次数。关于会话,异步意味着您可以并行执行多个查询。这就是会话需要创建多个连接的原因。可以参考Datastax documentation
    猜你喜欢
    • 1970-01-01
    • 2018-01-30
    • 2023-03-11
    • 2011-01-24
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多