// Initialize the Registry DB (SOP ObjectServer & Data file). protected static void Initialize(Sop.Profile fileConfig = null, bool persisted = true) { // commit every 10 minutes. if (CommitInterval == null) { CommitInterval = new TimeSpan(0, 10, 0); //#if (DEBUG) // CommitInterval = new TimeSpan(0, 1, 0); //#else // CommitInterval = new TimeSpan(0, 10, 0); //#endif } if (_server != null) { return; } lock (_serverLocker) { // create the SOP Server file for use as registry... if (_server != null) { return; } if (fileConfig == null) { fileConfig = new Profile(); } fileConfig.MemoryExtenderMode = !persisted; _server = new Sop.ObjectServer(ServerFilename, false, fileConfig); if (string.IsNullOrWhiteSpace(ServerFilename)) { ServerFilename = _server.Filename; } //#if (DEBUG) // Log.Logger.Instance = new Log.Logger(string.Format("{0}\\SopLog.txt", _server.Path)); // Log.Logger.Instance.LogLevel = Log.LogLevels.Verbose; //#endif } }
//** insert 5 million records on two containers void Populate(Sop.ObjectServer server) { int ZipCodeCtr = 5000; Person[] NewPeople = new Person[1000]; int NewPeopleIndex = 0; for (int i = 0; i < MaxCount; i++) { int pid = (int)PeopleStore.GetNextSequence(); Person p = new Person() { PersonID = pid, Key = new PersonKey() { FirstName = string.Format("Joe{0}", pid), LastName = string.Format("Peter{0}", pid) }, PhoneNumber = "510-555-9999" }; PeopleStore.Add(p.PersonID, p); NewPeople[NewPeopleIndex++] = p; //** do inserts on People Store By Name every batch of 1000 records //** to minimize disk I/O head jumps, causing more optimal insertion times... if (NewPeopleIndex == 1000) { foreach (Person np in NewPeople) { PeopleStoreByName.Add(np.Key, np.PersonID); } NewPeopleIndex = 0; } //** NOTE: SOP supports very large transactions. //** In this case we've set it to commit every x00,000 insertions on two tables. //** Each one of these operations is a high speed operation and requires fairly reasonable resource footprint if (i > 0 && i % TransactionSize == 0) { if (NewPeopleIndex > 0) { for (int i2 = 0; i2 < NewPeopleIndex; i2++) { Person np = NewPeople[i2]; PeopleStoreByName.Add(np.Key, np.PersonID); } NewPeopleIndex = 0; } ZipCodeCtr++; server.CycleTransaction(); } } if (NewPeopleIndex > 0) { for (int i2 = 0; i2 < NewPeopleIndex; i2++) { Person np = NewPeople[i2]; PeopleStoreByName.Add(np.Key, np.PersonID); } } ZipCodeCtr++; server.CycleTransaction(); }