2013-02-07 81 views
3

我已经想到两个方法,我真的不喜欢:如何检查Couchbase中是否存在密钥?

  1. 电话触摸(键,NULL)内部在try..catch ..从 闭锁段返回false。但后来我改变了TTL这是不是对我好 。
  2. 电话加(键,值)内部在try..catch ..并返回 从闭锁段错误 - 该缺陷的效率,因为我 必须删除他们键入我刚刚加入不必要的。

顺便说一句,我的环境是PHP。

有什么建议吗?

谢谢!

回答

0

一个简单的办法,是做一个GET(键);如果该键存在,则返回该值,否则操作返回null。

它是确定您的应用程序?

注意,因为所有的钥匙都在内存中是一样快当钥匙的存在与否做一个GET。

+0

但如果什么密钥的值为空?密钥存在但其值为空。 – avivklas

+2

或者,值可能是兆字节大小;也许你不想不必要地拉它。 –

0

检查到这个例子,从couchbase

#retrieve the last access date/time of the script. 
    #the key name is is the script name prefixed with DATE:: 
    $last_access_date=$cb_obj->get("DATE::" . $script_name); 

    #handle the case where this is the first access to the script 
    #and that key doesn't yet exist 
    if($last_access_date == NULL){ 
    $last_access_date = "never"; 
    } 

Article Link

0

我失去了一个简单的Exists成员以及拍摄。

在.Net客户端中,您有client.TryGet,但它仍然会将该项目取出,当它返回false时,它并不意味着它不存在,只是它无法将其拉出(只是试图执行它与我的节点关闭)。

同样对于.NET客户端,但ExecuteGet会给你一个IGetOperationResult将暴露e.g HasValue,但在实际值再次拉低。

使用视图?也许有点肮脏,但你可以有一个视图只返回Ids,这将消除检索文档的需要。不知道它是否真的会表现更好。

相关问题