public void MultiThreadedObjectStoreGet() { var taskCount = 50; var taskList = new List<Task>(); using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; for (int i = 0; taskCount > i; i++) { taskList.Add(Task.Factory.StartNew((object state) => { lock (svc) { if (!svc.NameSpaceExists(ns)) { svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); } if (!svc.ObjectNameExists(ns, obj)) { svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15), new ObjectIndexMetadata("StrNullIndex1", ObjectIndexType.String, 5, true) })); } } var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; var strNullIndexVal = "0011"; var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1), ObjectIndex.Create("StrNullIndex1", null) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2), ObjectIndex.Create("StrNullIndex1", strNullIndexVal) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3), ObjectIndex.Create("StrNullIndex1", null) } }); var options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.And }; var findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("ID", objID3.ID), ObjectIndex.Create("StrIndex1", strIndex3) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val3, new Guid(findVals[0])); }, i, TaskCreationOptions.LongRunning)); } foreach (Task t in taskList) { t.Wait(); } var id = svc.GetNextObjectID(ns, obj); Assert.AreEqual(3 * taskCount + 1, id); Assert.AreEqual(3 * taskCount, svc.Iterate(ns, obj).Count()); // count all index values Assert.AreEqual(3 * taskCount, svc.Count(ns, obj)); } }
public void FindByConstraintWithCachingTest() { using (var svc = new ObjectService(ObjectTestHelper.GetConfigWithCaching())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) })); var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3) } }); var findVals = svc.Find(ns, obj, @"{ ""IntIndex1"" : 12500, ""Op"" : ""="" }").ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); } }
public void FindWithCachingTest() { using (var svc = new ObjectService(ObjectTestHelper.GetConfigWithCaching())) { var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) })); var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3) } }); // test a single index lookup using And var options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.And }; var findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("IntIndex1", 12500) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); // test two index lookups using And options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.And }; findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("StrIndex1", "index test val"), ObjectIndex.Create("IntIndex1", 12500) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); // test a single lookup using Or options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.Or }; findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("IntIndex1", 12500) }).ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); // test two index lookups using Or options = new ObjectFindOptions() { Operator = ObjectFindOperator.Equals, Logic = ObjectFindLogic.Or }; findVals = svc.Find(ns, obj, options, new ObjectIndex[] { ObjectIndex.Create("IntIndex1", 12500), ObjectIndex.Create("StrIndex1", "asdf") }).ToArray(); Assert.AreEqual(2, findVals.Length); var findVal1 = new Guid(findVals[0]); var findVal2 = new Guid(findVals[1]); Assert.IsFalse(findVal1 == findVal2); Assert.IsTrue(findVal1 == val1 || findVal1 == val2); Assert.IsTrue(findVal2 == val1 || findVal2 == val2); } }
public void CachePerfTest() { var stopWatchUncached = new Stopwatch(); var stopWatchCached = new Stopwatch(); var stopWatchCountUncached = new Stopwatch(); var stopWatchCountCached = new Stopwatch(); var ns = ObjectTestHelper.NameSpace1; var obj = ObjectTestHelper.ObjectName1; var val1 = new Guid("{D22640F0-7D87-4F1C-8817-119FC036FAC1}"); var val2 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var val3 = new Guid("{72FC1391-EC51-4826-890B-D02071A9A2DE}"); var intIndex1 = 5; var intIndex2 = 12500; var intIndex3 = -100; var strIndex1 = "asdf"; var strIndex2 = "index test val"; var strIndex3 = "zzyyxx"; using (var svc = new ObjectService(ObjectTestHelper.GetConfig())) { svc.CreateNameSpace(new ObjectNameSpaceConfig(ns, "ZeroG Test", "Unit Test", DateTime.Now)); svc.ProvisionObjectStore( new ObjectMetadata(ns, obj, new ObjectIndexMetadata[] { new ObjectIndexMetadata("IntIndex1", ObjectIndexType.Integer), new ObjectIndexMetadata("StrIndex1", ObjectIndexType.String, 15) })); var objID1 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val1.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex1), ObjectIndex.Create("StrIndex1", strIndex1) } }); var objID2 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val2.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex2), ObjectIndex.Create("StrIndex1", strIndex2) } }); var objID3 = svc.Store(ns, new PersistentObject() { Name = obj, Value = val3.ToByteArray(), Indexes = new ObjectIndex[] { ObjectIndex.Create("IntIndex1", intIndex3), ObjectIndex.Create("StrIndex1", strIndex3) } }); stopWatchUncached.Start(); for (int i = 0; i < 10; i++) { var findVals = svc.Find(ns, obj, @"{ ""IntIndex1"" : 12500 }").ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); } stopWatchUncached.Stop(); stopWatchCountUncached.Start(); for (int i = 0; i < 10; i++) { var count = svc.Count(ns, obj, @"{ ""IntIndex1"" : 12500 }"); Assert.AreEqual(1, count); } stopWatchCountUncached.Stop(); } using (var svc = new ObjectService(ObjectTestHelper.GetConfigWithCaching())) { stopWatchCached.Start(); for (int i = 0; i < 10; i++) { var findVals = svc.Find(ns, obj, @"{ ""IntIndex1"" : 12500 }").ToArray(); Assert.AreEqual(1, findVals.Length); Assert.AreEqual(val2, new Guid(findVals[0])); } stopWatchCached.Stop(); stopWatchCountCached.Start(); for (int i = 0; i < 10; i++) { var count = svc.Count(ns, obj, @"{ ""IntIndex1"" : 12500 }"); Assert.AreEqual(1, count); } stopWatchCountCached.Stop(); } Assert.IsTrue(stopWatchUncached.Elapsed > stopWatchCached.Elapsed); Assert.IsTrue(stopWatchCountUncached.Elapsed > stopWatchCountCached.Elapsed); Console.WriteLine("Uncached Find time: {0} -- Cached Find time: {1}", stopWatchUncached.Elapsed, stopWatchCached.Elapsed); Console.WriteLine("Uncached Count time: {0} -- Cached Count time: {1}", stopWatchCountUncached.Elapsed, stopWatchCountCached.Elapsed); }