有没有一种方法可以使用列家族模板更新cassandra数据库中的多行,如提供一个键列表。 当前我正在使用updater columnFamilyTemplate来遍历一个键的列表并为每一行进行更新。我看到过像multigetSliceQuery这样的查询,但我不知道它们在进行更新时的等价性。如何使用Hector更新多行
回答
ColumnFamilyTemplate中没有实用方法,只允许您在一个调用中传递带有突变列表的键列表。 你可以使用mutators来实现你自己的。
这是如何做到这一点的赫克托
Set<String> keys = MY_KEYS;
Map<String, String> pairsOfNameValues = MY_MUTATION_BY_NAME_AND_VALUE;
Set<HColumn<String, String>> colums = new HashSet<HColumn<String,String>>();
for (Entry<String, String> pair : pairsOfNameValues.entrySet()) {
colums.add(HFactory.createStringColumn(pair.getKey(), pair.getValue()));
}
Mutator<String> mutator = template.createMutator();
String column_family_name = template.getColumnFamily();
for (String key : keys) {
for (HColumn<String, String> column : colums) {
mutator.addInsertion(key, BASIC_COLUMN_FAMILY, column);
}
}
mutator.execute();
那么它应该是一个基本的代码。这是插入一个例子,一定要使用下面的方法进行批量突变:
mutator.addInsertion
mutator.addDeletion
mutator.addCounter
mutator.addCounterDeletion
因为这样的会马上执行,而不必等待mutator.execute():
mutator.incrementCounter
mutator.deleteCounter
mutator.insert
mutator.delete
由于最后一个注意事项:一个增变器可以让你一次对多个列族的多行进行批处理变异......这就是为什么我通常更喜欢用它们代替CF模板的原因。对于使用NoSQL的“push-on-write”模式的功能,我有很多反规范化功能。
您可以使用批量突变来尽可能多地插入(在thrift_max_message_length_in_mb内)。见http://hector-client.github.com/hector//source/content/API/core/1.0-1/me/prettyprint/cassandra/model/MutatorImpl.html。
我认为你提到节俭的最大尺寸是很重要的,因为如果你不小心,它会丢失连接。所以+1 – 2013-05-09 10:23:35
嗨理查德,你能否阐述节俭的最大规模和失去联系。我一直没有暗示最大尺寸,我需要知道我应该采取什么样的照顾。 – qualebs 2013-05-16 20:45:39
- 1. 使用codeigniter更新多行
- 2. 使用Hector对Cassandra数据运行mapreduce
- 3. 如何使用Hector中的复合键读取行?
- 4. 如何使用多个值更新多行?
- 5. 如何使用现有行更新行?
- 6. Mongoose - 如何使用多个更新语句执行单个更新
- 7. 如何使用Propel ORM更新具有不同值的多行?
- 8. 如何使用一个查询更新mysql中的多行
- 9. 如何使用python/Django更新MySQL中的多行(CASE,WHEN,THEN)
- 10. 如何使用linq to sql一次更新多行?
- 11. 如何使用javascript更新多行的时间
- 12. 如何使用linq to sql进行多个更新?
- 13. PHP的 - 如何使用foreach更新多行?
- 14. 使用一个查询更新多行?
- 15. 使用PHP和MySQL更新多行
- 16. 使用唯一标识更新多行
- 17. 更新多行中使用PHP和SQL
- 18. Laravel:更新使用find多行()
- 19. 使用PHP SQLBuilder更新多行
- 20. 使用一个查询更新多行
- 21. 使用Ajax更新多个表行
- 22. 使用位置光标更新多行
- 23. 多行更新
- 24. 更新多行
- 25. 多行更新
- 26. 如何使用ObjectContext执行更新
- 27. 如何使用php更新postgresql行?
- 28. 如何使用dblink进行更新?
- 29. 如何使用LINQ进行更新?
- 30. 如何使用SQLAlchemy更新表格行?
我想要澄清一点:如果我想删除多行,那么我应该先获取键列表,然后尝试逐个删除每一行键。或者有其他方式可以删除多行。因为这个场景就像我不知道行键(因为它随机生成),但我知道电子邮件或每行的某个特定列值。 – manish 2013-05-09 05:22:10
你应该看一看Reddit的内容......他们在Board/Message/Comment类型的数据中处于使用Cassandra的最前沿。我宁愿使用couchbase/bigcouch/couchdb。使用cassandra的挑战性部分是摆脱“读 - 修改 - 写”,并将任何修改写入cass。 – 2013-05-09 10:20:09
如果您要将您最后的评论发布为问题,我认为这对我们很多人来说是一个有趣的练习。 – 2013-05-09 10:22:34