Apache Ignite 2.17 - переживание медленных записей с использованием putall ()C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Apache Ignite 2.17 - переживание медленных записей с использованием putall ()

Сообщение Anonymous »

В настоящее время я вставляю данные в кэш восжинателя с использованием тонкого клиента C ++. < /p>
Настройка Ignite состоит из одного локального узла Ignite и 4 вычислительных двигателей (на основе C ++ с идентичным кодом)

. job

[*] Расчеты запуска

[*] Вставьте сгенерированные результаты обратно в кэш воспламенения

Каждый раз, когда получаются результаты, у нас в общей сложности для 1250000 ROW (значения) для обоснования. />
Я использую API клавиш-значения и, в частности, putall () для вставки результатов. Я вставляю данные в партиях 2500, поэтому Ignite не ошеломлен. - Job 1: Time taken to write results to Ignite: 71 seconds.

- Job 2: Time taken to write results to Ignite: 88 seconds

- Job 3: 139 seconds

- Job 4: 205 seconds
.........

- Job 27: 1622 seconds

- Job 28: 1654 seconds
...........

- Job 46: 2445 seconds

- Job 47: 2728 seconds

- Job 48: 3247 seconds

- Job 49: 2480 seconds
< /code>
Каждый двигатель в конечном итоге должен обрабатывать около 700 заданий. Я использую неэффективные структуры или неэффективно вставляю записи? Первоначально, когда для выполнения вставки требуется около 2 минут, я не могу понять, почему время экспоненциально увеличивается для последующих заданий. < /P>
Я изначально использовал языковые вставки запросов SQL, которые я позже изменил на API-значения с ключе C ++ Тонкий клиент.










































0.0.0.0:47500..47509








< /code>
Пример кода (только для ссылки не компилируется): < /p>
const size_t BATCH_SIZE = 2500;
const int NUM_THREADS = 2;
const int maxRetries = 3;
const std::chrono::milliseconds retryDelay(1000);
if (analytic_name == "MYANALYTIC") {

std::map batch;

for (size_t i = startIdx; i < endIdx; ++i) {
const auto& v = allData;
if (v.size() < 13) continue;

std::string uniqueId = groupId + "_" + std::to_string(i);
ResultKey key(uniqueId, v[0]);
ResultValue val(v[1], v[2], std::stod(v[3]), std::stod(v[4]),
v[5], std::stod(v[6]), v[7], std::stod(v[8]),
v[9], std::stod(v[10]), v[11], v[12]);

batch[key] = val;
if (++rowsWritten % BATCH_SIZE == 0) {
for (int attempt = 0; attempt < maxRetries; ++attempt) {
try {
myCache.PutAll(batch);
batch.clear();
break;
} catch (...) {
std::this_thread::sleep_for(retryDelay);
}
}
}
}

if (!batch.empty()) {
for (int attempt = 0; attempt < maxRetries; ++attempt) {
try {
myCache.PutAll(batch);
break;
} catch (...) {
std::this_thread::sleep_for(retryDelay);
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-putall
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»