如何使用couchbase Java SDK获取使用Arrays.asList(remove())删除的元素详细信息?
我正在尝试实现一种高度并发的访问模式,在这种模式中,每个请求在执行get时都应该获得一个唯一的文档。 我不能使用N1QL,而且我没有钥匙。 我实现了一个文档数组和as如何使用couchbase Java SDK获取使用Arrays.asList(remove())删除的元素详细信息?,java,couchbase,Java,Couchbase,我正在尝试实现一种高度并发的访问模式,在这种模式中,每个请求在执行get时都应该获得一个唯一的文档。 我不能使用N1QL,而且我没有钥匙。 我实现了一个文档数组和as数组。asList(remove(0))是一个线程安全调用,每个并行线程都应该能够删除数组的第0个滚动元素,确保没有两个线程删除相同的元素。 这在并发线程中运行良好。然而,现在的问题是,由于每个线程也希望使用检索到的文档内容,所以我没有看到任何方法来反序列化删除的元素并读取内容。 Remove调用不会返回元素本身 如有任何指导/指示
数组。asList(remove(0))
是一个线程安全调用,每个并行线程都应该能够删除数组的第0个滚动元素,确保没有两个线程删除相同的元素。
这在并发线程中运行良好。然而,现在的问题是,由于每个线程也希望使用检索到的文档内容,所以我没有看到任何方法来反序列化删除的元素并读取内容。
Remove调用不会返回元素本身
如有任何指导/指示,将不胜感激
以下是我的代码片段:
MutateInResult resultset=collection.mutateIn(“TestDoc”,Arrays.asList(remove(“[0]”));
谢谢
导航此功能(返回已删除的内容)以前已被请求过,并按以下方式跟踪。关于这个问题的评论解释了为什么它不是原始设计的一部分
在解决该问题之前,您需要先使用lookupIn
获取值,然后再将其删除(使用lookupIn
结果中的CAS值,并在CAS不匹配时重试)。中有一个此技术的示例,尽管该特定代码可能会在应用程序实际处理该项之前将其从数据库中删除
我不知道有什么简单的方法可以确保每个数组元素只由一个线程处理。如果您确保在删除元素之前对其进行了处理,则它可能由多个线程处理。另一方面,如果在处理元素之前删除该元素,则可以确保它最多由一个线程处理,但如果在删除元素之后和处理之前出现应用程序故障,则有可能由零线程处理该元素