Java 在Cassandra中将集合作为行插入
我是卡桑德拉的新手。我有一个场景,我将发送一组要保存的对象。例如,一个人和他的联系人。如果我必须使用类似Java 在Cassandra中将集合作为行插入,java,cassandra,cql,Java,Cassandra,Cql,我是卡桑德拉的新手。我有一个场景,我将发送一组要保存的对象。例如,一个人和他的联系人。如果我必须使用类似 public boolean addContacts(String personId, Collection<Contact> contacts){ // My Cassandra code to save this collection as individual rows (bulk execution) return false; publ
public boolean addContacts(String personId, Collection<Contact> contacts){
// My Cassandra code to save this collection as individual rows (bulk execution)
return false;
public boolean addContacts(字符串personId,集合联系人){
//我的Cassandra代码将此集合保存为单独的行(批量执行)
返回false;
Cassandra batch需要一系列可以在批处理中执行的查询。但是,对于这些查询,必须循环并构造查询。那么,有什么方法可以避免收集循环或对其进行优化呢?
我在Coach DB中访问了accross executeBulk,用于相同的场景。首先要确定的是模式。要创建模式,必须分析要支持的查询 如果您想存储和检索每个人的联系人,可以是:
CREATE TABLE contacts (
person_id text,
email text,
name text
phone text,
PRIMARY KEY (person_id, email)
)
(这是一个简化的模式,您应该相应地选择标识符,我只是在制作一个工作示例)
这样,联系人将按person_id进行分区,并通过第二个键(在本例中为电子邮件)进行聚集
如果需要批量插入联系人,可以使用
您必须像这样反复浏览联系人:
PreparedStatement ps = session.prepare("INSERT INTO contacts (person_id, email, name, phone) VALUES (?, ?, ?, ?)");
BatchStatement batch = new BatchStatement();
//for each contact, bind the parameters
for (Contact c : contacts) {
batch.add(ps.bind(personId, c.email, c.name, c.phone));
}
session.execute(batch);