【发布时间】:2016-02-25 16:19:04
【问题描述】:
TL;DR:如果存在行时间戳,是否可以更新它?
是否可以让 HBase 以 LRU 方式运行?我的意思是,如果 HBase 中存在一行,我想更新它的时间戳
我知道如果创建数据不存在(例如 this)我可以调用它,但我正在寻找相反的情况,如果数据确实存在则更新数据(特别是时间戳)
想要这样做的原因是我正在开发一个组件,它使用 HBase 作为 URL 及其内容的缓存,这样当对 URL 的新请求到达时,我想检查内容是否已经存在如果是,我想更新它的时间戳,否则内容不存在,我想去实际获取它。我需要时间戳的原因是该程序的另一端,我有一个组件可以读取最后一天到达的所有 URL,这就是为什么我还需要更新此时间戳的原因
提前致谢
【问题讨论】:
-
听起来像是
checkAndMutate的案例。它应该在hbase0.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 缓存(带有时间戳)。如果不够清楚,我应该编辑我的问题吗?