static void Main(string[] args) { // var cc = new Symmetric(Aes.Create()); // for (var i = 1; i < 2000; i++) // { // var buff = Enumerable.Range(0, i).Select(p => (byte) (p & 0xFF)).ToArray(); // var b = cc.Encrypt(buff); // var z = cc.Decrypt(b); // // var b2 = cc.Encrypt(buff); // var z2 = cc.Decrypt(b); // } var aes = Aes.Create(); aes.GenerateKey(); aes.GenerateIV(); var fileName = Path.Combine(@"D:\test2.container"); if (File.Exists(fileName)) { File.Delete(fileName); } var text = string.Join(Environment.NewLine, Enumerable.Range(0, 15).Select(p => $"Hello, line #{p}, Текст, κείμενο, ਟੈਕਸਟ, random guid: {Guid.NewGuid()}")); const int maxItems = 50; using (var pc = new PersistentContainer(fileName, new PersistentContainerSettings(256).With(aes))) { foreach (var itemId in Enumerable.Range(0, maxItems)) { var path = (itemId / 10).ToString("D4"); pc.Put($"/{path}/item{itemId}", text); } } using (var pc = new PersistentContainer(fileName, new PersistentContainerSettings(256).With(aes))) { Console.WriteLine("File length: {0} bytes, entries: {1}", pc.Length, pc.Find().Length); Console.WriteLine(); var mask = "/004?/*"; var entries = pc.Find(mask); Console.WriteLine("Found {0} items with mask: {1}, show first 10:", entries.Length, mask); foreach (var entry in entries.Take(10)) { var item = pc.GetString(entry.Name); Console.WriteLine(entry); } } }
static void Main(string[] args) { var fileName = Path.Combine(Path.GetTempPath(), "test2.container"); if (File.Exists(fileName)) { File.Delete(fileName); } const int maxItems = 1000; using (var pc = new PersistentContainer(fileName, new PersistentContainerSettings(256))) { // write 0000/item0, 0000/item1, 0000/item2, ..., 0001/item10, 0001/item11, ..., 0002/item10, 0002/item21, foreach (var itemId in Enumerable.Range(0, maxItems)) { var path = (itemId / 10).ToString("D4"); pc.Put($"/{path}/item{itemId}", $"Hello, i'm item #{itemId}, some random guid: {Guid.NewGuid()}"); } } using (var pc = new PersistentContainer(fileName, new PersistentContainerSettings(256))) { Console.WriteLine("File length: {0} bytes, entries: {1}", pc.Length, pc.Find().Length); Console.WriteLine(); var mask1 = "/004?/*"; var entries1 = pc.Find(mask1); Console.WriteLine("Found {0} items with mask: {1}, show first 10:", entries1.Length, mask1); foreach (var entry in entries1.Take(10)) { Console.WriteLine(entry); } Console.WriteLine(); var mask2 = "/*/item?00"; var entries2 = pc.Find(mask2); Console.WriteLine("Found {0} items with mask: {1}, show first 10:", entries2.Length, mask2); foreach (var entry in entries2.Take(10)) { Console.WriteLine(entry); } Console.WriteLine(); } }
static void testBatchWrites(Dictionary <string, byte[]> extractedFiles, int batchSize, PersistentContainerCompressType compressType = 0) { Console.WriteLine(); Console.WriteLine("Batch requests [Compress={0}]: {1}", compressType.ToString(), batchSize); Console.WriteLine("Page ms MB/sec(w) MB/sec(r) Ratio"); var items = makeBatches(extractedFiles, batchSize); foreach (var pageSize in pageSizes) { var targetFileName = getFileNameByPageSize(pageSize); if (File.Exists(targetFileName)) { File.Delete(targetFileName); } var sw = Stopwatch.StartNew(); using (var container = new PersistentContainer(targetFileName, new PersistentContainerSettings(pageSize, 0, compressType))) foreach (var item in items) { container.Put(item); } var elapsedWrites = sw.ElapsedMilliseconds; var targetFileLength = new FileInfo(targetFileName).Length; sw.Restart(); var rawLength = 0; var compressedLength = 0; using (var container = new PersistentContainer(targetFileName, new PersistentContainerSettings(pageSize, 0, compressType))) { foreach (var entry in container.Find()) { compressedLength += entry.CompressedLength; rawLength += container.Get(entry.Name)?.Length ?? 0; } } var elapsedRead = sw.ElapsedMilliseconds; sw.Stop(); var lengthInMB = targetFileLength / 1048576.0; var rawLengthInMB = rawLength / 1048576.0; Console.WriteLine("{0,5} {1,8} {2,8:F1} {3,8:F1} {4,8:F2}x", pageSize, sw.ElapsedMilliseconds, lengthInMB / (elapsedWrites / 1000.0), rawLengthInMB / (elapsedRead / 1000.0), rawLength / (double)compressedLength); } }
static void Main(string[] args) { var fileName = Path.Combine(Path.GetTempPath(), "test.container"); if (File.Exists(fileName)) { File.Delete(fileName); } using (var pc = new PersistentContainer(fileName, new PersistentContainerSettings(256))) { pc.Put("item1", "Hello"); pc.Put("item2", "User"); // overwrite item1: pc.Put("item1", "Bye!"); pc.Append("item1", "See you later!"); pc.Delete("item2"); pc.Put("item3", "another item"); } using (var pc = new PersistentContainer(fileName, new PersistentContainerSettings(256))) { var entries = pc.Find(); foreach (var entry in entries) { Console.WriteLine(entry); } Console.WriteLine(); foreach (var entry in entries) { Console.WriteLine("{0}: {1}", entry.Name, pc.GetString(entry.Name)); } } }