我正在开展一个项目,我需要使用Cassandra Database
。我有一个示例程序,将数据填充到Cassandra database
。我正在使用Pelops client
。
所以现在我正考虑为Singleton class
建立一个Cassandra database
来与Cassandra database
建立连接,然后我将Singelton class
中的该实例用于我的{{} 1}}插入Cassandra数据库并从Cassandra数据库中检索数据。
下面是我到目前为止构建的Singleton类,它将连接到Cassandra数据库 -
CassandraDAO
问题陈述: -
我在上面的代码中几乎没有疑问。
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;
}
}
方法中做些什么?任何指针或示例都会有很大的帮助。setSeeds
方法的最佳方法是什么?我想,我在那边搞砸了什么?我一直在addPool
看到不同的addPool
方法?因此,我应该使用哪种方法,因为我将在生产环境中运行它。在上面的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个节点。
任何人都可以看看,让我知道我得到的一切正确吗?谢谢你的帮助。
答案 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)我使用默认参数没有问题。
侨