如何使用pythoncassandradriver插入具有自定义时间戳的数据

2024-09-21 00:52:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是将数据插入到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)

Tags: 数据代码sqldatastring记录时间timestamp
1条回答
网友
1楼 · 发布于 2024-09-21 00:52:56

这是设置自定义时间戳的错误用例。重要的是不要滥用此功能,因为它可能会产生许多意想不到的副作用,并最终导致不可靠的数据。在

使用轻量级事务(LWT)(也使用PreparedStatements代替原始字符串!)在

stmt = session.prepare("
           INSERT INTO activate (rowkey, qualifier, info, act_date, log_time)
           VALUES (?, ?, ?, ?, ?)
           IF NOT EXISTS
           ")
results = session.execute(stmt, [arg1, arg2, ...])

阅读更多herehere。LWT由于必须触发paxos一致性检查而受到性能打击,但它比“先读后写”的方法要好。在

更好的是,如果您绝对需要最大化写入性能,请考虑修改数据模型以包含时间戳:

^{pr2}$

相关问题 更多 >

    热门问题