如何解决在不知道确切行键的情况下在 Bigtable 中查找最新时间戳
我有一个问题,我还没有找到合适的解决方案。 我有一个行键,例如 {project}#{location}#raw#{timestamp}
我想找到具有给定前缀的最新时间戳的行。 例子: 我想找到具有指定项目和位置的最新时间戳的行。 Project1#Location1#raw#{??}
有没有办法做到这一点?
我猜最幼稚的方法是查询很长一段时间,然后在python中进行排序以找到最新的时间戳。但是我觉得比较浪费
解决方法
由于时间戳嵌入在行键本身中,因此您必须使用您在问题中提到的正则表达式:Project1#Location1#raw#{??}
来过滤记录。对于排序,您可以在此 documentation 中看到:
当 Cloud Bigtable 存储行时,它会按字典顺序按行键对它们进行排序
所以你根本不用排序,只要得到查询结果的最后一个位置,它就会是你想要的记录。
您提到您正在考虑使用 Python,在这种情况下,您可以检查 this example in the documentation 以获取行键正则表达式以了解如何获取您想要的数据,之后您所要做的就是打印 { 的最后一个位置{1}} 在那个例子中。为此,如评论中所述,您可以执行以下代码:
rows
此外,正如评论中所讨论的,如果性能对您来说是一个问题,请考虑在您的搜索中使用行前缀而不是过滤器,如here 所述。 documentation 表示使用过滤器的读取比不使用过滤器的读取慢,并且尽可能多地限制行集是提高性能的第一步,因此这可能比我之前建议的方法更好。>
,作为替代方法,考虑创建一个边表来索引时间戳。类似于 {project}#{location}#{timestamp}。这将使您能够轻松找到每个项目和位置的最新时间戳,但代价是必须维护 2 个表(2 个写入、附加数据等)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。