Database 仅追加日志/事件数据库

Database 仅追加日志/事件数据库,database,cassandra,Database,Cassandra,我有这样一个问题-我必须每秒向磁盘写入大约10k个事件。每个事件的长度为40到200字节,并且有一些时间戳。据我所知,许多人使用卡桑德拉来处理这种情况。它还能工作——我可以在几年前的笔记本电脑上在大约1秒的时间内写出10k的事件 但我想知道还有什么比这更好的办法吗。我读过卡桑德拉手册,它做了很多我不需要的事情 首先,它为每一列和每一行添加了大量元数据。然后,它使我不需要的压缩。删除行是一种复杂而耗时的工作——墓碑。然后你需要修理 我所需要的是:只追加新行,除了时间戳范围之外,不查询任何其他内容。

我有这样一个问题-我必须每秒向磁盘写入大约10k个事件。每个事件的长度为40到200字节,并且有一些时间戳。据我所知,许多人使用卡桑德拉来处理这种情况。它还能工作——我可以在几年前的笔记本电脑上在大约1秒的时间内写出10k的事件

但我想知道还有什么比这更好的办法吗。我读过卡桑德拉手册,它做了很多我不需要的事情

首先,它为每一列和每一行添加了大量元数据。然后,它使我不需要的压缩。删除行是一种复杂而耗时的工作——墓碑。然后你需要修理

我所需要的是:只追加新行,除了时间戳范围之外,不查询任何其他内容。没有更新,所以我不需要压缩。然后我想删除所有比某个时间戳早的行

我曾考虑自己将数据写入磁盘,但集群、复制、quorums等可能很棘手


那么,有没有比卡桑德拉更适合我的情况的数据库呢?

你可以看看卡夫卡,它更像是一个队列,而不是一个数据库。似乎可以按时间查询偏移量(因此可以查询时间范围)()

如果您的时间范围删除要求更像TTL,那么卡夫卡也可能适合。声明:

Kafka集群保留所有已发布的消息,无论它们是否已在可配置的时间段内被使用。例如,如果日志保留时间设置为两天,则在消息发布后的两天内,它可供使用,之后将丢弃以释放空间。Kafka的性能在数据大小方面实际上是恒定的,因此保留大量数据不是问题


这种类型的数据正是它的用途。他们甚至有一个特殊的“堆栈”称为麋鹿(弹性,Logstash,Kibana)。您只需在弹性服务器集群中抛出JSON

如果您使用Logstash(这不是必需的),它会将数据推送到一个索引中,如:Logstash-myapp-2015-05-07。第二天,它滚动日期,你每天都会得到一个新的索引。通过这样做,Elastic可以转储特定时间段的索引


查询很简单,您可以发布更多的JSON,也可以使用本机(java)api。

针对实时数据存储进行了优化,非常适合只附加数据

谢谢,我去看看。现在我正在考虑将事件保存到hdfs中。不管怎样,我还是想使用hadoop。cassandra中另一个可能很有趣的东西是相对新的DateTieredCompactionStrategy,它可以减轻您在cassandra中发现的对您的用例的一些不利影响。如果您使用TTL,那么您可以使数据过期而不删除。如果您只使用TTL而不删除任何地方,那么您可以避免删除墓碑。您可以查看另一条评论中提到的DTC