public void InsertValues()
 {
     using (var writer = connection.CreateColumnWriter($"INSERT INTO {TableName}(id, str) VALUES"))
     {
         var writeObject = new object[] { idEnumerable, strEnumerable };
         writer.WriteTable(writeObject, valuesCount);
         writer.EndWrite();
     }
 }
Beispiel #2
0
        public void GlobalSetup()
        {
            GlobalCleanup();

            var cmd = connection.CreateCommand($"CREATE TABLE {TableName}(id Int32, str Nullable(String)) ENGINE=Memory");

            cmd.ExecuteNonQuery();

            idEnumerable  = Enumerable.Range(0, valuesCount);
            strEnumerable = idEnumerable.Select(x => x.ToString());

            //Fill Table
            using (var writer = connection.CreateColumnWriter($"INSERT INTO {TableName}(id, str) VALUES"))
            {
                var writeObject = new object[] { idEnumerable, strEnumerable };
                writer.WriteTable(writeObject, valuesCount);
                writer.EndWrite();
            }
        }
Beispiel #3
0
        public async Task WriteBatсhes()
        {
            await using var connection = new ClickHouseConnection(_connectionSettings);
            await connection.OpenAsync();

            await using var writer = connection.CreateColumnWriter("INSERT INTO ColumnWriterInsertBenchmarks VALUES");

            var id  = new List <Guid>(BatchSize);
            var str = new List <string?>(BatchSize);
            var dt  = new List <DateTime>(BatchSize);
            var val = new List <decimal>(BatchSize);

            var columns = new object[4];

            columns[writer.GetOrdinal("id")]  = id;
            columns[writer.GetOrdinal("str")] = str;
            columns[writer.GetOrdinal("dt")]  = dt;
            columns[writer.GetOrdinal("val")] = val;

            for (int i = 0; i < Rows; i += BatchSize)
            {
                id.Clear();
                str.Clear();
                dt.Clear();
                val.Clear();

                var len = Math.Min(BatchSize, Rows - i);
                for (int j = 0; j < len; j++)
                {
                    id.Add(_id[i + j]);
                    str.Add(_str[i + j]);
                    dt.Add(_dt[i + j]);
                    val.Add(_val[i + j]);
                }

                await writer.WriteTableAsync(columns, len, CancellationToken.None);
            }

            await writer.EndWriteAsync(CancellationToken.None);
        }
        public async Task InsertWithColumnWriter()
        {
            var id = new List <Guid>(1)
            {
                Guid.Empty
            };
            var str = new List <string?>(1)
            {
                null
            };
            var dt = new List <DateTime>(1)
            {
                DateTime.MinValue
            };
            var val = new List <decimal>(1)
            {
                0
            };

            if (KeepConnection)
            {
                await using var connection = new ClickHouseConnection(_connectionSettings);
                await connection.OpenAsync();

                for (int i = 0; i < Rows; i++)
                {
                    await using var writer = connection.CreateColumnWriter("INSERT INTO ColumnWriterInsertBenchmarks VALUES");

                    var columns = new object[4];
                    columns[writer.GetOrdinal("id")]  = id;
                    columns[writer.GetOrdinal("str")] = str;
                    columns[writer.GetOrdinal("dt")]  = dt;
                    columns[writer.GetOrdinal("val")] = val;


                    id[0]  = _id[i];
                    str[0] = _str[i];
                    dt[0]  = _dt[i];
                    val[0] = _val[i];

                    await writer.WriteTableAsync(columns, 1, CancellationToken.None);

                    await writer.EndWriteAsync(CancellationToken.None);
                }
            }
            else
            {
                for (int i = 0; i < Rows; i++)
                {
                    await using var connection = new ClickHouseConnection(_connectionSettings);
                    await connection.OpenAsync();

                    await using var writer = connection.CreateColumnWriter("INSERT INTO ColumnWriterInsertBenchmarks VALUES");

                    var columns = new object[4];
                    columns[writer.GetOrdinal("id")]  = id;
                    columns[writer.GetOrdinal("str")] = str;
                    columns[writer.GetOrdinal("dt")]  = dt;
                    columns[writer.GetOrdinal("val")] = val;

                    id[0]  = _id[i];
                    str[0] = _str[i];
                    dt[0]  = _dt[i];
                    val[0] = _val[i];

                    await writer.WriteTableAsync(columns, 1, CancellationToken.None);

                    //await writer.EndWriteAsync(CancellationToken.None);
                }
            }
        }