gpt4 book ai didi

cassandra - 在 Cassandra 中设计时间序列数据库

转载 作者:行者123 更新时间:2023-12-04 20:12:04 24 4
gpt4 key购买 nike

我正在考虑创建一个 Cassandra 时间序列数据库来存储数百万个日常数据系列,这些数据可能总共有 100B 个数据点。

我看了这篇文章:
http://rubyscale.com/blog/2011/03/06/basic-time-series-with-cassandra/

这个设计非常合理。因此,基本上我可以将每日时间戳作为列,并在必要时通过将日期附加到行来对列进行分片。

我有两个问题:

  • 我正在考虑存储多达 20,000 个带时间戳的(每日)列。甚至有必要通过例如对行进行分片。一年有这么多列?对行进行分片以将列数减少到每年 365 是否有任何优势/劣势。
  • 我的另一个想法是每年创建列族而不是逐行分列。这样在访问多年的数据时,我将不得不查询多个列族而不是一个列族并在客户端连接结果。这种方法会加快速度还是减慢一切速度?
  • 最佳答案

    如果您打算管理大量写入,那么您的方法存在一个问题。

    始终写入 1 个键意味着对该键的所有写入都将转到一个节点。基本上,您每天将使用集群外的一个节点,因此您不妨拥有一个巨大的 Cassandra 实例,而不必费心设置集群。
    如果您的写入频率非常高,您可能会关闭负责当天/ key 的节点。

    我的建议是将一天分成同时使用的多行。时间分桶可能是危险的,因为一个桶中的突然激增可能会导致一切下降。

    您可以像这样创建您的存储桶(行键):

  • [ROW_BASE_NAME] + [DAY] + someHashFunction(timestamp) % 10
  • [ROW_BASE_NAME] + [DAY] + random.nextInt(10)
  • [ROW_BASE_NAME] + [DAY] + nextbucket <--- 也就是说,如果您有一种安全的方式自己旋转存储桶

  • 有很多方法可以做到。您还可以使用正在保存的列的某些元素来执行此操作。
    但我认为这样做很重要,以便始终利用整个 cassandra 集群。

    我的答案仅适用于写入繁重的应用程序/功能,因为您必须使用 multi_get(多个键整行读取)来读取所有数据并重新构建当天的整个时间线。

    关于cassandra - 在 Cassandra 中设计时间序列数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16037250/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com