Query performance can degrade with the amount of objects of the queried type:
QueryPerformanceBenchmark.cs: RunQueryAmountOfObjectsTest
private void RunQueryAmountOfObjectsTest()
{
Init();
Clean();
System.Console.WriteLine("Storing " + _count +
" of objects of depth " + _depth);
Open(Configure());
Store();
Close();
//
Open(Configure());
StartTimer();
IQuery query = objectContainer.Query();
query.Constrain(typeof(Item));
query.Descend("_name").Constrain("level1/1");
Item item = (Item)query.Execute().Next();
StopTimer("Select 1 object SODA: " + item._name);
System.Console.WriteLine(
"Add some objects of another type and check the query time again:");
StoreWithArray();
Close();
//
Open(Configure());
StartTimer();
query = objectContainer.Query();
query.Constrain(typeof(Item));
query.Descend("_name").Constrain("level1/1");
item = (Item) query.Execute().Next();
StopTimer("Select 1 object SODA: " + item._name);
Close();
// Add many objects of the same type
InitLargeDb();
Clean();
System.Console.WriteLine("Storing " + _count +
" of objects of depth " + _depth);
Open(Configure());
Store();
Close();
//
Open(Configure());
StartTimer();
query = objectContainer.Query();
query.Constrain(typeof(Item));
query.Descend("_name").Constrain("level1/1");
item = (Item)query.Execute().Next();
StopTimer("Select 1 object SODA: " + item._name);
Close();
}
QueryPerformanceBenchmark.cs: Init
private void Init()
{
_filePath = "performance.db4o";
// amount of objects
_count = 10000;
// depth of objects
_depth = 3;
_isClientServer = false;
}
QueryPerformanceBenchmark.cs: InitLargeDb
private void InitLargeDb()
{
_filePath = "performance.db4o";
_count = 100000;
_depth = 3;
_isClientServer = false;
}
QueryPerformanceBenchmark.cs: Configure
private IConfiguration Configure()
{
IConfiguration config = Db4oFactory.NewConfiguration();
return config;
}
However, the general size of the database, i.e. amount of other type of objects in the database should not have any impact on the query performance.
Results from the test machine:
Storing 10000 of objects of depth 3
Store 30000 objects: 3305ms
Select 1 object SODA: level1/1: 464ms
Storing 100000 of objects of depth 3
Store 300000 objects: 21338ms
Select 1 object SODA: level1/1: 5316ms
Download example code: