我是Cassandra的新手。我有一个场景,我将发送一组要保存的对象。例如,一个人和他的联系人。如果我必须使用像
这样的东西public boolean addContacts(String personId, Collection<Contact> contacts){
// My Cassandra code to save this collection as individual rows (bulk execution)
return false;
Cassandra批处理期望一系列可以批量执行的查询。但是,为此必须循环并构建查询。那么,有没有办法避免循环收集或优化它? 我在Couch DB中遇到了与executeBulk相同的场景。
答案 0 :(得分:0)
首先要确定的是架构。要创建架构,您必须分析要支持的查询。
如果您想要存储和检索每个人的联系人,可能是:
CREATE TABLE contacts (
person_id text,
email text,
name text
phone text,
PRIMARY KEY (person_id, email)
)
(它是一个简化的架构,你应该相应地选择标识符,我只是制作一个工作样本)
通过这种方式,联系人将按person_id进行分区,并通过第二个密钥进行群集,在本例中为电子邮件。
如果您需要批量插入联系人,可以使用Datastax java driver。
执行此操作你必须像这样迭代联系人:
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);