使用 Datastax API 插入/读取 Cassandra 数据库(使用新的二进制协议)

2024-02-26

我已经开始与Cassandra database。我打算使用数据统计API https://github.com/datastax/java-driver to 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我为连接到 Cassandra 数据库而创建的Datastax API它使用新的二进制协议-

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

第一个问题——如果我遗漏了上述内容,请告诉我singleton class同时使用使用新二进制协议的 Datastax API 连接到 Cassandra 数据库。

第二个问题——现在我正在努力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 完全陌生,它使用新的二进制协议,因此在这方面有很多问题。

谢谢您的帮助。


在 cassandra.yaml 文件中查找标签启动本地传输,默认禁用,启用即可。

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

插入代码

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

从卡桑德拉读取

 String query="select * from test;";
 ResultSet result = session.execute(query);
 for (Row rows: result){
     System.out.println(rows.getString("key"));
 } 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Datastax API 插入/读取 Cassandra 数据库(使用新的二进制协议) 的相关文章

随机推荐