删除不适用于aerospike持久存储的记录

时间:2016-03-03 07:55:04

标签: python aerospike

我正在使用Aerospike的持久存储。下面是相同的配置。当我使用:

删除密钥时,我正在使用python客户端
client.remove(key)

数据被删除。现在,当我重新启动服务器时,数据又回来了。是它应该如何工作还是我做错了什么?

配置文件:

namespace xxx {
    replication-factor 2
    memory-size 2G
    default-ttl 60d # 5 days, use 0 to never expire/evict.


    # To use file storage backing, comment out the line above and use the
    # following lines instead.
    storage-engine device {
            file /opt/aerospike/data/xxx.dat
            filesize 4G
            data-in-memory true # Store data in memory in addition to file.
            write-block-size 128K
    }

}

是否有解决办法?

1 个答案:

答案 0 :(得分:4)

我在Aerospike工作,并且在路线图上解决了这种问题。

这是预期的。当发生删除时,将从索引中删除对记录的引用,但记录本身仍保留在写入块中,直到该写入块被新数据重写为止。当发生冷启动并从磁盘读取数据时,尚未重写的块可能已删除已读取的记录,并且系统无法知道这些记录是否已删除。所以删除的数据可以回来。

这将在此详细讨论:

https://discuss.aerospike.com/t/expired-deleted-data-reappears-after-server-is-restarted/470

请注意,这只是在Aerospike冷启动时,在某些情况下可以进行暖启动,删除的数据不会重新出现。