【发布时间】:2013-04-12 08:24:24
【问题描述】:
我已经开始使用Cassandra database。我计划使用Datastax API 到upsert/read 到/从Cassandra database。我对这个Datastax API(它使用新的二进制协议)完全陌生,我也找不到很多文档,其中有一些适当的例子。
create column family profile
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'UTF8Type'
and column_metadata = [
{column_name : crd, validation_class : 'DateType'}
{column_name : lmd, validation_class : 'DateType'}
{column_name : account, validation_class : 'UTF8Type'}
{column_name : advertising, validation_class : 'UTF8Type'}
{column_name : behavior, validation_class : 'UTF8Type'}
{column_name : info, validation_class : 'UTF8Type'}
];
下面是我创建的Singleton class,它使用Datastax API 连接到Cassandra 数据库,它使用新的二进制协议-
public class CassandraDatastaxConnection {
private static CassandraDatastaxConnection _instance;
protected static Cluster cluster;
protected static Session session;
public static synchronized CassandraDatastaxConnection getInstance() {
if (_instance == null) {
_instance = new CassandraDatastaxConnection();
}
return _instance;
}
/**
* Creating Cassandra connection using Datastax API
*
*/
private CassandraDatastaxConnection() {
try{
cluster = Cluster.builder().addContactPoint("localhost").build();
session = cluster.connect("my_keyspace");
} catch (NoHostAvailableException e) {
throw new RuntimeException(e);
}
}
public static Cluster getCluster() {
return cluster;
}
public static Session getSession() {
return session;
}
}
第一个问题-如果我在使用新的二进制协议的 Datastax API 连接到 Cassandra 数据库时缺少上述 singleton class 中的任何内容,请告诉我。
第二个问题-现在我正在尝试 upsert and read data 进入/退出 Cassandra 数据库-
这些是我在 DAO 中的方法,它们将使用上面的 Singleton 类-
public Map<String, String> getColumnNames(final String userId, final Collection<String> columnNames) {
//I am not sure what I am supposed to do here?
//Given a userId, I need to retrieve those columnNames from the Cassandra database
//And then put it in the map with column name and its value and then finally return the map
Map<String, String> attributes = new ConcurrentHashMap<String, String>();
for(String col : columnNames ) {
attributes.put(col, colValue);
}
return attributes;
}
/**
* Performs an upsert of the specified attributes for the specified id.
*/
public void upsertAttributes(final String userId, final Map<String, String> columnNameAndValue) {
//I am not sure what I am supposed to do here to upsert the data in Cassandra database.
//Given a userId, I need to upsert the columns values into Cassandra database.
//columnNameAndValue is the map which will have column name as the key and corresponding column value as the value.
}
谁能帮我解决这个问题?我对这个使用新二进制协议的 Datastax API 完全陌生,所以对此有很多问题。
感谢您的帮助。
【问题讨论】:
-
您可以连接还是显示任何错误?
-
是的,我也无法使用 Datastax Java 驱动程序连接到 Cassandra 数据库。我也遇到了与
NoHostAvailableException相同的异常。你能解决这个问题吗? -
哦....我也有同样的问题,然后在 cassandra-forum 上发布了一个问题,是的,最终能够解决它。您使用的是哪个版本的 cassandra? 1.2.?
-
我正在运行 1.2.3。我还向您发送了一封电子邮件,我正在尝试通过该电子邮件建立连接并连接到集群。
-
顺便问一下,您在 cassandra.yaml 文件中做了哪些更改?我也会做出改变并运行它,看看这是否会产生任何影响。
标签: java cassandra cql cql3 datastax-java-driver