【问题标题】:Is it possible to avoid tombstone problems with Cassandra?是否可以避免 Cassandra 出现墓碑问题?
【发布时间】:2016-07-14 10:26:48
【问题描述】:

我正在为使用 Cassandra 作为数据库系统的 CMS 编写代码。

CMS 的优势之一是使用后端计算机预先计算各种事情,该后端计算机针对 CMS 中发生变化的数据永久运行。

例如,CMS 告诉列表系统页面已创建或更改。列表系统将该信息保存在名为list 的表中。该信息只是告诉我必须处理哪个页面的一个衬里。

Column family: list
   Row: concerned website (i.e. http://www.example.com/)
     Column: full URI (i.e. http://www.example.com/this/page)
        Value: true (because you need something for the column to exist)

偶尔(通常在简单的页面编辑后不到一秒钟),该列表后端系统会唤醒并看到某个页面已更改并开始通过更新所有列表来处理它,包括(或不不再包含)该页面作为元素。这允许前端立即知道列表中的元素数量并非常快速地读取列表,而无需在需要列表时运行复杂的查询(与许多 CMS 使用 SQL.. .)

实际上,我使用list 表作为TODO 列表。我必须处理的一组页面。因此,前端将页面引用添加到该列表,而后端在完成后将其删除。结果,我可以在list 表中得到大量的墓碑。现实世界的影响:我有墓碑故障,系统开始在随机地方出现故障。一旦列表停止工作,系统中的许多其他东西都会停止工作,网站将变得无法使用。

我减少了 Cassandra 处理该特定表(以及其他一些表)中墓碑的时间,但我想知道我是否按预期使用了 Cassandra。在这种环境下是否有更好的方法来处理此类 TODO 列表?

附带说明:TODO 列表可以在各种不同的后端计算机上处​​理。在小型系统上,您可能只有一个后端针对列表数据运行,而在拥有数千名用户的大型系统上,您不太可能有 2 或 3 个后端来处理列表。因此,将数据保存在 Cassandra 中非常实用,可以在计算机之间快速共享。

【问题讨论】:

  • 如果编写一个新的应用程序应该避免节俭,那么它已被弃用。
  • @ChrisLohfink,我从 Cassandra 0.8 开始,但我们正在努力使用 Cassandra 3.x 而不是 Thrift 获得 CQL。话虽如此,我仍然想知道排序是否有不同的工作方式......

标签: cassandra backend tombstone


【解决方案1】:

您实际上实现了一个队列,该队列被认为是 cassandra 的反模式: http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

人们有一些变通方法和一些事情可以让他们变得更好,但这是一场很难玩的游戏。请务必使用 LeveledCompactionStrategy 而不是默认值,这将对较小的工作负载有很大帮助。考虑一些变通方法,例如对分区进行时间装箱(旧的节俭术语中的行)以及上面链接的文章中的内容,但您可能想要寻找不同的解决方案。

【讨论】:

  • “队列示例可能很极端” -- 但这正是我们遇到的问题……我们的会话表也有类似的问题,尽管不如真正的完整队列。
  • 降低 gc_grace_seconds 也可能是个好主意,但设置为零是不好的,因为您可能会丢失删除。
  • 是的,我把它放在 3600 的几张桌子上......在这一点上,它似乎没有造成问题,但我们必须看看它如何与 3.x 一起使用把它放在适当的位置。
  • @AlexisWilke 为您的会话表提供建议。假设您每次都将完整的会话状态写入表:通过添加一个按最新更改排序的 timeuuid 集群列来执行不可变插入,其中 timeuuid 是更新的当前时间。然后,当您想要当前会话状态时,您可以执行 LIMIT 1 并获取当前值(可能需要调整一致性级别)。要清理数据,您也可以在会话的 PK 上使用 TTL。避免你的墓碑问题和必须读取多个 SSTables 来获取最新的会话数据。
  • 实际上我认为我擅长会话,因为我总是有行键,所以我不必查询切片。我可以在一个查询中读取数据,我想墓碑在这里很好。只有它可以增长很多,我对此的担心是我达到了 Cassandra 决定停止压缩的地步,因为它有太多的墓碑。然后表格将继续永远增长......
猜你喜欢
  • 2019-05-02
  • 2019-05-25
  • 2017-02-24
  • 2019-05-25
  • 2023-03-08
  • 2015-02-25
  • 1970-01-01
  • 2017-02-09
  • 2021-02-03
相关资源
最近更新 更多