Кассандра: Тысячи записей для вставки
-
21-12-2019 - |
Вопрос
Я использую кассандру с драйвером C ++, и я наблюдал очень медленную производительность при вставке тысяч строк.Я использую VM Ubuntu 12.04 LTS с 8GO RAM и 4CPUS.
У меня есть файл ASCII, который содержит 15800 записей, и я пытаюсь прочитать каждую запись и заполнить мою таблицу Cassandra DB.Команда «копирования» заняла около 1 млн. 30сек.При запросе после прочтения каждая запись один за другим занял около 6-7 минут и с пакетным запросом, который требуется навсегда (длилось 30 минут, тогда я отказываюсь от!).
Я хотел бы знать, есть ли какое-либо решение для такого рода введения с более быстрой производительностью.
Большое спасибо!
Решение 2
Мне удалось сократить промежуток времени до 12,5 секунды, нарезав партию.Вот решение, если он может помочь другим, и я был бы счастлив, если кто-то еще может обеспечить лучшее :)
int nb_lines = 0;
int rest = 0;
string create_query = "BEGIN BATCH ";
std::ifstream file("/media/sf_Shared/xfmge");
for(string line; getline(file, line);){
stringstream sstm;
if(nb_lines == 800 ) {
nb_lines = 0;
rest = 0;
create_query += " APPLY BATCH;";
boost::shared_ptr<cql::cql_query_t> create(
new cql::cql_query_t(create_query, cql::CQL_CONSISTENCY_ONE));
query_result = session->query(create);
query_result.wait();
if (query_result.get().error.is_err()) {
cout << "-isbuild - ERROR for query: " << create_query << endl;
cout << query_result.get().error.message << endl;
return iserrno;
} else {
cout << "+isbuild - QUERY SUCCESSFUL: " << create_query << endl;
}
create_query = "BEGIN BATCH ";
} else {
record = (char*)line.c_str();
sstm << "insert into felder (id, data) values ('felder', '" << record << "') ";
create_query += sstm.str();
rest = 1;
}
nb_lines ++;
}
if(rest == 1){
create_query += " APPLY BATCH";
boost::shared_ptr<cql::cql_query_t> create(
new cql::cql_query_t(create_query, cql::CQL_CONSISTENCY_ONE));
query_result = session->query(create);
query_result.wait();
if (query_result.get().error.is_err()) {
cout << "-isbuild - ERROR for query: " << create_query << endl;
cout << query_result.get().error.message << endl;
return iserrno;
} else {
cout << "+isbuild - QUERY SUCCESSFUL: " << create_query << endl;
}
}
. Другие советы
Вот мой исходный код:
string create_query = "BEGIN BATCH ";
std::ifstream file("/media/sf_Shared/xfmge");
for(string line; getline(file, line);){
stringstream sstm;
record = (char*)line.c_str();
sstm << "insert into felder (id, data) values ('felder', '" << record << "') ";
create_query += sstm.str();
}
create_query += " APPLY BATCH;";
boost::shared_ptr<cql::cql_query_t> create(
new cql::cql_query_t(create_query, cql::CQL_CONSISTENCY_ONE));
query_result = session->query(create);
cout << "sending..." << endl;
query_result.wait();
if (query_result.get().error.is_err()) {
cout << "-isbuild - ERROR in query: " << create_query << endl;
cout << query_result.get().error.message << endl;
return iserrno;
} else {
cout << "+isbuild - QUERY SUCCESSFUL: " << create_query << endl;
}
.