我知道LMDB使用写时复制策略。但是我怎样才能清理旧垃圾?我使用相同的密钥名称覆盖了该项目,我期望自动删除先前的项目数据,但似乎没有。我设置了地图大小10,485,760,并制作了一个大小为4,194,304的项目。该程序在第3次发布时因发布MDB_MAP_FULL而崩溃。
static void Main(string[] args)
{
using (LightningEnvironment env = new LightningEnvironment(@"d:\test"))
{
env.MapSize = 10485760;
env.MaxDatabases = 1;
env.Open();
using (var tx = env.BeginTransaction())
using (var db = tx.OpenDatabase("first", new DatabaseConfiguration { Flags = DatabaseOpenFlags.Create }))
{
byte[] data = new byte[1024 * 1024 * 4];
tx.Put(db, Encoding.UTF8.GetBytes("big"), data);
tx.Commit();
}
}
}
答案 0 :(得分:1)
这意味着当您尝试添加密钥时,地图大小已满。当您尝试编写元素时,Lmdb mapsize会增加,即使它是重复的。因此,捕获地图大小完整的例外,并将环境的地图大小增加约10个百分比或任何因素,并添加您要添加的元素