2015-11-05 69 views
2

我们正在构建一个系统,需要将大量数据放入持久存储器中一段固定时间 - 30至60天。由于数据并不重要(例如,当虚拟机停机时我们可能会丢失一些数据),并且我们不希望为每个请求付出坚持的代价(延迟对我们至关重要),因此我们正在考虑缓冲&批处理数据或以异步方式发送。带TTL的最佳海量数据持久存储?

数据只能追加,我们需要每个请求持续2-3项,系统进程~10k rps在多个主机上水平缩放。

我们在选择Mongo(3.x?)或Cassandra之间犹豫,但我们可以与任何其他解决方案。这里有没有人有解决这类问题的经验或暗示?我们正在运行一些PoC,但我们可能无法及早发现所有问题,并且支出可能会很昂贵。

回答

1

我无法对MongoDB发表评论,但我可以与Cassandra交谈。卡桑德拉确实有一个TTL功能,您可以在一段时间后过期数据。你必须做好应对措施,但因为TTL的做在处理过程中卡桑德拉运行名为“压缩”增加一些开销 - 见:http://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_write_path_c.html

和:http://docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html

只要你大小那种工作量,你应该好的。话虽如此,Cassandra在事件驱动的数据方面确实非常出色 - 例如时间序列,产品目录,点击流数据等。

如果你不熟悉帕特里克McFadin,满足你最好的朋友:https://www.youtube.com/watch?v=tg6eIht-00M

当然并且,大量的免费教程和培训在这里:https://academy.datastax.com/

编辑补充的多一个想法以'安全'的方式过期数据,并且花费最少。这是一个名叫Ryan Svihla的尖锐人物完成的https://lostechies.com/ryansvihla/2014/10/20/domain-modeling-around-deletes-or-using-cassandra-as-a-queue-even-when-you-know-better/

+0

谢谢,我们实际上混合在ElastiSearch中,因为我们可能不得不创建一些使用任意字段的查询,但是您的回答非常有用。 – deadsimple