private List <PerformanceRecord> WriteInternal(
            string operation,
            IEnumerator <TestData> enumerator,
            long itemsPerTransaction,
            long numberOfTransactions,
            PerfTracker perfTracker,
            rndseq Rflag,
            LightningEnvironment env,
            LightningDatabase db)
        {
            byte[] valueToWrite = null;
            var    records      = new List <PerformanceRecord>();
            var    sw           = new Stopwatch();

            LightningDB.PutOptions putflags = LightningDB.PutOptions.None;

            if (Rflag == rndseq.SEQ)
            {
                putflags = LightningDB.PutOptions.AppendData;
            }

            for (var transactions = 0; transactions < numberOfTransactions; transactions++)
            {
                sw.Restart();

                using (var tx = env.BeginTransaction())
                {
                    for (var i = 0; i < itemsPerTransaction; i++)
                    {
                        enumerator.MoveNext();

                        valueToWrite = GetValueToWrite(valueToWrite, enumerator.Current.ValueSize);

                        tx.Put(db, Encoding.UTF8.GetBytes(enumerator.Current.Id.ToString("0000000000000000")), valueToWrite, putflags);
                    }

                    tx.Commit();
                }

                sw.Stop();
                perfTracker.Record(sw.ElapsedMilliseconds);

                records.Add(new PerformanceRecord
                {
                    Operation      = operation,
                    Time           = DateTime.Now,
                    Duration       = sw.ElapsedMilliseconds,
                    ProcessedItems = itemsPerTransaction
                });
            }

            sw.Stop();

            return(records);
        }
        private List <PerformanceRecord> WriteParallel(string operation, IEnumerable <TestData> data, int itemsPerTransaction, int numberOfTransactions, PerfTracker perfTracker, rndseq Rflag, int numberOfThreads, out long elapsedMilliseconds)
        {
            LightningDatabase db;

            using (var env = NewEnvironment(out db))
            {
                return(ExecuteWriteWithParallel(
                           data,
                           numberOfTransactions,
                           itemsPerTransaction,
                           numberOfThreads,
                           (enumerator, itmsPerTransaction, nmbrOfTransactions) => WriteInternal(operation, enumerator, itmsPerTransaction, nmbrOfTransactions, perfTracker, Rflag, env, db),
                           out elapsedMilliseconds));
            }
        }
        private List <PerformanceRecord> Write(string operation, IEnumerable <TestData> data, int itemsPerTransaction, int numberOfTransactions, PerfTracker perfTracker, rndseq Rflag)
        {
            LightningDatabase db;

            using (var env = NewEnvironment(out db))
            {
                var enumerator = data.GetEnumerator();
                return(WriteInternal(operation, enumerator, itemsPerTransaction, numberOfTransactions, perfTracker, Rflag, env, db));
            }
        }
Beispiel #4
0
        private List<PerformanceRecord> WriteInternal(
            string operation,
            IEnumerator<TestData> enumerator,
            long itemsPerTransaction,
            long numberOfTransactions,
            PerfTracker perfTracker,
			rndseq Rflag,
            LightningEnvironment env,
			LightningDatabase db)
        {
            byte[] valueToWrite = null;
            var records = new List<PerformanceRecord>();
            var sw = new Stopwatch();
			LightningDB.PutOptions putflags = LightningDB.PutOptions.None;

			if (Rflag == rndseq.SEQ)
				putflags = LightningDB.PutOptions.AppendData;

            for (var transactions = 0; transactions < numberOfTransactions; transactions++)
            {
                sw.Restart();

                using (var tx = env.BeginTransaction())
                {
                    for (var i = 0; i < itemsPerTransaction; i++)
                    {
                        enumerator.MoveNext();

                        valueToWrite = GetValueToWrite(valueToWrite, enumerator.Current.ValueSize);

                        tx.Put(db, Encoding.UTF8.GetBytes(enumerator.Current.Id.ToString("0000000000000000")), valueToWrite, putflags);
                    }

                    tx.Commit();
                }

                sw.Stop();
                perfTracker.Record(sw.ElapsedMilliseconds);

                records.Add(new PerformanceRecord
                                {
                                    Operation = operation, 
                                    Time = DateTime.Now, 
                                    Duration = sw.ElapsedMilliseconds, 
                                    ProcessedItems = itemsPerTransaction
                                });
            }

            sw.Stop();

            return records;
        }
Beispiel #5
0
        private List<PerformanceRecord> WriteParallel(string operation, IEnumerable<TestData> data, int itemsPerTransaction, int numberOfTransactions, PerfTracker perfTracker, rndseq Rflag, int numberOfThreads, out long elapsedMilliseconds)
        {
			LightningDatabase db;
            using (var env = NewEnvironment(out db))
            {
                return ExecuteWriteWithParallel(
                data,
                numberOfTransactions,
                itemsPerTransaction,
                numberOfThreads,
                (enumerator, itmsPerTransaction, nmbrOfTransactions) => WriteInternal(operation, enumerator, itmsPerTransaction, nmbrOfTransactions, perfTracker, Rflag, env, db),
                out elapsedMilliseconds);
            }
        }
Beispiel #6
0
        private List<PerformanceRecord> Write(string operation, IEnumerable<TestData> data, int itemsPerTransaction, int numberOfTransactions, PerfTracker perfTracker, rndseq Rflag)
        {
			LightningDatabase db;
            using (var env = NewEnvironment(out db))
            {
                var enumerator = data.GetEnumerator();
                return WriteInternal(operation, enumerator, itemsPerTransaction, numberOfTransactions, perfTracker, Rflag, env, db);
            }
        }