小编MeP*_*uck的帖子

在支持关系操作的 PostgreSQL 中替代 Cassandra 的 TimeUUID

我需要将一个表从 Cassandra 迁移到 PostgreSQL。

我需要迁移的内容:该表有一个 TimeUUID 列,用于将时间存储为 UUID。此列还用作聚类键。时间存储为 UUID,以避免在同一毫秒内插入行时发生冲突。此外,此列通常包含在 where 子句中,timeUUID between 'foo' and 'bar'并且会产生正确的结果。

我需要将它迁移到哪里:我要迁移到 Postgres,因此需要找到合适的替代方案。PostgreSQL 具有 UUID 数据类型,但从我到目前为止所阅读和尝试的内容来看,它将其存储为 4 字节 int,但是当在具有关系运算符的 where 子句中使用时,它将 UUID 处理为类似于 String。

select * from table where timeUUID > 'foo'xyz结果中会有。

根据我的理解,UUID 甚至 TimeUUID 都没有必要一直增加。因此,与具有相同数据集的 Cassandra 相比,Postgres 会产生错误的结果。

到目前为止我所考虑的:我考虑将它存储为 BIGINT,但它会受到以毫秒为单位的时间分辨率的冲突。我可以达到 mirco/nano 秒的分辨率,但我担心 BIGINT 会耗尽它。

将 UUID 存储为 CHAR 将防止冲突,但随后我将失去在列上应用关系运算符的能力。

TIMESTAMP 最合适,但我担心时区和冲突。

我到底需要什么(tl;dr)

  1. 某种具有更高时间分辨率或避免冲突的方法(生成唯一值)。

  2. 该列应支持关系运算符,即 uuid_col < 'uuid_for_some_timestamp'.

PS:这是一个Java应用程序。

database postgresql uuid cassandra

3
推荐指数
1
解决办法
972
查看次数

标签 统计

cassandra ×1

database ×1

postgresql ×1

uuid ×1