【问题标题】:How to store microsecond level timestamps in cassandra?如何在 cassandra 中存储微秒级时间戳?
【发布时间】:2016-04-16 07:23:01
【问题描述】:

我正在尝试将数据存储在包含微秒级时间戳的 cassandra 中。 Cassandra 的文档说 'timestamp' 数据类型可以存储自纪元以来的毫秒数,但互联网上的一些消息似乎暗示 cassandra 可以原生存储微秒时间戳。

在 cassandra 中存储微秒级时间的最佳方法是什么?我应该省略日期部分并存储很长时间吗?

我正在尝试使一个看起来像这样的柱子疼痛: 2015-11-18 07:30:46.700824

我收到以下错误:

ErrorMessage code=2200 [Invalid query] message="unable to coerce '2015-11-18 07:30:18.261543' to a formatted date (long)"

在记录 #1 处中止导入。之前插入的记录仍然存在,之后的一些记录也可能存在。

我的 cassandra 版本: [cqlsh 5.0.1 |卡桑德拉 2.1.11 | CQL 规范 3.2.1 |原生协议 v3]

编辑: 这是 Cassandra 自己的文档中的微秒混淆示例:

“CAS 和 CQL 中的新功能(例如 DROP COLUMN)假定单元时间戳为微秒-since-epoch”

https://docs.datastax.com/en/upgrade/doc/upgrade/cassandra/upgradeChangesC_c.html

另一个:https://issues.apache.org/jira/browse/CASSANDRA-8297

编辑2: 我应该提到我打算使用 spark 来查询这个。据我了解,spark 会解析自己的 sql 风格并将其转换为 cassandra(尽管我在 zeppelin 中使用 CassandraContext)。有什么可能有助于或阻碍我搜索微秒级时间图的吗?

【问题讨论】:

  • 这里有两个不同的概念:将时间戳存储在“列”中,以及 Cassandra 在内部使用的时间戳“标签”(主要用于节点同步和插入/更新插入)。

标签: cassandra


【解决方案1】:

您可以使用 bigint 或 timeuuid。类型 1 uuid 的精度为 100ns,因此它可以覆盖您。一些实用程序、库、便利函数可能无法满足您的需求,因此请准备好编写一些 uuid 函数。

【讨论】:

  • 有趣。 timeuuids 是否需要跨行唯一?因为在我的数据中,它们可能不是。
  • "timeuuids 是否需要跨行唯一?" - 不,如果我正确理解您的问题。如果使用它作为分区键,或者数据在同一个分区中的行键,它会。如果您需要它的唯一性,通常可以使用次精度部分来提供唯一性。它还包括生成它的服务器的 mac 地址(或 ip 地址 + jvm 静态随机数,取决于实现),它提供了额外的。虽然这样每台服务器每微秒只能有 10 个唯一身份。
  • 我的意思是,就我拥有的数据量而言,肯定会有 许多 个实例,其中多个条目具有相同的时间戳。 “UUID”专门用于唯一标识符(不特定于 cassandra)。想知道如果我使用 timeuuid 来存储我的时间数据,我是否会在以后注册惊喜。
  • type 1 timeuuid 本质上是一个 100ns 精度的时间戳 + 一个唯一的“节点”标识符(通常是 mac 地址)。只需要在设计时牢记这一点。 en.wikipedia.org/wiki/…
猜你喜欢
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2014-04-07
  • 1970-01-01
  • 2019-06-11
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多