使用 TTL 的最佳海量数据持久存储?

Best massive data persistent storage with TTL?

我们正在构建一个系统,该系统需要将大量数据放入某个持久存储中一段固定的时间 - 30 到 60 天。由于数据并不重要(例如,当虚拟机出现故障时,我们可能会丢失一些数据)并且我们不想为每次请求都保留数据而付出代价(延迟对我们来说至关重要),我们正在考虑缓冲和批处理数据或以异步方式发送。

数据仅附加,我们需要为每个请求保留 2-3 个项目,系统进程在水平扩展的多个主机上约为 10k rps。

我们在选择 Mongo(3.x?)还是 Cassandra 之间犹豫不决,但我们可以选择任何其他解决方案。这里有人有解决此类问题的经验或提示吗?我们是 运行 一些 PoC,但我们可能无法及早发现所有问题,而且 pivot 可能代价高昂。

我无法对 MongoDB 发表评论,但我可以与 Cassandra 交谈。 Cassandra 确实具有 TTL 功能,您可以在特定时间后使数据过期。你必须为此做好计划,因为 TTL 确实会在 Cassandra 运行的名为 'compaction' 的进程中增加一些开销 - 请参阅: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 真的很出色——比如时间序列、产品​​目录、点击流数据等。

如果您不熟悉 Patrick McFadin,认识一下您最好的新朋友:https://www.youtube.com/watch?v=tg6eIht-00M

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

编辑以添加一种过期数据的想法 'safely' 并且开销最少。这是一个名叫 Ryan Svihla 的聪明人完成的 https://lostechies.com/ryansvihla/2014/10/20/domain-modeling-around-deletes-or-using-cassandra-as-a-queue-even-when-you-know-better/