我们有一个整理工作,可以在RIAK DB(Bitcask)中搜索(使用SOLR)记录,对其进行一些处理,然后从RIAK中删除单个记录。
乔布斯的伪代码看起来像这样
// Search all document, process and delete
LIMIT = 1000
WHILE TRUE
PAGE = 0
LOOP DO
// exported -> is a boolean field with true/false value
// start_stamp is a datetime field
KEYS = RIAK.search "exported:true",SORT: 'start_stamp asc' LIMIT: LIMIT, OFFSET: OFFSET
BREAK RECORD_EMPTY? // START ALL OVER AGAIN
FOR key in RECORDS DO
RIAK.GET key
// Do some processing ...
RIAK.DELETE key
END
PAGE++
OFFSET = LIMIT * PAGE
END
END
在这里我有几件事要了解和理解。
[a]为什么SOLR(搜索)返回STALE(有时)在搜索中记录。
有时,我看到SOLR搜索返回了一个密钥,该密钥已在 先前或更早的迭代。为什么会这样呢?以及如何解决 那?
[b]即使删除了记录,也无法声明磁盘空间
我知道RAIK使用了大量DISK空间,但是即使删除对象后 我无法声明系统中的空间(已删除记录先前占用的空间)。
此外,如果有人可以解释这一点...
为了方便起见,假设我使用的RIAK最终与3保持一致 假设情况为
[a]
的群集中的节点,其中客户端查询R = 2的读取请求(参见here)。并给定1个节点 包含删除记录(归咎于最终一致性:))和 假设节点认为其他节点没有什么记录not_found=true
此外,如果2个节点具有不同版本的数据(即 给定节点尚未收到该对象的副本),在这种情况下RIAK会返回什么。