我试图在getRange中执行fdbCli命令,但是它在FDBException: Transaction is too old to perform reads or be committed中失败了,这个特殊异常的意义是什么?这是否意味着查询需要超过5秒才能完成?
发布于 2020-02-06 08:42:44
Fdb保存在5秒内启动的事务列表。此外,数据节点只保留最后5秒的版本。因此,如果读取的版本小于dataNodes保存的上一个版本,则dataNodes无法响应请求。这就是fdb抛出这个异常的原因。逃避这种例外情况的诀窍是将一大笔时间花在许多小事务上。我还注意到,如果事务时间<300 if,则fdb执行得非常好。
发布于 2022-09-15 14:39:27
首先-是的,您是正确的(您的查询需要超过5秒才能完成)。
如果读取请求的时间戳大于5秒,则存储服务器可能已经将数据从其内存中的多版本数据结构刷新到其磁盘上的单版本数据结构。这意味着存储服务器没有大于5秒的数据。因此,客户端将收到您提到的错误。
NB:您可以通过使用RecordCursor并通过向查询传递一个延续来避免这个问题。
关于延续这里的更多信息。
https://stackoverflow.com/questions/59503571
复制相似问题