gpt4 book ai didi

scylla - 从 scylla 中选择时如何保证单调增加 timeuuid

转载 作者:行者123 更新时间:2023-12-03 23:07:45 31 4
gpt4 key购买 nike

我有一个以 timeuuid 作为聚类键的表。

CREATE TABLE event (
domain TEXT,
createdAt TIMEUUID,
kind TEXT,
PRIMARY KEY (domain, createdAt)
);

我希望按此聚类键的顺序选择数据并提供以下保证 - 如果我选择了某些内容,将来这些记录之前将不会有任何插入(因此我可以遍历记录检查新发生的事情,而不会跳过任何事件)
SELECT kind FROM event WHERE domain = ? AND createdAt > lastCreatedAtWeAreAwareOf
如果我在客户端生成 timeuuid 并使用并行插入到 scylla,那么从技术上讲,最近的 timeuuid 可能会在几个较旧的之前先插入(比如由于某些网络问题),我可能会错过我选择中的那些记录。

有什么可能的方法来解决这个问题?

我尝试使用 currentTimeUUID功能,它似乎工作(在同一个分区键内单调增加)但创建了很多重复项(每个相同的分区键 20-40 个重复项),即我最终得到了很多完全相同的记录 currentTimeUUID (我真的很想要一种避免重复的方法,它会使选择过程复杂化并消耗不必要的资源)

我也很好奇在使用 currentTimeUUID 时是否存在时钟向后跳转的威胁功能?

最佳答案

已编辑

似乎 Scylla 中存在一个错误,即 currentTimeUUID 总是为使用相同协调器同时完成的写入生成重复项。我创建了一个问题 here .感谢您提出这个问题。

以前的回答如下

If I generate timeuuid on client and use parallel insert to scylla it's technically possible that recent timeuuid will get inserted first before several older(say due to say some networking issue) and I might miss those records in my selects.



只是为了澄清,所有写入都将以正确的顺序存储。在某个时间点,您将能够以正确的顺序读取足够旧的写入。这意味着一种可能的解决方案是确保 select 不会查询太近的数据。因此,为“迟到”的写入留下了一个窗口,以便它们到达并在队列中占据一席之地。例如,您可以使用这样的选择:
SELECT kind FROM event WHERE domain = ? AND createdAt > lastCreatedAtWeAreAwareOf AND createdAt < now() - 30s
我不知道你是否可以强加这样的延迟。这种策略不能完全确定,因为所有延迟超过 30 秒的写入都将被错过。

I tried using currentTimeUUID function and it seems to work(monotonically increasing within the same partition key) but creates a lot of duplicates(20-40 duplicates per the same partition key), I.e I end up with lots of records with exactly the same currentTimeUUID(I would really like a way to avoid duplicates, it complicates the select process and consumes unnecessary resources)



您可以通过引入额外的集群键列来减少集群键重复的机会,例如:
CREATE TABLE event (
domain TEXT,
createdAt TIMEUUID,
randomBit UUID/int,
kind TEXT,
PRIMARY KEY (domain, createdAt, randomBit)
);

并以某种好的随机方式在客户端为其生成值(value)。也许您知道记录的某些方面保证是唯一的,并且可以用作集群键列。它会比随机场更好。

关于scylla - 从 scylla 中选择时如何保证单调增加 timeuuid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61223391/

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