我们有Aerospike服务器版本3.8.3(支持LDT)

我们收到以下异常-

2018-08-01 16:11:31,558 1320573 [task-scheduler-3] ERROR o.s.a.i.SimpleAsyncUncaughtExceptionHandler [SimpleAsyncUncaughtExceptionHandler.java:37] - Unexpected error occurred invoking async method 'public void com.MyClassNameService.storeCurrentBalance(java.lang.String,java.util.Date)'.
com.aerospike.client.AerospikeException: Error Code 1500: /opt/aerospike/sys/udf/lua/ldt/lib_lmap.lua:2620 LDT-Not Enabled on Namespace


在此行lmap.put()-

Key key = new Key(aeroconf.getHistoryNamespace(), setName, owner);
        LargeMap lmap = client.getLargeMap(null, key, binName, null);
        //Some processing here..
        lmap.put(Value.get(mapKey), Value.get(monthlyScoreHistory));


即使在aerospike.conf中在名称空间级别设置了ldt-enabled true,上述情况仍在发生。

最佳答案

LMap在server release 3.5.2中被声明为已弃用,而在3.8.3中,您仅剩下LList。

您应该改为使用非LDT Map API。使用Aerospike database 4.2时,您还具有8MB write-block-size的限制,这应该绰绰有余,尽管您将需要在每个节点上有足够的内存来处理此类块的缓冲并加载那些可能非常大的记录。从性能的角度来看,拥有多MB记录也不是一个好主意,但是它绝对比LMap情况具有更高的性能,因此这不应成为迁移的障碍。

10-04 18:08