小数据集的Cassandra查询超时

小数据集的Cassandra查询超时,cassandra,Cassandra,我对卡桑德拉2.1.17有问题。我有一张大约有4万行的桌子。我遇到问题的一个分区中可能有5k个条目 表为: create table billing ( accountid uuid, date timeuuid, credit double, debit double, type text, primary key (accountid,date) ) with clustering order by (date desc) 因此,在这个表中有

我对卡桑德拉2.1.17有问题。我有一张大约有4万行的桌子。我遇到问题的一个分区中可能有5k个条目

表为:

create table billing (
    accountid uuid,
    date timeuuid,
    credit double,
    debit double,
    type text,
    primary key (accountid,date)
) with clustering order by (date desc)
因此,在这个表中有很多插入和删除操作

我的问题是,不知何故它似乎变得损坏了,我想这是因为我不再能够从分区中选择超过某个点的数据

从cqlsh我可以像这样运行soemthing

从账单中选择accountid=XXXXX-xxxx-xxxx-XXXXX的账户、日期、贷方、借方、类型。。。日期<3d466d80-189c-11e7-8a57-f33cbced2fc5限值2

首先,我做了一个10000行的选择限制,它最多可以处理5000行,然后在接近结束时,它会给出一个超时错误

然后我使用上一次UUID中的第二个,并选择限制2,它将失败限制1将工作

如果我将最后一个timeuuid用作<,并限制为1,它也将失败

因此,我只是想看看我能做些什么,我不确定哪里出了问题,也不确定如何修复/诊断发生了什么

我已厌倦了修理,并强行压实。但它似乎仍然存在问题


谢谢你的帮助。

在我看来,当你这么做的时候,你好像碰到了很多墓碑。问题是,当他们在那里的时候,卡桑德拉仍然需要检查他们。可能有多种因素,如带有insert语句的ttl、大量删除、插入空值等

我敢打赌,你们需要调整桌面上的gc_grace_秒数,并更频繁地进行维修。但要小心,不要将其设置为低(在此之前必须完成一轮修复)

这里有很好的解释:

我想这个分区中的墓碑太多了

什么是墓碑?

为了记住记录已被删除,Cassandra创建了一个称为“墓碑”的特殊值。墓碑和任何其他值一样具有TTL,但它不像任何其他值那样容易压缩。Cassandra将其保留更长的时间,以避免数据重现等不一致性

如何观看墓碑?

nodetoolcfstats让您了解每个切片平均有多少个墓碑

如何解决此问题?

墓碑的保存时间为gc_grace_秒。你必须减少它,然后运行一个主要的压缩来解决这个问题

  • 试着从在桌子上运行手动压实开始
  • 您可以在cassandra配置中增加\u ms中的读取请求\u超时\u参数
  • 如果您有大量的删除和更新,请考虑采用分层压缩策略

  • 谢谢你的建议,我会试试看这是否有用。是的,表上会有很多删除。我想知道是否有一种方法可以设置此表,使其具有不同的压实计划或其他类似于此表的内容。目前,该表被用作队列。您可以使用STC和LCS的参数。从降低STC中压缩触发器的阈值或LCS中的小表大小开始。LeveldCompactionStrategy更适合此用例,但如果您有太多的墓碑(超过100000个),则它不会有帮助,而且在增加读取请求超时时间(以毫秒计)时必须小心,您有达到集群饱和点的风险。@DineMartine“如果您有太多墓碑(超过100000)”-为什么,如果他将其调整为小表大小和较低的gc_grace?感谢您的所有回复。我发现了这个链接,我们更详细地介绍了我是如何在cassandra和一些选项中使用这个表的。总的来说,我认为你们所有人都正确地认为墓碑是问题所在。如果不是这样的话,我将尝试回击。这是我找到的链接。是的,谢谢所有回复过多墓碑的人。