示例#1
0
        public async Task Rebuild_Large_Files()
        {
            // do some tests
            async Task DoTestAsync(ILiteDatabaseAsync db, ILiteCollectionAsync <Zip> col)
            {
                Assert.Equal(1, await col.CountAsync());
                Assert.Equal(99, db.UserVersion);
            };

            using (var file = new TempFile())
            {
                using (var db = new LiteDatabaseAsync(file.Filename))
                {
                    var col = db.GetCollection <Zip>();

                    db.UserVersion = 99;

                    await col.EnsureIndexAsync("city", false);

                    var inserted = await col.InsertAsync(DataGen.Zip());           // 29.353 docs

                    var deleted = await col.DeleteManyAsync(x => x.Id != "01001"); // delete 29.352 docs

                    Assert.Equal(29353, inserted);
                    Assert.Equal(29352, deleted);

                    Assert.Equal(1, await col.CountAsync());

                    // must checkpoint
                    await db.CheckpointAsync();

                    // file still large than 5mb (even with only 1 document)
                    Assert.True(file.Size > 5 * 1024 * 1024);

                    // reduce datafile
                    var reduced = await db.RebuildAsync();

                    // now file are small than 50kb
                    Assert.True(file.Size < 50 * 1024);

                    await DoTestAsync(db, col);
                }

                // re-open and rebuild again
                using (var db = new LiteDatabaseAsync(file.Filename))
                {
                    var col = db.GetCollection <Zip>();

                    await DoTestAsync(db, col);

                    await db.RebuildAsync();

                    await DoTestAsync(db, col);
                }
            }
        }
示例#2
0
        public async Task Rebuild_After_DropCollection()
        {
            using (var file = new TempFile())
                using (var db = new LiteDatabaseAsync(file.Filename))
                {
                    var col = db.GetCollection <Zip>("zip");

                    await col.InsertAsync(DataGen.Zip());

                    await db.DropCollectionAsync("zip");

                    await db.CheckpointAsync();

                    // full disk usage
                    var size = file.Size;

                    var r = await db.RebuildAsync();

                    // only header page
                    Assert.Equal(8192, size - r);
                }
        }