假设我想创建一个允许可互换和可选地使用查询的表。让我们使用youtube上的Cassandra Community Webinar | Become a Super Modeler Video中的示例。
这是我的桌子在插入一辆车后的样子:
make | model | color | vehical_id | lot_id
------+---------+-------+------------+--------
FORD | | | 1234 | 654321
FORD | | BLUE | 1234 | 654321
| MUSTANG | BLUE | 1234 | 654321
| | BLUE | 1234 | 654321
FORD | MUSTANG | BLUE | 1234 | 654321
FORD | MUSTANG | | 1234 | 654321
| MUSTANG | | 1234 | 654321
主键为:PRIMARY KEY ((make, model, color),vehical_id)
现在,我可以按make
,make AND model
以及make
,model
和color
的所有其他组合进行选择,因为这些组成了我的主键。
插入那辆汽车所需的插件:
INSERT INTO car_location_index (make, model, color, vehical_id, lot_id) VALUES ('FORD', MUSTANG', 'BLUE', 1234, 654321);
INSERT INTO car_location_index (make, model, color, vehical_id, lot_id) VALUES ('FORD','MUSTANG', '', 1234, 654321);
INSERT INTO car_location_index (make, model, color, vehical_id, lot_id) VALUES ('FORD', '', 'BLUE', 1234, 654321);
INSERT INTO car_location_index (make, model, color, vehical_id, lot_id) VALUES ('', 'MUSTANG', 'BLUE', 1234, 654321);
INSERT INTO car_location_index (make, model, color, vehical_id, lot_id) VALUES ('FORD', '', '', 1234, 654321);
INSERT INTO car_location_index (make, model, color, vehical_id, lot_id) VALUES ('', 'MUSTANG', '', 1234, 654321);
INSERT INTO car_location_index (make, model, color, vehical_id, lot_id) VALUES ('', '', 'BLUE', 1234, 654321);
如果插入此处时出现问题,我可以找到这款车带有一些搜索组合,但不能找到其他搜索组合。因此,在这种情况下,如果某些插入失败,数据将被破坏。 由于这种推理,使用批处理语句来包围我的所有插页是否合理?(BEGIN BATCH ... APPLY BATCH;
)
如果不是,为什么以及批处理语句的正确用例是什么?
奖金将是关于如何实施批处理语句的详细说明。
感谢您提供任何指导,
斯科特
答案 0 :(得分:2)
情况就是这样。 默认情况下,行写入是原子的,但除非您不使用已记录的批处理,否则多行写入不是原子行。使用记录批次时要小心:考虑到原子性保证,请考虑写入时间内性能损失30%。
可在此处找到更多信息:http://www.datastax.com/dev/blog/atomic-batches-in-cassandra-1-2
干杯, 卡罗