Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 有可能避免卡桑德拉的墓碑问题吗?_Cassandra_Backend_Tombstone - Fatal编程技术网

Cassandra 有可能避免卡桑德拉的墓碑问题吗?

Cassandra 有可能避免卡桑德拉的墓碑问题吗?,cassandra,backend,tombstone,Cassandra,Backend,Tombstone,我正在使用Cassandra作为数据库系统为CMS编写代码 CMS的优势之一是使用后端计算机对CMS中更改的数据进行永久运行,从而预先计算各种事情 例如,CMS告诉列表系统页面已创建或更改。列表系统将该信息保存在名为list的表中。这些信息只是一行字,告诉我该在哪一页上工作 Column family: list Row: concerned website (i.e. http://www.example.com/) Column: full URI (i.e. http://

我正在使用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进行的操作相反…)

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

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


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

您实际上实现了一个队列,该队列被认为是Cassandra的反模式:


为了让自己变得更好,人们做了很多事情,但这是一个很难玩的游戏。请确保使用LeveledCompactionStrategy,而不是默认策略,这在较小的工作负载中会有很大帮助。考虑一下像时间打磨分区(旧节俭术语中的行)和上面链接的文章,但是你可能想寻找一个不同的解决方案。

如果写一个新的应用程序可能会避免节俭,它被贬低了。“ChrisLohfink,我从卡桑德拉0.8开始,但是我们正在努力用Cassandra 3.x而不是thrift获得CQL。话虽如此,我还是想知道排序的工作方式是否不同……“队列示例可能是极端的”——但这正是我们面临的问题。。。我们的sessions表也有类似的问题,尽管没有真正的满队列那么糟糕。降低gc_grace_秒数也可能是个好主意,但设置为零是不好的,因为您可能会丢失删除。是的,我将一些表的gc_grace_秒数设置为3600。。。现在看来,它似乎不会引起问题,但一旦3.x就绪,我们将不得不看看它如何与3.x配合。@Alexiswillke为您的会话表提供建议。假设您每次都将完整的会话状态写入表:通过添加一个timeuuid集群列(首先按最新更改排序),执行不可变插入,其中timeuuid是更新的当前时间。然后,当您需要当前会话状态时,可以执行限制1并获取当前值(可能需要调整一致性级别)。为了清理数据,您可能也可以在会话的PK上使用TTL。避免您的逻辑删除问题和必须读取多个SSTABLE才能获取最新的会话数据。事实上,我认为我擅长会话,因为我始终具有row键,因此不必查询切片。我可以在一个查询中读取数据,我可以想象墓碑在这里是好的。只有它能长很多,我担心这一次我会达到一个点,卡桑德拉决定停止压缩,因为它有太多的墓碑。然后桌子将永远继续增长。。。