2017-04-06 82 views
1

我与卡桑德拉有一个奇怪的行为。每当我尝试通过id找到一些行时,它会返回null(通过cqlsh控制台或客户端),但是如果通过另一个字段找到该寄存器,则该寄存器会存在。 例如: enter image description here在卡桑德拉找到身份证不起作用

我的表模式:

CREATE TABLE IF NOT EXISTS user_aggregation_new.user_aggregation_new (
    userid timeuuid PRIMARY KEY, 
    fullname text, 
    birthdate text, 
    password text, 
    mobile text, 
    address frozen <address>, 
    thumbs map<text, text>, 
    driverlicense frozen <driverlicense>, 
    cpf text, 
    facebookid text, 
    membershipsince timestamp, 
    rating double, 
    email text, 
    status text, 
    facebookemail boolean, 
    bankaccount list<frozen <bankaccount>>, 
    dateupdated timestamp, 
    version bigint 
); 

卡桑德拉版本:3.7

这究竟是为什么?

+0

你在每个DC中有多少个节点?你的密钥空间的RF和Class名称是什么? –

+2

使用以下命令在cqlsh中更改默认一致性级别: cqlsh:test> CONSISTENCY; (检查您的默认一致性级别) cqlsh:test> CONSISTENCY ALL; (将其更改为ALL) 然后检查您是否通过相同的查询获取数据。 – Chaity

回答

2

你有两个选择:在每个节点上

  • 运行nodetool修复,以提高数据的一致性

  • 提高您的客户端一致性水平。在cqlsh,与价值QUORUMALL

然后重试,回到我们如果仍无法正常工作运行命令一致性

+0

运行**是否有任何副作用** CONSISTENCY ** ??我对Cassadra有点新鲜,所以对于会发生什么或可能出错的一些解释将不胜感激!感谢您的时间 – Leonardo

+0

建议使用CONSISTENCY QUORUM。我认为它应该是cqlsh的默认值。一致性更强但不容错。您应该阅读[this](http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html)以获得与Cassandra一致性模型的联系。 – DineMartine

+0

好吧,我会给QUORUM一个尝试,读更多关于它。运行nodetool修复似乎可以解决问题。只要我100%确定,我会接受你的答案。感谢所有的信息! – Leonardo