static void LoadYcsbData(SingletonVersionDb versionDb, int recordCount)
        {
            TransactionExecution txExec = versionDb.MakeTxExec();

            for (int i = 0; i < recordCount; ++i)
            {
                txExec.Reset();
                if (!txExec.Insert(i, YcsbHelper.NewPayload()).IsAborted())
                {
                    txExec.Commit();
                }
            }
        }
        static internal YcsbQuery Generate(YCSBDataGenerator gen)
        {
            string nextop = gen.NextOperation();

            switch (nextop)
            {
            case "READ": return(GetRead(gen.NextIntKey()));

            case "UPDATE":
                return(GetUpdate(
                           gen.NextIntKey(), YcsbHelper.UpdatePayload()));
            }
            throw new Exception($"Unknown generated operation: {nextop}");
        }
        static BenchResult BenchmarkWithConfigOnce(YcsbConfig config)
        {
            // config.Print();
            // Console.WriteLine();
            var versionDb = YcsbHelper.MakeVersionDb(config.Concurrency);

            // Console.Write("loading data... ");
            LoadYcsbData(versionDb, config.RecordCount);
            // Console.WriteLine("done");
            var generator = new YCSBDataGenerator(
                config.RecordCount, config.ReadRatio,
                config.Dist, config.ZipfSkew);
            Func <TransactionExecution, YcsbWorker> workerFactory =
                txExec => YcsbWorker.Generate(
                    config.WorkerWorkload, config.QueriesPerTx, generator, txExec);
            // Console.Write("generate workload... ");
            var benchmark = new YcsbBenchmarkEnv(versionDb, workerFactory);
            // Console.WriteLine("done");
            var result = benchmark.Go();

            SingletonVersionDb.DestroyInstance();
            return(result);
        }