使用 Datastax API(使用新的二进制协议)向上插入/读入/从 Cassandra 数据库 [英] Upsert/Read into/from Cassandra database using Datastax API (using new Binary protocol)

查看:18
本文介绍了使用 Datastax API(使用新的二进制协议)向上插入/读入/从 Cassandra 数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经开始使用 Cassandra 数据库.我打算使用 Datastax APIupsert/read 进入/从Cassandra 数据库.我对这个 Datastax API(使用新的二进制协议)完全陌生,我也找不到很多包含一些适当示例的文档.

创建列族配置文件使用 key_validation_class = 'UTF8Type'和比较器 = 'UTF8Type'和 default_validation_class = 'UTF8Type'和 column_metadata = [{column_name:crd,validation_class:'DateType'}{column_name:lmd,validation_class:'DateType'}{column_name :帐户,validation_class :'UTF8Type'}{column_name:广告,validation_class:'UTF8Type'}{column_name:行为,validation_class:'UTF8Type'}{column_name:信息,validation_class:'UTF8Type'}];

现在下面是我创建的 Singleton 类,用于使用使用新二进制协议的 Datastax API 连接到 Cassandra 数据库-

公共类 CassandraDatastaxConnection {私有静态 CassandraDatastaxConnection _instance;受保护的静态集群集群;受保护的静态会话会话;公共静态同步 CassandraDatastaxConnection getInstance() {如果(_instance == null){_instance = 新的 CassandraDatastaxConnection();}返回_实例;}/*** 使用 Datastax API 创建 Cassandra 连接**/私人 CassandraDatastaxConnection() {尝试{cluster = Cluster.builder().addContactPoint("localhost").build();session = cluster.connect("my_keyspace");} catch (NoHostAvailableException e) {抛出新的运行时异常(e);}}公共静态集群 getCluster() {返回集群;}公共静态会话 getSession() {返回会话;}}

第一个问题-让我知道在使用使用新二进制协议的 Datastax API 连接到 Cassandra 数据库时是否遗漏了上述 singleton 类 中的任何内容.>

第二个问题-现在我正在尝试upsert和读取数据到/从Cassandra数据库-

这些是我在 DAO 中的方法,它们将使用上述 Singleton 类-

public MapgetColumnNames(final String userId, final Collection columnNames) {//我不确定我应该在这里做什么?//给定一个用户 ID,我需要从 Cassandra 数据库中检索那些 columnNames//然后把它和列名和它的值放在映射中,最后返回映射映射<字符串,字符串>属性 = new ConcurrentHashMap();for(String col: columnNames) {属性.put(col, colValue);}返回属性;}/*** 为指定的 id 执行指定属性的 upsert.*/public void upsertAttributes(final String userId, final Map columnNameAndValue) {//我不确定我应该在这里做什么来更新 Cassandra 数据库中的数据.//给定一个用户 ID,我需要将列值 upsert 到 Cassandra 数据库中.//columnNameAndValue 是以列名作为键,对应的列值作为值的映射.}

谁能帮我解决这个问题?我对这个 Datastax API 完全陌生,它使用新的二进制协议,所以在这方面有很多问题.

感谢您的帮助.

解决方案

在您的 cassandra.yaml 文件中查找标签 start_native_transport,默认情况下禁用它,启用它.

使用 Datastax Java 驱动程序与 jdbc 驱动程序非常相似.

插入代码

 String query = "insert into test(key,col1,col2) values('1','value1','value2')";会话.执行(查询);

阅读卡桑德拉

 String query="select * from test;";结果集结果 = session.execute(query);对于(行行:结果){System.out.println(rows.getString("key"));}

I have started working with Cassandra database. I am planning to use Datastax API to upsert/read into/from Cassandra database. I am totally new to this Datastax API (which uses new Binary protocol) and I am not able to find lot of documentations as well which have some proper examples.

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'}
      ];

Now below is the Singleton class that I have created for connecting to Cassandra database using Datastax API which uses new Binary protocol-

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;
    }
}

First question- let me know if I am missing anything in the above singleton class while making connection to Cassandra database using Datastax API which uses new Binary protocol.

Second question- Now I am trying to upsert and read data into/from Cassandra database-

These are the methods I have in my DAO's which will use the above Singleton class-

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.

}

Can anyone help me with this? I am totally new to this Datastax API which is using new Binary protocol so having lot of problem on this.

Thanks for the help.

解决方案

In your cassandra.yaml file look for the tag start_native_transport, by default its disabled, enable it.

Playing with Datastax Java Driver is quite similar like jdbc driver.

Insertion code

 String query = "insert into test(key,col1,col2) values('1','value1','value2')";
 session.execute(query);

Reading from Cassandra

 String query="select * from test;";
 ResultSet result = session.execute(query);
 for (Row rows: result){
     System.out.println(rows.getString("key"));
 } 

这篇关于使用 Datastax API(使用新的二进制协议)向上插入/读入/从 Cassandra 数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆