public static void Test04() { using (var dbFile = MemoryMappedFile.CreateFromFile("Db", FileMode.OpenOrCreate, "Db", Constants.DbMaxSize)) { Pager.Init(dbFile); var pager = Pager.Get(); var rng = new Random(); var root = new LeafNode(); root.PageIndex = pager.NewNodeIndex(); pager.SaveNode(root); var bTree = new BTree(root); var usedKeys = new HashSet <int>(); var chosenKey = 0; for (var i = 0; i < 2000000; i++) { if (i % 100000 == 0) { Console.WriteLine(i); } try { var key = rng.Next(1, int.MaxValue); while (usedKeys.Contains(key)) { key = rng.Next(1, int.MaxValue); } var byteValue = (byte)(key % 256); if (i == 313284) { chosenKey = key; } bTree.InsertData(key, new byte[] { 0, 0, 0, byteValue, 0, 0, 0, byteValue, 0, 0, 0, byteValue, 0, 0, 0, byteValue, 0, 0, 0, byteValue, 0, 0, 0, byteValue, 0, 0, 0, byteValue, 0, 0, 0, byteValue }); usedKeys.Add(key); } catch (Exception e) { Console.WriteLine("Iteration: " + i); Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); break; } } bTree.SaveNodes(); bTree = new BTree(pager.LoadNode(0)); var data = bTree.GetData(chosenKey); Console.WriteLine(chosenKey); Console.WriteLine(chosenKey % 256); Console.WriteLine(string.Join(",", data.ProduceByteArray())); } }
// Split off and return the lower half in a new node // We split off the lower half so that data about the upper key value of this node does not change public LeafNode Split() { var keyCount = dataKeys.Count / 2; var upperKeys = new NodeKey[keyCount]; dataKeys.CopyTo(upperKeys, 0, keyCount); var splitNode = new LeafNode(); foreach (var upperKey in upperKeys) { splitNode.AddDataRow(upperKey, dataRows[upperKey]); dataKeys.Remove(upperKey); dataRows.Remove(upperKey); } return(splitNode); }
public static void Test09() { using (var dbFile = MemoryMappedFile.CreateFromFile("Db", FileMode.OpenOrCreate, "Db", Constants.DbMaxSize)) { Pager.Init(dbFile); var pager = Pager.Get(); var rng = new Random(); Node root = new LeafNode(); var rootIndex = pager.NewNodeIndex(); root.PageIndex = rootIndex; pager.SaveNode(root); var bTree = new BTree(root); for (var i = 0; i < 100; i++) { var byteArray = new byte[200]; rng.NextBytes(byteArray); rng.NextBytes(byteArray); bTree.InsertData(i, byteArray); if (i == 45) { Console.WriteLine(string.Join(",", byteArray)); Console.WriteLine(); } } bTree.SaveNodes(); root = pager.LoadNode(rootIndex); bTree = new BTree(root); var initialBlob = bTree.GetData(45); Console.WriteLine(string.Join(",", initialBlob.ProduceByteArray())); Console.WriteLine(); var modifData = new byte[200]; rng.NextBytes(modifData); Console.WriteLine(string.Join(",", modifData)); Console.WriteLine(); bTree.ReplaceData(45, modifData); var modifBlob = bTree.GetData(45); Console.WriteLine(string.Join(",", modifBlob.ProduceByteArray())); } }
public static void Test01() { using (var dbFile = MemoryMappedFile.CreateNew("Db", Constants.DbMaxSize)) { Pager.Init(dbFile); var pager = Pager.Get(); var indices = new PageIndex[] { pager.NewNodeIndex(), pager.NewNodeIndex(), pager.NewNodeIndex(), pager.NewNodeIndex(), pager.NewNodeIndex(), pager.NewNodeIndex(), pager.NewNodeIndex(), pager.NewNodeIndex(), pager.NewNodeIndex() }; var node = new LeafNode(indices[2], data); pager.SaveNode(node); var emptyNode = pager.LoadNode(1); var populatedNode = pager.LoadNode(2); } }