LMDB覆盖了键值但MDB_MAP_FULL

时间:2018-03-28 08:11:12

标签: c# lmdb

我知道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();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这意味着当您尝试添加密钥时,地图大小已满。当您尝试编写元素时,Lmdb mapsize会增加,即使它是重复的。因此,捕获地图大小完整的例外,并将环境的地图大小增加约10个百分比或任何因素,并添加您要添加​​的元素