|
在上面更新幂等(Update idempotent)模型中,获取counter值要求读取所有user id值,这样的实现可能不够好(因为它可能有上百万个)。在本用例中,如果counter读操作很频繁,同时你能接受一个与真实值接近的值,counter column将是一个更好的、更高效的选择。如果需要,counter值也可以周期的通过user id计算出来并更新,这样的设计也是具有更新幂等性。
注意:Cassandra-2495可能会为失败的counter请求添加一个合适的重试机制。但是,这个实践仍然有效。所以记得经常测试模型更新幂等性。
根据需要,围绕事务建模
但这可能不总是能够实现,具体情况具体分析
Cassandra没有多行、集群范围的事务或者回滚机制,取而代之,它提供行级别原子性。换句话说,对某个row key的一次mutation操作是原子的。所以当你需要事务性的时候,尝试设计你的模型,让它一次永远只更新一行。但还是要考虑你的用例,这样的设计不总是有效,如果你的系统需要ACID事务,那你需要重新考虑数据库的选择了。
(译者注:Cassandra2.0.2支持多行事务,详见CASSANDRA-5633。)
如果可以的话,预先设计好合适的TTL
因为很难改变既有数据TTL
在Cassandra中,TTL(存活时间)不是设置在column family上,它设置于每个column value,一旦设置后就很难改变。或者说,如果创建column时候没有设置,那之后就很难对其设置TTL。对于既有数据修改TTL唯一的方式就是读取然后再次插入所有数据,并赋予TTL。所以要考虑好如何清除你的数据,如果可能进来在创建数据的时候设置合适的TTL。
|
|