static public void Main(System.String[] args) { int i; Storage db = StorageFactory.Instance.CreateStorage(); db.Open("testbck1.dbs", pagePoolSize); Root root = (Root)db.Root; if (root == null) { root = new Root(); root.strIndex = db.CreateIndex(typeof(System.String), true); root.intIndex = db.CreateFieldIndex(typeof(Record), "intKey", true); root.compoundIndex = db.CreateFieldIndex(typeof(Record), new String[] { "strKey", "intKey" }, true); db.Root = root; } FieldIndex intIndex = root.intIndex; FieldIndex compoundIndex = root.compoundIndex; Index strIndex = root.strIndex; DateTime start = DateTime.Now; long key = 1999; for (i = 0; i < nRecords; i++) { Record rec = new Record(); key = (3141592621L * key + 2718281829L) % 1000000007L; rec.intKey = key; rec.strKey = System.Convert.ToString(key); rec.realKey = (double)key; intIndex.Put(rec); strIndex.Put(new Key(rec.strKey), rec); compoundIndex.Put(rec); } db.Commit(); System.Console.WriteLine("Elapsed time for inserting " + nRecords + " records: " + (DateTime.Now - start)); start = DateTime.Now; System.IO.FileStream stream = new System.IO.FileStream("testbck2.dbs", FileMode.Create, FileAccess.Write); db.Backup(stream); stream.Close(); System.Console.WriteLine("Elapsed time for backup completion: " + (DateTime.Now - start)); db.Close(); db.Open("testbck2.dbs", pagePoolSize); root = (Root)db.Root; intIndex = root.intIndex; strIndex = root.strIndex; compoundIndex = root.compoundIndex; start = DateTime.Now; key = 1999; for (i = 0; i < nRecords; i++) { key = (3141592621L * key + 2718281829L) % 1000000007L; String strKey = System.Convert.ToString(key); Record rec1 = (Record)intIndex.Get(new Key(key)); Record rec2 = (Record)strIndex.Get(new Key(strKey)); Record rec3 = (Record)compoundIndex.Get(new Key(strKey, key)); Debug.Assert(rec1 != null); Debug.Assert(rec1 == rec2); Debug.Assert(rec1 == rec3); Debug.Assert(rec1.intKey == key); Debug.Assert(rec1.realKey == (double)key); Debug.Assert(strKey.Equals(rec1.strKey)); } System.Console.WriteLine("Elapsed time for performing " + nRecords * 2 + " index searches: " + (DateTime.Now - start)); db.Close(); }
static public void Main(string[] args) { int i; Storage db = StorageFactory.Instance.CreateStorage(); for (i = 0; i < args.Length; i++) { if ("altbtree" == args[i]) { db.SetProperty("perst.alternative.btree", true); } } db.Open("testcidx.dbs", pagePoolSize); #if USE_GENERICS MultiFieldIndex <Record> root = (MultiFieldIndex <Record>)db.Root; if (root == null) { root = db.CreateFieldIndex <Record>(new string[] { "intKey", "strKey" }, true); #else FieldIndex root = (FieldIndex)db.Root; if (root == null) { root = db.CreateFieldIndex(typeof(Record), new string[] { "intKey", "strKey" }, true); #endif db.Root = root; } DateTime start = DateTime.Now; long key = 1999; for (i = 0; i < nRecords; i++) { Record rec = new Record(); key = (3141592621L * key + 2718281829L) % 1000000007L; rec.intKey = (int)((ulong)key >> 32); rec.strKey = Convert.ToString((int)key); root.Put(rec); } db.Commit(); Console.WriteLine("Elapsed time for inserting " + nRecords + " records: " + (DateTime.Now - start)); start = DateTime.Now; key = 1999; int minKey = Int32.MaxValue; int maxKey = Int32.MinValue; for (i = 0; i < nRecords; i++) { key = (3141592621L * key + 2718281829L) % 1000000007L; int intKey = (int)((ulong)key >> 32); String strKey = Convert.ToString((int)key); #if USE_GENERICS Record rec = root.Get(new Key(new Object[] { intKey, strKey })); #else Record rec = (Record)root.Get(new Key(new Object[] { intKey, strKey })); #endif Debug.Assert(rec != null && rec.intKey == intKey && rec.strKey.Equals(strKey)); if (intKey < minKey) { minKey = intKey; } if (intKey > maxKey) { maxKey = intKey; } } Console.WriteLine("Elapsed time for performing " + nRecords + " index searches: " + (DateTime.Now - start)); start = DateTime.Now; int n = 0; string prevStr = ""; int prevInt = minKey; foreach (Record rec in root.Range(new Key(minKey, ""), new Key(maxKey + 1, "???"), IterationOrder.AscentOrder)) { Debug.Assert(rec.intKey > prevInt || rec.intKey == prevInt && rec.strKey.CompareTo(prevStr) > 0); prevStr = rec.strKey; prevInt = rec.intKey; n += 1; } Debug.Assert(n == nRecords); n = 0; prevInt = maxKey + 1; foreach (Record rec in root.Range(new Key(minKey, "", false), new Key(maxKey + 1, "???", false), IterationOrder.DescentOrder)) { Debug.Assert(rec.intKey < prevInt || rec.intKey == prevInt && rec.strKey.CompareTo(prevStr) < 0); prevStr = rec.strKey; prevInt = rec.intKey; n += 1; } Debug.Assert(n == nRecords); Console.WriteLine("Elapsed time for iterating through " + (nRecords * 2) + " records: " + (DateTime.Now - start)); start = DateTime.Now; key = 1999; for (i = 0; i < nRecords; i++) { key = (3141592621L * key + 2718281829L) % 1000000007L; int intKey = (int)((ulong)key >> 32); String strKey = Convert.ToString((int)key); #if USE_GENERICS Record rec = root.Get(new Key(new Object[] { intKey, strKey })); #else Record rec = (Record)root.Get(new Key(new Object[] { intKey, strKey })); #endif Debug.Assert(rec != null && rec.intKey == intKey && rec.strKey.Equals(strKey)); Debug.Assert(root.Contains(rec)); root.Remove(rec); rec.Deallocate(); } Debug.Assert(!root.GetEnumerator().MoveNext()); Debug.Assert(!root.Reverse().GetEnumerator().MoveNext()); Console.WriteLine("Elapsed time for deleting " + nRecords + " records: " + (DateTime.Now - start)); db.Close(); } }
static public void Main(string[] args) { int i; Storage db = StorageFactory.Instance.CreateStorage(); for (i = 0; i < args.Length; i++) { if ("altbtree" == args[i]) { db.SetProperty("perst.alternative.btree", true); } } db.Open("test1.dbs", pagePoolSize); Root root = (Root)db.Root; if (root == null) { root = new Root(); #if USE_GENERICS root.strIndex = db.CreateIndex <string, Record>(true); root.intIndex = db.CreateFieldIndex <long, Record>("intKey", true); root.compoundIndex = db.CreateFieldIndex <Record>(new string[] { "strKey", "intKey" }, true); #else root.strIndex = db.CreateIndex(typeof(System.String), true); root.intIndex = db.CreateFieldIndex(typeof(Record), "intKey", true); root.compoundIndex = db.CreateFieldIndex(typeof(Record), new String[] { "strKey", "intKey" }, true); #endif root.point.x = 1; root.point.y = 2; db.Root = root; } #if USE_GENERICS FieldIndex <long, Record> intIndex = root.intIndex; MultiFieldIndex <Record> compoundIndex = root.compoundIndex; Index <string, Record> strIndex = root.strIndex; #else FieldIndex intIndex = root.intIndex; FieldIndex compoundIndex = root.compoundIndex; Index strIndex = root.strIndex; #endif DateTime start = DateTime.Now; long key = 1999; for (i = 0; i < nRecords; i++) { Record rec = new Record(); key = (3141592621L * key + 2718281829L) % 1000000007L; rec.intKey = key; rec.strKey = System.Convert.ToString(key); rec.realKey = (double)key; intIndex.Put(rec); strIndex.Put(new Key(rec.strKey), rec); compoundIndex.Put(rec); } db.Commit(); System.Console.WriteLine("Elapsed time for inserting " + nRecords + " records: " + (DateTime.Now - start)); start = DateTime.Now; System.IO.StreamWriter writer = new System.IO.StreamWriter("test.xml"); db.ExportXML(writer); writer.Close(); System.Console.WriteLine("Elapsed time for XML export: " + (DateTime.Now - start)); db.Close(); db.Open("test2.dbs", pagePoolSize); start = DateTime.Now; System.IO.StreamReader reader = new System.IO.StreamReader("test.xml"); db.ImportXML(reader); reader.Close(); System.Console.WriteLine("Elapsed time for XML import: " + (DateTime.Now - start)); root = (Root)db.Root; intIndex = root.intIndex; strIndex = root.strIndex; compoundIndex = root.compoundIndex; Debug.Assert(root.point.x == 1 && root.point.y == 2); start = DateTime.Now; key = 1999; for (i = 0; i < nRecords; i++) { key = (3141592621L * key + 2718281829L) % 1000000007L; String strKey = System.Convert.ToString(key); #if USE_GENERICS Record rec1 = intIndex[key]; Record rec2 = strIndex[strKey]; Record rec3 = compoundIndex.Get(new Key(strKey, key)); #else Record rec1 = (Record)intIndex.Get(new Key(key)); Record rec2 = (Record)strIndex.Get(new Key(strKey)); Record rec3 = (Record)compoundIndex.Get(new Key(strKey, key)); #endif Debug.Assert(rec1 != null); Debug.Assert(rec1 == rec2); Debug.Assert(rec1 == rec3); Debug.Assert(rec1.intKey == key); Debug.Assert(rec1.realKey == (double)key); Debug.Assert(strKey.Equals(rec1.strKey)); } System.Console.WriteLine("Elapsed time for performing " + nRecords * 2 + " index searches: " + (DateTime.Now - start)); db.Close(); }