Cassandra - 使用key返回0结果来获取CF,但是在使用pycassa检索整个表时存在密钥

时间:2013-02-22 17:38:44

标签: nosql cassandra pycassa

我们在Cassandra 1.2.0中有一张桌子。那有一个VarInt键。当我们搜索密钥时,我们可以看到它们存在。

表格描述:

CREATE TABLE u (
key varint PRIMARY KEY,
) WITH COMPACT STORAGE AND
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
read_repair_chance=1.000000 AND
replicate_on_write='true' AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'SnappyCompressor'};

Select key from u limit 10;

12040911

60619595

3220132

4602232

3997404

6312372

1128185

1507755

1778092

4701841

当我尝试获取密钥60619595的行时,它可以正常工作。

cqlsh:用户>从中选择键,其中key = 60619595;

60619595

cqlsh:users> select key from u where key = 3997404;

当我使用pycassa获取整个表格时,我可以访问该行。

import pycassa
from struct import *
from pycassa.types import *
from urlparse import urlparse
import operator

userspool = pycassa.ConnectionPool('users');
userscf = pycassa.ColumnFamily(userspool, 'u');
users = {}
u = list(userscf.get_range())
for r in u:
users[r[0]] = r[1]
print users[3997404]

返回正确的结果。

我做错了什么?我看不出错误是什么。

任何帮助将不胜感激,

此致

迈克尔。

PS: 当我尝试时,我应该在pycassa中说:

userscf.get(3997404)

文件“test.py”,第10行,in userscf.get(3997404) 文件“/usr/local/lib/python2.7/dist-packages/pycassa/columnfamily.py”,第655行,获取 提出NotFoundException() pycassa.cassandra.ttypes.NotFoundException:NotFoundException(_message = None)

似乎在Ints中小于平均值。

2 个答案:

答案 0 :(得分:0)

您正在混合基于CQL和基于Thrift的查询,这些查询并不总是很好地混合。 CQL抽象底层存储行,而Thrift直接处理它们。

答案 1 :(得分:0)

这是我们在项目中遇到的问题。我应该补充一点

从中选择键,其中key = 3997404; cqlsh:用户>

返回0结果,即使在cqlsh中select * from u,或者在pycassa中获取整个表时,我们会看到带有键3997404的行。

很抱歉这个混乱。

此致

d