blob: 2fafb46554a537016aafa05bb325bdf2d212430d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* License); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include <time.h>
#include <iostream>
#include <random>
#include <string>
#include "cpp_examples.h"
using namespace storage;
long getNowTime() { return time(nullptr); }
static std::string generate_random_string(int length) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 61);
const std::string chars =
"0123456789"
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string random_string;
for (int i = 0; i < length; ++i) {
random_string += chars[dis(gen)];
}
return random_string;
}
int demo_write() {
TsFileWriter* tsfile_writer_ = new TsFileWriter();
libtsfile_init();
std::string file_name_ = std::string("tsfile_writer_test_") +
generate_random_string(10) +
std::string(".tsfile");
int flags = O_WRONLY | O_CREAT | O_TRUNC;
#ifdef _WIN32
flags |= O_BINARY;
#endif
mode_t mode = 0666;
tsfile_writer_->open(file_name_, flags, mode);
remove(file_name_.c_str());
const int device_num = 50;
const int measurement_num = 50;
std::vector<MeasurementSchema> schema_vec[50];
for (int i = 0; i < device_num; i++) {
std::string device_name = "test_device" + std::to_string(i);
for (int j = 0; j < measurement_num; j++) {
std::string measure_name = "measurement" + std::to_string(j);
schema_vec[i].push_back(
MeasurementSchema(measure_name, common::TSDataType::INT32,
common::TSEncoding::PLAIN,
common::CompressionType::UNCOMPRESSED));
tsfile_writer_->register_timeseries(
device_name, measure_name, common::TSDataType::INT32,
common::TSEncoding::PLAIN,
common::CompressionType::UNCOMPRESSED);
}
}
std::cout << "input tablet size" << std::endl;
int tablet_size;
std::cin >> tablet_size;
int max_rows = 100000;
int cur_row = 0;
long start = getNowTime();
for (; cur_row < max_rows;) {
if (cur_row + tablet_size > max_rows) {
tablet_size = max_rows - cur_row;
}
for (int i = 0; i < device_num; i++) {
std::string device_name = "test_device" + std::to_string(i);
Tablet tablet(device_name, &schema_vec[i], tablet_size);
tablet.init();
for (int row = 0; row < tablet_size; row++) {
tablet.set_timestamp(row, 16225600 + cur_row + row);
}
for (int j = 0; j < measurement_num; j++) {
for (int row = 0; row < tablet_size; row++) {
tablet.set_value(row, j, row + cur_row);
}
}
tsfile_writer_->write_tablet(tablet);
tsfile_writer_->flush();
}
cur_row += tablet_size;
std::cout << "finish writing " << cur_row << " rows" << std::endl;
}
tsfile_writer_->close();
long end = getNowTime();
printf("interval waitForResults is %ld \n", end - start);
return 0;
}