Python 在Cassandra中存储大型原始请求和响应的时间序列
我有许多python进程,每个进程都重复地查询一个单独的API。请求以一次20-100次的突发方式出现,然后该过程开始解析响应,并在大约一秒钟后重复。我希望使用Cassandra作为请求和响应的原始存储。这将允许我调试解析数据的问题和/或稍后重新解析。我正试图为此设计一个方案 我想每个API都可以有一个单独的表列族,这一点没什么好说的。我最初对表模式的想法是:Python 在Cassandra中存储大型原始请求和响应的时间序列,python,dictionary,cassandra,Python,Dictionary,Cassandra,我有许多python进程,每个进程都重复地查询一个单独的API。请求以一次20-100次的突发方式出现,然后该过程开始解析响应,并在大约一秒钟后重复。我希望使用Cassandra作为请求和响应的原始存储。这将允许我调试解析数据的问题和/或稍后重新解析。我正试图为此设计一个方案 我想每个API都可以有一个单独的表列族,这一点没什么好说的。我最初对表模式的想法是: stripe text, // free text to describe the flavour of the request, e.
stripe text, // free text to describe the flavour of the request, e.g. live games
date int, // YYYYMMDD
requests map<datetime, text>,
responses map<datetime, text>
这基本上是告诉我,无论如何,我不能把这些东西放在一个集合列中,因为响应的大小是任意的,而且几乎总是超过限制
我是卡桑德拉世界的新手,但我认为这些CQL映射最终对应于记录中单独的列名和值,并且每个列的大小限制为2GB。我能想到的一件事是不要使用映射,每次都要不断更改表模式,然后在单元格中插入一个正常值,但我不确定在底层存储中这有什么不同
所以我想我有两个问题:
这只是CQL的限制还是卡桑德拉的全部限制?
有经验的人能想出一个总体上更好的方法吗?
谢谢你的阅读
KCH回答我自己的问题-我的误解在于,在CQL中,键的第一部分始终是行键,因此对于复合键,键的其余部分构成列键。地图也会在同一行的不同列中使用自己的键名展开约定,但应用了限制大小。我怀疑答案可能存在于
stripe text, // free text to describe the flavour of the request, e.g. live games
date int, // YYYYMMDD
requests map<text, text>,
responses map<text, text>
E InvalidRequest: code=2200 [Invalid query] message="Map value is too long. Map values are limited to 65535 bytes but 435145 bytes value provided"