0

Java 客户端源

函数选择有索引:

public java.util.List select(int space, int index, java.lang.Object key, int offset, int limit, int iterator)

但是只给定空间和键替换、更新和删除:

public java.util.List delete(int space, java.lang.Object key)
4

1 回答 1

1

删除是在主键上执行的,因此它是一个原子操作,因为主键强制执行唯一性。二级索引可能是唯一的,但也可能不是唯一的,因此您需要启动事务以确保非唯一二级索引键的原子性。这就是为什么在 Java 的二级索引上还没有删除/更新/插入的原因。如果 tarantool 允许远程启动事务,这是一个很好的问题,但我怀疑它是否有用。

因此,您需要执行以下操作才能使其正常工作:

  1. 在 Lua 中编写一个存储过程来迭代你的索引/选择你需要的值
  2. 将您编写的程序放入您的 Tarantool 实例中
  3. 通过名称从您的 Java 代码中调用它,使用public List call(String var1, Object... var2);

例如

    -- Lua function
    function deleteFromSpaceByUniqueSecondaryIndex(secondaryId)
        box.space.YourSpace.index.yourSecondaryIdx:delete(secondaryId)
    end

......

    //call it from Java like that
    tarantoolConn.call("deleteFromSpaceByUniqueSecondaryIndex", secondaryId);
于 2016-09-23T13:09:27.360 回答