我的任务是将数据插入到cassandra表中,但是我不想覆盖之前插入的记录,但是insert cql会覆盖现有的数据。在
幸运的是,我发现了一个“使用时间戳”的操作,时间戳越大的cql将覆盖较小的时间戳,否则不会。所以使用“USING TIMESTAMP”我可以使用一个自定义的时间戳来确定是否覆盖。它在Cqlsh中工作得很好。在
但在python-cassandra驱动中失败了,如何在python-cassandra驱动中使用时间戳?我的代码如下:
insert_sql = ("INSERT INTO activate (rowkey, qualifier, info, act_date, log_time) "
"VALUES(%s, %s, %s, %s, %s) "
"USING TIMESTAMP %s")
insert_data = (a_string, a_string, a_string, a_string, a_string, a_custom_timestamp)
session.execute(insert_sql, insert_data)
这是设置自定义时间戳的错误用例。重要的是不要滥用此功能,因为它可能会产生许多意想不到的副作用,并最终导致不可靠的数据。在
使用轻量级事务(LWT)(也使用PreparedStatements代替原始字符串!)在
阅读更多here和here。LWT由于必须触发paxos一致性检查而受到性能打击,但它比“先读后写”的方法要好。在
更好的是,如果您绝对需要最大化写入性能,请考虑修改数据模型以包含时间戳:
^{pr2}$相关问题 更多 >
编程相关推荐