2014-10-20 65 views
2

有当谈到持续可扩展的队列,包括这一个来自DataStax网站是Cassandra是不是一个好的选择各地的许多建议:http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets基于Cassandra的队列是一种反模式。什么是解决方案?

然而,极少数地方提到的替代品。我想我可能需要一个。

具体而言,我的场景是: 有些任务(假设有100多万个需要在将来某个时候执行)。因此,每个任务都有一个关联的“runAt”属性,任务需要在其“runAt”时间段内运行(但允许有小的延迟)。当任务完成时,他们需要从队列中删除。与此同时,从现在开始到现在1年之间,任意“runAt”值都会以任意比率添加新任务(假设为100秒/秒或更多)。

一个可能的实现将利用Cassandra的能力来对一行内的列进行排序并使用读取/删除技术的一些变体(即读取队列的顶部,执行任务并将其从队列),这非常类似于所提到的反模式。

那么最有意义的是什么?尝试调整建议的解决方法,以使该特定问题按预期的规模工作?或者完全不同的技术更适合这项工作?

任何帮助/意见,将不胜感激。

回答

1

它是一种反模式的原因是因为每个删除都会导致一个逻辑删除(即压缩之前数据不会被删除)。此外,在宽限期后没有修复的情况下进行分区和随后的重组可能会导致删除的数据重新出现(例如“僵尸”)。根据您的数据速率,总体容量,群集大小,用例等,这可能是您愿意做出的折衷。

如果没有,可能看一些协调工具会更有意义。也许Zookeeper可以在这里使用。

+0

谢谢,我知道这是一个反模式的原因。看起来虽然是一种相当普遍的情况,所以我希望有一个搁置实施。 – 2014-10-22 12:34:29

+1

这是可行的,但并不容易。免责声明,我是贡献者,但这是一个基于Cassandra的队列,它不使用删除https://github.com/paradoxical-io/cassieq – devshorts 2016-02-23 03:10:06

相关问题