是否有可能避免 Cassandra 的墓碑问题?
Is it possible to avoid tombstone problems with Cassandra?
我正在为使用 Cassandra 作为数据库系统的 CMS 编写代码。
CMS 的优势之一是使用后端计算机预先计算各种事物,该后端计算机针对 CMS 中发生变化的数据永久运行。
例如,CMS 告诉列表系统页面已创建或更改。列表系统将该信息保存在名为 list
的 table 中。该信息只是一行,告诉我必须处理哪个页面。
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
table 作为 TODO 列表。我必须处理的一组页面。因此,前端将页面引用添加到该列表,后端在完成后将其删除。结果,我可以在 list
table 中得到大量的墓碑。现实世界的影响:我有墓碑故障,系统开始在 随机 个地方出现故障。一旦列表停止工作,系统中的许多其他东西将停止工作,网站将变得无法使用。
我减少了 Cassandra 处理特定 table(以及其他一些)中的墓碑所需的时间,但我想知道我是否按预期使用 Cassandra。在这种环境下是否有更好的方法来处理此类 TODO 列表?
附带说明:TODO 列表可以在各种不同的后端计算机上处理。在小型系统上,您可能只有一个后端 运行 来处理列表数据,在拥有数千名用户的大型系统上,您不太可能有 2 或 3 个后端来处理列表。所以在Cassandra中拥有数据对于在计算机之间快速共享它是非常实用的。
你基本上实现了一个队列,它被认为是 cassandra 的反模式:
http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets
有些变通办法和人们做的事情可以让他们变得更好,但这是一个很难玩的游戏。请务必使用 LeveledCompactionStrategy 而不是默认值,这对较小的工作负载有很大帮助。考虑一些变通办法,例如对分区进行时间装箱(旧的 thrift 术语中的行)以及上面链接的文章中的内容,但您可能想要寻找不同的解决方案。
我正在为使用 Cassandra 作为数据库系统的 CMS 编写代码。
CMS 的优势之一是使用后端计算机预先计算各种事物,该后端计算机针对 CMS 中发生变化的数据永久运行。
例如,CMS 告诉列表系统页面已创建或更改。列表系统将该信息保存在名为 list
的 table 中。该信息只是一行,告诉我必须处理哪个页面。
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
table 作为 TODO 列表。我必须处理的一组页面。因此,前端将页面引用添加到该列表,后端在完成后将其删除。结果,我可以在 list
table 中得到大量的墓碑。现实世界的影响:我有墓碑故障,系统开始在 随机 个地方出现故障。一旦列表停止工作,系统中的许多其他东西将停止工作,网站将变得无法使用。
我减少了 Cassandra 处理特定 table(以及其他一些)中的墓碑所需的时间,但我想知道我是否按预期使用 Cassandra。在这种环境下是否有更好的方法来处理此类 TODO 列表?
附带说明:TODO 列表可以在各种不同的后端计算机上处理。在小型系统上,您可能只有一个后端 运行 来处理列表数据,在拥有数千名用户的大型系统上,您不太可能有 2 或 3 个后端来处理列表。所以在Cassandra中拥有数据对于在计算机之间快速共享它是非常实用的。
你基本上实现了一个队列,它被认为是 cassandra 的反模式: http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets
有些变通办法和人们做的事情可以让他们变得更好,但这是一个很难玩的游戏。请务必使用 LeveledCompactionStrategy 而不是默认值,这对较小的工作负载有很大帮助。考虑一些变通办法,例如对分区进行时间装箱(旧的 thrift 术语中的行)以及上面链接的文章中的内容,但您可能想要寻找不同的解决方案。