Esempio n. 1
0
        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()));
            }
        }
Esempio n. 2
0
        // 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);
        }
Esempio n. 3
0
        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()));
            }
        }
Esempio n. 4
0
 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);
     }
 }