【问题标题】:Updating timestamp of row if exists in HBase如果 HBase 中存在,则更新行的时间戳
【发布时间】:2016-02-25 16:19:04
【问题描述】:

TL;DR:如果存在行时间戳,是否可以更新它?

是否可以让 HBase 以 LRU 方式运行?我的意思是,如果 HBase 中存在一行,我想更新它的时间戳

我知道如果创建数据不存在(例如 this)我可以调用它,但我正在寻找相反的情况,如果数据确实存在则更新数据(特别是时间戳)

想要这样做的原因是我正在开发一个组件,它使用 HBase 作为 URL 及其内容的缓存,这样当对 URL 的新请求到达时,我想检查内容是否已经存在如果是,我想更新它的时间戳,否则内容不存在,我想去实际获取它。我需要时间戳的原因是该程序的另一端,我有一个组件可以读取最后一天到达的所有 URL,这就是为什么我还需要更新此时间戳的原因

提前致谢

【问题讨论】:

  • 听起来像是checkAndMutate 的案例。它应该在hbase 0.98.7+ 中可用
  • @Shyam 有没有一种方法可以在不先使用 get 获取值然后使用另一个 put 的情况下更新时间戳?
  • 同时 checkAndMutate 检查一行中的特定值,而我只想知道该行是否存在
  • 引用javadoc "如果传递的值为null,则检查是否缺少列(即:不存在)" 。你不能依靠它的相反条件。即将一些虚拟/哨兵条件和值传递给checkAndMutate 方法,这样如果列存在,它将保持为真。 (以不那么直接的方式进行存在检查)。 *编辑:* 我是否理解正确,if(exists) "update ts" else "do something else and then update row"
  • 问题是如果该行存在我无法知道它的值将包含什么所以否定条件是不可能的 - 我可能可以添加一个我可以检查它的虚拟值但我不想在我的数据中添加额外的信息。你几乎是对的if (exists) "update ts" else "do a lot of other things that will eventually create the row" - 我有点试图将它用作 LRU 缓存(带有时间戳)。如果不够清楚,我应该编辑我的问题吗?

标签: java hbase lru


【解决方案1】:

我已经很久没有发布这个问题了,但我想我至少会接受我最终使用的东西(即使它不是我希望使用的)

我最终只是发送了一个 get 然后 put 所以时间戳会自动增加

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多