我需要处理大约4,000个cassandra查询。我将每个查询ResultSet转换为生成器,以保持较低的内存占用。在生成器的每一行中,我只关心大约50个字段。
我知道我不能直接过滤CQL中的值域,但是DataStax Python Cassandra驱动程序中有没有内置的东西可以做到这一点呢?或者在我构建生成器时这样做会更有意义
def make_gen(response):
for row in response:
yield row.value.field1, row.value.filed2我目前正在发布直接查询,但稍后将使用并发查询和准备好的语句转移到基于模型的方法。发出请求的代码非常简单
sess = connect_cas(env)
for user in users:
q = 'select * from table ' + \
'where key1 = {} and '.format(key_1) + \
'key2 = {} and '.format(key_2) + \
'sample_time > {} '.format(t1) + \
'sample_time < {} '.format(t2)
resp_gen = make_gen(sess.execute(q)) # just a yield json.loads(Row.value)
for resp in resp_gen:
if field in resp:
// process data from this field我只关心这个“字段”所在的行。从那以后,我更新了我的生成器,只在这个条件为真时才产生数据,但是,如果DataStax驱动程序中内置了一些更高效的东西,那么在4,000次查询时,节省的时间就会加起来。
发布于 2017-11-08 06:15:47
您是否显示您只处理field1或field2设置为特定值的行?
它不完全是为此目的而构建的,但您可以使用自定义row_factory在较低级别实现此过滤,并避免命名元组、元组和附加生成器之间的转换。
https://stackoverflow.com/questions/47128157
复制相似问题