【问题标题】:append only log/event database仅附加日志/事件数据库
【发布时间】:2018-12-29 12:03:53
【问题描述】:

我遇到了这样的问题 - 我必须每秒向磁盘写入大约 10k 个事件。每个事件的长度为 40 到 200 个字节,并且有一些时间戳。据我了解,很多人在这种情况下使用 cassandra。而且它有效 - 我可以在我几年前的笔记本电脑上在大约 1 秒内编写 10k 个事件。

但我想知道这种情况有什么更好的。我已经阅读了 cassandra 手册,它正在做很多我不需要的事情。

首先,它为每一列和每一行添加了大量元数据。然后它会进行我不需要的压实。删除行有点复杂且耗时 - 墓碑。那你需要修理...

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

我正在考虑自己将数据写入磁盘 - 但集群、复制、仲裁等可能会很棘手。

那么有没有比 cassandra 更适合我的数据库?

【问题讨论】:

  • 如果你使用 TTL,那么你可以让数据过期而不删除。如果您只使用 TTL 而没有在任何地方删除,那么您可以避免墓碑。您可以查看另一条评论中提到的 DTCS

标签: database cassandra


【解决方案1】:

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

如果您的时间范围删除要求更像 TTL kafka 也可能适合。 The kafka docs状态:

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

【讨论】:

  • 谢谢,我去看看。现在我正在考虑将事件保存到hdfs中。无论如何我都想使用 hadoop。
  • 在 cassandra 中可能有趣的另一件事是相对较新的 DateTieredCompactionStrategy,它可以减轻您在 cassandra 中为您的用例发现的一些缺点DTCS ind cassandra docs
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这种类型的数据正是ElasticSearch 的用途。他们甚至有一个特殊的“堆栈”,称为 ELK(Elastic、Logstash、Kibana)。您只需将 JSON 扔到 Elastic 服务器集群即可。

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 2017-04-04
      • 1970-01-01
      • 2019-07-13
      • 2011-05-08
      • 2019-01-29
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多