使用Pelops客户端连接到Cassandra数据库的有效方法

时间:2013-04-09 21:04:07

标签: java singleton cassandra pelops

我正在开展一个项目,我需要使用Cassandra Database。我有一个示例程序,将数据填充到Cassandra database。我正在使用Pelops client

所以现在我正考虑为Singleton class建立一个Cassandra database来与Cassandra database建立连接,然后我将Singelton class中的该实例用于我的{{} 1}}插入Cassandra数据库并从Cassandra数据库中检索数据。

下面是我到目前为止构建的Singleton类,它将连接到Cassandra数据库 -

CassandraDAO

问题陈述: -

我在上面的代码中几乎没有疑问。

  1. 首先,我应该在上面的课程public class CassandraConnection { private static CassandraConnection _instance; private String keyspace; private String[] seeds; private int port; private String poolName; public static synchronized CassandraConnection getInstance() { if (_instance == null) { _instance = new CassandraConnection(); } return _instance; } private CassandraConnection() { setKeyspace(ICassandraDo.KEYSPACE_NAME); setSeeds(ICassandraDo.NODES).split(","); setPort(ICassandraDo.CASSANDRA_PORT); setPoolName(ICassandraDo.THRIFT_CONNECTION_POOL); createPool(); } //This is the right way to `addPool` in pelops? private void createPool() { Pelops.addPool(getPoolName(), getSeeds(), getPort(), false, getKeyspace(), new Policy()); } private String setSeeds(String nodes) { // I am not sure what I am supposed to do here? // Any guidance will be of great help } private void setPoolName(String thriftConnectionPool) { this.poolName = thriftConnectionPool; } private void setPort(int cassandraPort) { this.port = cassandraPort; } private void setKeyspace(String keyspaceName) { this.keyspace = keyspaceName; } public void setSeeds(String[] seeds) { this.seeds = seeds; } public String[] getSeeds() { return seeds; } public int getPort() { return port; } public String getKeyspace() { return keyspace; } public String getPoolName() { return poolName; } } 方法中做些什么?任何指针或示例都会有很大的帮助。
  2. 其次,我不确定这是否是正确的方法,因为我正在创建一个Singleton类?我想知道使用pelops客户端管理集群连接的最佳方法是什么。
  3. 而且,在上面的代码中使用setSeeds方法的最佳方法是什么?我想,我在那边搞砸了什么?我一直在addPool看到不同的addPool方法?因此,我应该使用哪种方法,因为我将在生产环境中运行它。
  4. 在上面的Singleton类准备好之后,我打算在我的Pelops class代码中使用上面的类,就像这样 -

    DAO Mutator mutator = Pelops.createMutator(CassandraConnection.getInstance().getPoolName());;

    然后选择选择器以检索数据。

    仅供参考,我正在使用mutator.writeColumns(other data inside)Cassandra 1.2.3

    任何帮助将不胜感激。提前谢谢。

    更新代码: -

    以下是我的更新代码。

    Scale 7 pelops client

    仅供参考,在我的情况下,我将有两个集群,每个集群有12个节点。

    任何人都可以看看,让我知道我得到的一切正确吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

种子节点是群集中的两个(或更多,但是来自Cassandra文档的建议数量)节点。在每个cassandra-node配置文件(cassandra.yaml)中,都有集群的种子节点的地址。想象一下,你有5个节点的集群

192.168.1.100 192.168.1.101 192.168.1.102 192.168.1.103 192.168.1.104

例如,在每个配置文件中都会有

种子     192.168.1.101     192.168.1.103

对于此群集,这两个地址是种子节点。启动时集群的每个节点都将联系这两个节点并获取必要的信息。在您的示例中,您可以传递配置中找到的地址或仅传递集群的几个地址节点

String[] nodes = new String[2];
nodes[1] = "192.168.1.101";
nodes[2] = "192.168.1.103";

2)Singleton是绝对不必要的,因为Pelops类只由静态元素构成。如果您的应用程序中有Init / Startup,则只需声明与Cassandra的连接,并且它将在您的所有代码中提供

3)没有正确的答案,连接到群集的正确方法取决于群集。 您可能需要设置自定义参数或由Pelops保留。在我的生产环境中(5个节点,RF = 3)我使用默认参数没有问题。