我有这样的问题 - 我必须每秒向磁盘写入大约10k个事件。每个事件的长度为40到200个字节,并且有一些时间戳。据我所知,许多人使用cassandra来处理这种情况。它有效 - 我可以在几年前的笔记本电脑上用1秒钟写出10k事件。
但我想知道这种情况有什么好处。我已经阅读过cassandra手册,它正在做很多我不需要的事情。
首先,它为每列和每行添加了大量元数据。然后它进行压缩,我不应该。删除行是一种复杂而耗时的方法 - 墓碑。那你需要修理......
我只需要:仅添加新行,除了时间戳范围之外的任何其他内容都不会查询。没有更新,所以我不需要压缩。然后我想删除所有早于某个时间戳的行。
我正在考虑自己将数据写入磁盘 - 但群集,复制,仲裁等可能会很棘手。
那么有没有比cassandra更适合我案例的数据库?
答案 0 :(得分:1)
你可以看看kafka,它更像是一个队列,然后是一个数据库。似乎可以按时间查询偏移量(因此您可以查询时间范围)(see FAQ)
如果您的时间范围删除要求更像是TTL卡夫卡也可能适合。 The kafka docs州:
Kafka群集保留所有已发布的消息 - 无论是否已被消费 - 在可配置的时间段内。例如,如果将日志保留设置为两天,那么在发布消息后的两天内,它可供消费,之后将被丢弃以释放空间。 Kafka的性能在数据大小方面实际上是恒定的,因此保留大量数据不是问题。
答案 1 :(得分:0)
此类数据正是ElasticSearch的用途。他们甚至有一个叫做ELK(Elastic,Logstash,Kibana)的特殊“堆栈”。您只需将JSON放在Elastic服务器集群中。
如果您使用Logstash(这不是必需的),它会将数据推送到索引,如:logstash-myapp-2015-05-07。第二天它滚动日期,你会得到每天的新索引。通过这样做,Elastic可以转储特定年龄的索引。
查询很简单,你发布更多JSON - 或者你可以使用本机(java)api。
答案 2 :(得分:0)
Apache BookKeeper非常适合仅追加数据。