Массовая вставка/загрузка в MySQL и HBase

У меня есть система с двумя процессами, один из которых выполняет одиночную вставку, а другой — массовую вставку. Очевидно, что второй процесс быстрее, и я работаю над переносом первого процесса на механизм массовой вставки, но сегодня утром меня поставил в тупик вопрос коллеги о том, «почему массовая вставка будет быстрее, чем одиночная вставка».

Так действительно, почему массовая вставка выполняется быстрее, чем одиночная вставка?

Кроме того, есть ли различия между массовыми и одиночными вставками в MySQL и HBase, учитывая, что их архитектуры баз данных совершенно разные? Я использую оба для своего проекта, и мне интересно, есть ли различия в массовых и одиночных вставках для этих двух баз данных.


person Suman    schedule 06.02.2013    source источник


Ответы (2)


Насколько я знаю, это также зависит от конфигурации Hbase. Обычно массовая вставка означает использование List of Puts вместе, в этом случае вставка (называемая flushing в слое habse) выполняется автоматически при вызове table.put. Одиночные вставки могут ожидать любого другого вызова вставки, чтобы выполнить пакетную очистку в среднем слое. Однако это также будет зависеть от конфигурации.

Другой причиной может быть простота задачи, более эффективная карта и уменьшение, если у вас больше заданий одновременно. Миграция фрагментов файла решается для всех входов единовременно. Но в отдельных вставках это становится решающим моментом.

person Kris    schedule 08.02.2013

Короче говоря, операция массовой загрузки обходит обычный путь записи. Вот почему это быстро.
Итак, что происходит во время обычного процесса записи, когда вы выполняете простую операцию построчного размещения?
Все данные записываются одновременно в WAL и memstore, и когда мемстор заполнен, данные сбрасываются в новый HFile.
Однако в случае Bulkload он напрямую записывает StoreFile в работающий кластер hbase.НЕТПромежуточные элементы...
Быстрый совет
- если вы этого не сделаете Если вы не хотите использовать массовую загрузку, так как часто это делается короткими пакетами, что создает дополнительную нагрузку на кластер, вы можете написать в WAL false, используя Put.setWriteToWal(false), чтобы сэкономить время. Но это увеличит ваши шансы на потерю данных.

person Chandra kant    schedule 19.03.2014