我们正在建立一个系统,需要将大量数据放入一些持久存储中一段固定的时间--30到60天。由于数据并不重要(例如,当虚拟机出现故障时,我们可能会丢失一些数据)并且我们不想为每次请求付出代价(延迟对我们来说至关重要),我们正在考虑缓冲和放大。批量处理数据或以异步方式发送。
数据仅附加,我们需要每个请求持续2-3个项目,系统进程在多个主机上水平扩展~10k rps。
我们在选择Mongo(3.x?)或Cassandra之间犹豫不决,但我们可以选择任何其他解决方案。这里有没有人有解决这类问题的经验或暗示?我们正在运行一些PoC,但我们可能无法尽早找到所有问题,而且枢轴可能代价高昂。
答案 0 :(得分:1)
我无法评论MongoDB,但我可以和Cassandra交谈。 Cassandra确实有一个TTL功能,您可以在一段时间后使数据到期。你必须计划它,因为TTL会在Cassandra运行的过程中增加一些开销,称为“压缩” - 请参阅: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真的很擅长 - 比如时间序列,产品目录,点击流数据,ETC。
如果您不熟悉Patrick 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/
的尖锐人物