У меня есть простая таблица, которую я заполняю с помощью драйвера datastax cpp. Таблица хранится в базе данных cassandra. Таблица создается следующим образом:улучшить время вставки в базу данных cassandra с помощью драйвера datastax cpp
create table data (
dt_id int PRIMARY KEY,
dt_numbers list<int>,
insertion_time timestamp,
)
Таким образом, для каждой строки я вставив
VALUES (1, [1,2,3,4], now())
Проблема заключается в том, что я попытался вставить 1 миллион rowσ и время было 35 минут. Это время считается высоким в производственной среде.
Некоторые псевдокод:
std::map<int, vector<int>> myData;
for(all entries in myData) {
const char* query = "INSERT INTO...";
future = cass_session_execute(session, statement);
cass_future_wait(future);
}
Данные сохраняются в станд :: карте, и я не забочусь, отображающих индекс будет записан первым, но каждая запись карта должна быть вставлена точно один. Есть ли способ повысить производительность этой программы? Есть ли пример?
код я использую до сих пор, чтобы написать одну строку за другой и схожа с кодом, используемым в одном из примеров datastax
CassError insert_into_basic(CassSession* session, const char* key, const Basic* basic) {
CassError rc = CASS_OK;
CassStatement* statement = NULL;
CassFuture* future = NULL;
const char* query = "INSERT INTO examples.basic (key, bln, flt, dbl, i32, i64) VALUES (?, ?, ?, ?, ?, ?);";
statement = cass_statement_new(query, 6);
cass_statement_bind_string(statement, 0, key);
cass_statement_bind_bool(statement, 1, basic->bln);
cass_statement_bind_float(statement, 2, basic->flt);
cass_statement_bind_double(statement, 3, basic->dbl);
cass_statement_bind_int32(statement, 4, basic->i32);
cass_statement_bind_int64(statement, 5, basic->i64);
future = cass_session_execute(session, statement);
cass_future_wait(future);
rc = cass_future_error_code(future);
if (rc != CASS_OK) {
print_error(future);
}
cass_future_free(future);
cass_statement_free(statement);
return rc;
}