我们需要为特定流程保留计数器。后端位于 Cassandra。我们python
用作后端和cqlengine
驱动程序来与 cassandra 进行通信。
表定义为:
class LogCountRecord(db.model):
__keyspace__ = "..."
__table_name__ = "..."
__options__ = {
'compaction': {'class': 'SizeTieredCompactionStrategy',
'bucket_low': 0.3,
'bucket_high': 2,
'min_threshold': 2,
'max_threshold': 64,
'tombstone_compaction_interval': 86400},
'gc_grace_seconds': 0
}
# request_type: can be in [POST, GET, PUT, PATCH, DELETE]
request_type: str = db.columns.Text(partition_key=True, required=True)
time_epoch: int = db.columns.Integer(primary_key=True, required=True, clustering_order="DESC")
request_counter: str = db.columns.Counter()
我无法使用 cqlengine为MAX的以下聚合查询创建过滤器/获取。另外我在 cqlengine 中找不到任何可以帮助我创建以下逻辑的函数:
select time_epoch, MAX(request_counter) from ... where request_type = 'GET' and time_epoch > 1613667800
我能够使用以下方式以pythonic方式实现它:
a = LogCountRecord.filter(time_epoch__gt=1613667800,request_type="GET")
b = list(a.all().values_list('time_epoch', 'request_counter'))
print(max(b, key=lambda x: x[1]))
但是如何使用 cqlengine 来实现这一点。这样我就不必整体迭代了ModelQuerySet
吗?