Пример #1
0
        public DatabaseApis GetDatabaseApis()
        {
            var connString = DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.PostgreSQL);

            return(new DatabaseApis()
            {
                NormalDatabaseApi = new SimpleSQLDatabaseApi <NpgsqlCommand, NpgsqlConnection>(connString),
                ObjectOrientedDatabaseApi = null
            });
        }
Пример #2
0
        public DatabaseApis GetDatabaseApis()
        {
            var connString = DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.Perst);

            return(new DatabaseApis()
            {
                NormalDatabaseApi = null,
                ObjectOrientedDatabaseApi = new SimplePerstDatabaseApi(connString)
            });
        }
Пример #3
0
        public DatabaseApis GetDatabaseApis()
        {
            var connString = DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.Cassandra);

            return(new DatabaseApis()
            {
                NormalDatabaseApi = new SimpleCassandraDatabaseApi(connString),
                ObjectOrientedDatabaseApi = null
            });
        }
        public DatabaseApis GetDatabaseApis()
        {
            // uses the same database as normal MySQL, so connection string uses EDatabaseType.MySQL
            var connString = DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.MySQL);

            return(new DatabaseApis()
            {
                NormalDatabaseApi = new SimpleDapperOrmDatabaseApi <MySqlConnection>(connString),
                ObjectOrientedDatabaseApi = null
            });
        }
Пример #5
0
        public InventoryDbContext CreateDbContext(string[] args)
        {
            var dbConnFactory  = new DatabaseConnectionStringFactory();
            var conn           = dbConnFactory.Create();
            var optionsBuilder = new DbContextOptionsBuilder <InventoryDbContext>()
                                 .UseMySql(
                conn, sqlOptions =>
            {
                sqlOptions.MigrationsAssembly(GetType().Assembly.FullName);
                sqlOptions.ServerVersion(dbConnFactory.DbOptions.DbInfo);
                sqlOptions.EnableRetryOnFailure(15, TimeSpan.FromSeconds(30), null);
            }
                );

            return(new InventoryDbContext(optionsBuilder.Options, ConfigurationHelper.GetConfiguration()));
        }
Пример #6
0
        public static void Main(string[] args)
        {
            CreateSqlCollections();

            bool hasScalingBeenEnabled = DatabaseConnectionStringFactory.IsConfigFileForScaledServersUsed();
            bool wipeExistingDatabase  = true;

            int[] modelAmounts = new int[] { 10, 500, 1000, 5000 };

            var allTestReports = new List <TestReport>();

            allTestReports.AddRange(GetSimpleDriverTestReports(modelAmounts, hasScalingBeenEnabled, wipeExistingDatabase));
            allTestReports.AddRange(GetEntityFrameworkTestReports(modelAmounts, hasScalingBeenEnabled, wipeExistingDatabase));
            allTestReports.AddRange(GetCqrsTestReports(modelAmounts, hasScalingBeenEnabled, wipeExistingDatabase));

            string reportName = hasScalingBeenEnabled ? "scaled_simple_drivers_tests" : "unscaled_simple_drivers_tests";

            TestReport.CombineTestReportsIntoCsvFile(allTestReports, reportName);
        }
Пример #7
0
        private static void CreateSqlCollections()
        {
            // Creating collections in case they don't exist yet. Only applies to fixed-schema, SQL-like databases.
            var mysqlConnString = DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.MySQL);
            var mysqlApi        = new SimpleSQLDatabaseApi <MySqlCommand, MySqlConnection>(mysqlConnString);

            var postgresqlConnString = DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.PostgreSQL);
            var postgresqlApi        = new SimpleSQLDatabaseApi <NpgsqlCommand, NpgsqlConnection>(postgresqlConnString);

            var cassandraConnString = DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.Cassandra);
            var cassandraApi        = new SimpleCassandraDatabaseApi(cassandraConnString);

            mysqlApi.OpenConnection();
            mysqlApi.CreateCollectionIfNotExists(new SqlCreateCollectionModel <MinuteAveragesRow>());
            mysqlApi.CloseConnection();

            postgresqlApi.OpenConnection();
            postgresqlApi.CreateCollectionIfNotExists(new SqlCreateCollectionModel <MinuteAveragesRow>());
            postgresqlApi.CloseConnection();

            cassandraApi.OpenConnection();
            cassandraApi.CreateCollectionIfNotExists(new CassandraCreateCollectionModel <MinuteAveragesRow>(cassandraApi.KEYSPACE_NAME));
            cassandraApi.CloseConnection();
        }
 public BenchmarkDbContext Create()
 {
     return(new BenchmarkDbContext(connString: DatabaseConnectionStringFactory.GetDatabaseConnectionString(EDatabaseType.MySQL)));
 }
Пример #9
0
        protected override ActionsToMeasure GetActionsToMeasure <M>(IDatabaseType databaseType, bool wipeExistingDatabase)
        {
            var databaseTypeEnum = databaseType.ToEnum();

            if (!(databaseTypeEnum.Equals(EDatabaseType.PostgreSQL) || databaseTypeEnum.Equals(EDatabaseType.MySQL)))
            {
                throw new Exception("ORM is only supported for SQL databases.");
            }

            var connectionStringForDatabase = DatabaseConnectionStringFactory.GetDatabaseConnectionString(databaseType.ToEnum());
            var ormApiForDatabase           = new SqlEntityFrameworkOrmDatabaseApi(connectionStringForDatabase);
            var randomizedStartingModels    = base.GetRandomModels <MinuteAveragesRow>(amountOfModelsToCreate)
                                              .ToList();


            var createAction = new Action(() =>
            {
                ormApiForDatabase.Create(randomizedStartingModels);
            });

            var getAllAction = new Action(() =>
            {
                ormApiForDatabase.GetAll <M>();
            });

            var getByPkAction = new Action(() =>
            {
                ormApiForDatabase.Search <MinuteAveragesRow>(new Func <MinuteAveragesRow, bool>(x => randomizedStartingModels.Contains(x)));
            });

            var modelsValues     = randomizedStartingModels.Select(x => x.startid).ToList();
            var getByValueAction = new Action(() =>
            {
                ormApiForDatabase.Search <MinuteAveragesRow>(new Func <MinuteAveragesRow, bool>(x => modelsValues.Contains(x.startid)));
            });

            var deleteAllAction = new Action(() =>
            {
                ormApiForDatabase.Delete(randomizedStartingModels);
            });

            var updateAction = new Action(() =>
            {
                ormApiForDatabase.Update(randomizedStartingModels);
            });

            var randomizeAction = new Action(() =>
            {
                var random = new Random();
                foreach (var model in randomizedStartingModels)
                {
                    model.RandomizeValuesExceptPrimaryKey(random);
                }
            });

            var truncateAction = new Action(() =>
            {
                ormApiForDatabase.Truncate <M>();
            });


            return(new ActionsToMeasure()
            {
                CreateAction = createAction,
                DeleteAction = deleteAllAction,
                GetByPkAction = getByPkAction,
                GetByValueAction = getByValueAction,
                RandomizeAction = randomizeAction,
                UpdateAction = updateAction,
                TruncateAction = truncateAction,

                WipeExistingDatabase = wipeExistingDatabase
            });
        }