Aerospike: Failed to store record. Error: (13L, 'AEROSPIKE_ERR_RECORD_TOO_BIG', 'src/main/client/put.c', 106)

Aerospike: Failed to store record. Error: (13L, 'AEROSPIKE_ERR_RECORD_TOO_BIG', 'src/main/client/put.c', 106)

我在将数据存储到 aerospike (client.put) 时收到以下错误。我的驱动器上有足够的 space。

Aerospike: Failed to store record. Error: (13L, 'AEROSPIKE_ERR_RECORD_TOO_BIG', 'src/main/client/put.c', 106).

这是我的 Aerospike 服务器名称space 配置

namespace test {
       replication-factor 1
       memory-size 1G
       default-ttl 30d # 30 days, use 0 to never expire/evict.


       storage-engine device {
               file /opt/aerospike/data/test.dat
               filesize 2G
               data-in-memory true # Store data in memory in addition to file.
       }
}

默认情况下,命名空间的 write-block-size 为 1 MiB。这也是最大可配置大小,并将限制应用程序能够写入 Aerospike 的最大对象大小。

如果您需要超过 1 MiB,请参阅 Large Data Types 作为可能的解决方案。

更新 2019/09/06

自 Aerospike 3.16 起,写入块大小限制已从 1 MiB 增加到 8 MiB。

是的,但不幸的是,Aerospike 已弃用 LDT (https://www.aerospike.com/blog/aerospike-ldt/). They now recommend to use Lists 或地图,但如他们的 post 所述:

"the new implementation does not solve the problem of the 1MB Aerospike database row size limit. A future key feature of the product will be an enhanced implementation that transcends the 1MB limit for a number of types"

换句话说,将数据存储在SSD或HDD上仍然是一个未解决的问题。但是,您可以在内存命名空间上存储更大的数据。