Введение в функцию DB2 Continuous Data Ingest

Знакомство с новой командой DB2 INGEST

В IBM® DB2® 10.1 для Linux®, Unix® и Windows® появилась функция Continuous Data Ingest. Команда INGEST составляет альтернативу известным методам предыдущих версий DB2: IMPORT и LOAD. В этой статье разъясняются основные концепции утилиты Ingest и приводятся примеры и ситуации, когда этот инструмент помогает заполнить базу данных.

Уильям Риги, администратор базы данных DB2, IBM

Author PhotoСпециалист по базам данных Уильям Риги (Wiliam Righi) работает с DB2 более 10 лет. С большим энтузиазмом принимает все новые возможности DB2. С момента своего прихода в IBM в 2005 году поддерживает внутренние и внешние учетные записи организации IBM GTS. В настоящее время занимается анализом основных причин серьезных инцидентов и разработкой сценариев оболочки для клиентов IBM. Любит играть в футбол, читать о спиритизме и общаться с семьей.



21.06.2013

Введение

В IBM DB2 10.1 для Linux, Unix и Windows появилась концепция Continuous Data Ingest (CDI). Эта новая функция позволяет вводить данные в таблицы DB2, не оказывая влияния на работающие приложения. Основная цель данной технологии ― наполнение данными витрин и хранилищ данных, работающих в режиме, близком к режиму реального времени. В таких системах обновление данных настолько важно, что клиенты не могут ждать следующего окна загрузки, чтобы получить доступ к свежим данным.

Функция CDI реализована посредством инструмента Ingest, клиентской утилиты, которая для вставки данных в таблицы использует параллельные сеансы. Решение может быть установлено как на сервере, так и со стороны клиента. Инструмент обеспечивает также параметры настройки для управления выполнением команды, такие как количество параллельных потоков, в которых будут вставляться или форматироваться данные. Этот новый метод поддерживается базами данных с одним и несколькими разделами, средой Purescale и базами данных с поддержкой HADR.

В этой статье мы начнем с основ ― вашей первой команды INGEST, а затем исследуем возможности форматирования, способы настройки Ingest с целью повышения производительности и обеспечения параллелизма, а также рассмотрим архитектуру процесса. Наконец, читатель познакомится с некоторыми реальными сценариями, в которых CDI помогает клиентам достичь своих бизнес-целей.


Ваша первая команда INGEST

Прежде чем приступить к применению команды INGEST, нужно создать управляющую таблицу (SYSTOOLS.INGESTRESTART), которую инструмент использует для восстановления и перезапуска неудавшихся операций. Эта таблица создается с помощью процедуры, показанной в листинге 1.

Листинг 1. Создание управляющих таблиц Ingest
db2 'call sysproc.sysinstallobjects ( 'INGEST' ,'C' , null, null )';

После создания управляющей таблицы самый простой метод вызова утилиты Ingest ― использование команды, показанной в листинге 2.

Листинг 2. Первая команда INGEST
db2 'ingest from file tab1.del format delimited insert into tab1';

Эта команда вставляет в tab1 все строки, считанные из файла tab1.del. В данном примере tab1.del представляет собой файл ASCII с запятой (,) в качестве разделителя, который можно создать с помощью любого инструмента, такого как DB2 EXPORT.

Ограничения инструмента

  • Команда INGEST не поддерживает формат DB2 IXF, как другие инструменты. В настоящее время поддерживаются только входные форматы ASCII ― с разделителями или позиционные.
  • Не поддерживаются и типы данных XML и LOB. Если нужно загрузить данные этих типов, используйте команды LOAD или IMPORT.
  • Ingest нельзя использовать и тогда, когда нужно загрузить столбцы типа GENERATED ALWAYS или SYSTEM_TIME. В таких случаях можно применить инструмент LOAD с предложением identityoverride.

Синтаксический анализ входного файла

Во многих случаях входной файл находится не в том формате, какой непосредственно обрабатывается базой данных, как показано в первом примере. В таких случаях Ingest предоставляет способы синтаксического анализа входного файла. Два основных типа входных файлов ― это файлы с разделителями и позиционные файлы.

Работа с файлами с разделителями

У входных файлов с разделителями поля и строки разделяются специальным символом. По умолчанию поля разделяются запятой (,), а каждая новая строка входного файла соответствует новой вставляемой записи. Если в качестве разделителя во входном файле используется любой другой символ, то для его указания можно использовать команду, показанную в листинге 3.

Листинг 3. Использование условия delimited by
db2 "ingest from file tab1.del format delimited by ';' insert into tab1";

Форматирование входных значений

Если входные значения находятся не в формате, ожидаемом DB2, то для описания формата входного файла можно использовать дополнительные условия команды INGEST. Это очень полезно при работе с файлами из других систем, которые могут использовать разные способы представления данных, такие как метки времени, числа и т.п., как показано в листинге 4.

Листинг 4. Форматирование входных значений
db2 'ingest from file tab1.del 
     format delimited (
         $col1 INTEGER EXTERNAL,
         $col2 CHAR(10),
         $col3 DATE 'dd-mm-yyyy'
     ) insert into tab1 values ($col1, $col2, $col3)';

Совет: предложение EXTERNAL следует использовать с числовыми типами данных, когда значения заданы представлением ASCII (а не двоичными числами).

Кроме того, предложение format позволяет выполнять простые преобразования входных значений (такие как суммы или конкатенации) или даже пропускать некоторые входные поля, как показано в листинге 5.

Листинг 5. Форматирование входных значений
db2 'ingest from file tab1.del 
     format delimited (
         $fname CHAR(30),
         $lname CHAR(30),
         $birth DATE 'dd-mm-yyyy'
    ) insert into tab1 (name, birthdate) 
         values ($lname CONCAT ',' CONCAT $fname, $birth)';

Работа с позиционными файлами

Позиционные входные файлы не разделяются никаким специальным символом. Вместо этого пределы столбца определены длиной и положением каждого поля во входном файле, как показано в листинге 6.

Листинг 6. Пример позиционного входного файла
A00    SPIFFY COMPUTER SERVICE DIV.         000010 A00      -
B01    PLANNING                             000020 A00      -
C01    INFORMATION CENTER                   000030 A00      -
D01    DEVELOPMENT CENTER                   -      A00      -
D11    MANUFACTURING SYSTEMS                000060 D01      -
D21    ADMINISTRATION SYSTEMS               000070 D01      -
E01    SUPPORT SERVICES                     000050 A00      -
E11    OPERATIONS                           000090 E01      -
E21    SOFTWARE SUPPORT                     000100 E01      -
F22    BRANCH OFFICE F2                     -      E01      -
G22    BRANCH OFFICE G2                     -      E01      -
H22    BRANCH OFFICE H2                     -      E01      -
I22    BRANCH OFFICE I2                     -      E01      -
J22    BRANCH OFFICE J2                     -      E01      -

В примере, приведенном в листинге 6, нужно знать, что первый столбец начинается в позиции 1 и заканчивается в позиции 7. Второй столбец начинается в позиции 8 и продолжается до позиции 44 и т.п. Если значение не заполняет все пространство, то вставляются пробелы до следующего по порядку значения, чтобы сделать размер записи фиксированным.

Для описания позиционного входного файла используется предложение POSITIONAL с указанием пределов каждого столбца, как показано в листинге 7.

Листинг 7. Команда INGEST с предложением POSITIONAL
db2 'ingest from file tab1.del 
     format positional (
         $col1 POSITION(1:7) CHAR(7),
         $col2 POSITION(8:44) CHAR(37),
         $col3 POSITION(45:51) CHAR(7),
	 $col4 POSITION(52:59) CHAR(9),
	 $col5 POSITION(60:69) CHAR(9)
     ) insert into tab1 values ($col1, $col2, $col3, $col4, $col5)';

Обработка значений NULL в позиционном файле

В позиционных файлах могут возникать проблемы при работе со значениями null. В примере позиционного входного файла, приведенном в листинге 7, есть специальный символ для представления значений NULL: '-' (дефис). По умолчанию утилита Ingest воспримет его не как значение null, а как строку, содержащую один символ ('-'). В таких случаях необходим способ сообщить утилите Ingest, чтобы она воспринимала этот специальный символ как указатель NULL. Это можно сделать с помощью предложения DEFAULTIF, как показано в листинге 8.

Листинг 8. Обработка значений NULL в позиционных операциях Ingest
db2 'ingest from file tab1.del 
     format positional (
         $col1 POSITION(1:7) CHAR(7),
         $col2 POSITION(8:44) CHAR(37),
         $col3 POSITION(45:51) CHAR(7) DEFAULTIF ='-',
	 $col4 POSITION(52:59) CHAR(9),
	 $col5 POSITION(60:69) CHAR(9) DEFAULTIF ='-'
     ) insert into tab1 values ($col1, $col2, $col3, $col4, $col5)';

При использовании команды, показанной в листинге 8, всякий раз, когда значение, считанное из входного файла, начинается с '-', для столбца будет использоваться значение по умолчанию. Значением по умолчанию для столбцов, допускающих значение NULL, является значение NULL. Для столбцов, не допускающих значений NULL, значение по умолчанию может быть указано в табличных операторах CREATE или ALTER.


Изучение других возможностей

Загрузка из нескольких файлов одновременно

В одном вызове Ingest можно указать несколько входных файлов. Это может быть особенно полезно в задачах ETL, когда обрабатываются несколько файлов, как показано в листинге 9.

Листинг 9. Задание нескольких входных файлов
db2 'ingest from file1.del, file2.del format delimited insert into tab1';

Совет: для автоматизации вставки нескольких файлов можно использовать очень простые сценарии оболочки, как показано в листинге 10.

Листинг 10. Пример сценария для выполнения команды Ingest с несколькими файлами
#В предположении, что стандарт имени файла: INGxx
FILES=$(ls -m ING*)
db2 connect to target
db2 "ingest from file $FILES format delimited insert into tab1"

Использование конвейеров в качестве входных данных

Ввод из конвейеров позволяет избежать создания больших входных файлов, если перемещаются данные, расположенные на одном и том же сервере. Например, в листинге 11 данные перемещаются из базы данных, расположенной в каталоге db2inst1, в базу данных, расположенную в каталоге db2inst2.

Листинг 11. Ввод данных из конвейеров
# Из сеанса db2inst1 
mkfifo /tmp/fifo   
db2 'export to /tmp/fifo of del select * from source_table'
	
# Из сеанса db2inst2
db2 'ingest from /tmp/fifo format delimited insert into target_table'

Совет: этот подход можно использовать и при соединении с удаленной базой данных. Просто удаленная база данных (источник) должна быть каталогизирована в локальном каталоге.


Обновление, удаление и слияние данных

В приведенных выше примерах инструмент Ingest использовался для вставки (добавления) данных в таблицы DB2. В отличие от других доступных методов, утилита Ingest предоставляет целый ряд SQL-операций, таких как обновление, слияние и удаление. Большое преимущество этого метода заключается в том, что он предоставляет способ выполнять эти операции параллельно – с использованием параллельной архитектуры Ingest. В листинге 12 приведены несколько примеров операций с применением Ingest.

Листинг 12. Обновление, удаление и слияние данных
# Редактирование строк
db2 'ingest from file tab1.del 
     format delimited (
         $col1 INTEGER EXTERNAL,
         $col2 CHAR(10),
         $col3 DATE 'dd-mm-yyyy'
     ) update tab1 set (name, date) = ($col2, $col3)
       where id=$col1'

# Использование команды MERGE для вставки или редактирования
db2 'ingest from file tab1.del 
     format delimited (
         $col1 INTEGER EXTERNAL,
         $col2 CHAR(10),
         $col3 DATE 'dd-mm-yyyy'
     ) merge into tab1 on (id=$col1)
         when matched then
              update set (name, date) = ($col2, $col3)
         when not matched then
              insert values ($col1, $col2, $col3)'

# Удаление строк, считанных из входного файла
db2 'ingest from file tab1.del 
     format delimited (
         $col1 INTEGER EXTERNAL,
         $col2 CHAR(10),
         $col3 DATE 'dd-mm-yyyy'
     ) delete from tab1
           where (id=$col1)'

Перезапуск операций Ingest

Утилита Ingest предоставляет способ перезапуска неудавшихся операций. Чтобы использовать эти возможности, необходимо создать управляющую таблицу, описанную в п. 1. Для инициирования перезапускаемой операции Ingest необходимо использовать предложение RESTART NEW, как показано в листинге 13.

Листинг 13. Инициирование перезапускаемой операции Ingest
db2 'ingest from file tab1.del 
     format positional (
         $col1 POSITION(1:10) INTEGER EXTERNAL,
         $col2 POSITION(11:20) CHAR(10),
         $col3 POSITION(21:30) DATE 'dd-mm-yyyy'
     ) restart new 'ingest-20130223' 
       insert into tab1 values ($col1, $col2, $col3)'

Для уникальной идентификации операции Ingest в таблице управления будет использоваться ключ ingest-20130223. Если не указано никакое значение, то DB2 сама сгенерирует уникальный ключ, но в случае перезагрузки, чтобы определить его, нужно будет обратиться к управляющей таблице (SYSTOOLS.INGESTRESTART), как показано в листинге 14.

Листинг 14. Перезапуск операции Ingest
db2 'ingest from file tab1.del 
     format positional (
         $col1 POSITION(1:10) INTEGER EXTERNAL,
         $col2 POSITION(11:20) CHAR(10),
         $col3 POSITION(21:30) DATE 'dd-mm-yyyy'
     ) restart continue 'ingest-20130223' 
       insert into tab1 values ($col1, $col2, $col3)'

Используя сведения, хранящиеся в управляющей таблице, утилита Ingest проверит, сколько строк было успешно обработано до сбоя, и выполнит перезапуск с этого места.


Изменение параметров Ingest

Чтобы настроить параметры, влияющие на работу Ingest, используйте команду INGEST SET. Команда INGEST SET работает на уровне сеанса, поэтому каждый раз при подключении к базе данных необходимо снова задать параметры Ingest. Из предоставляемых вариантов можно выбрать количество потоков форматизатора (formatter) и очистителя (flusher), количество или период фиксаторов и количество повторных попыток, как показано в листинге 15.

Листинг 15. Использование команды INGEST SET
db2 ingest set commit_count 5000;
db2 ingest set commit_period 0;
db2 'ingest from file tab1.del 
     format positional (
         $col1 POSITION(1:10) INTEGER EXTERNAL,
         $col2 POSITION(11:20) CHAR(10),
         $col3 POSITION(21:30) DATE 'dd-mm-yyyy'
     ) insert into tab1 values ($col1, $col2, $col3)'

Имеются и другие варианты.

  • commit_period: значение по умолчанию ― 1 с. Указывает количество секунд между фиксациями (COMMIT). При использовании больших значений убедитесь, что фиксируемые параметры правильно настроены на поддержку параллелизма.
  • num_flushers_per_partition: Количество сеансов, используемых утилитой Ingest для сброса данных в базу данных.
  • num_formatters: параметр настройки числа потоков форматизаторов.
  • pipe_timeout: параметр настройки таймаута конвейера.
  • retry_count: в некоторых случаях неудачная транзакция может быть восстановлена путем повторной команды. Тогда этот параметр указывает, сколько попыток будет предпринято. Примерами восстановимых сбоев служат таймауты блокировки, взаимоблокировки, сбои соединения (например, во время захвата HADR) и др.
  • retry_period: время ожидания между повторными попытками.
  • shm_max_size: параметр настройки максимального размера общей памяти, используемой утилитой.

Архитектура Ingest

Команда INGEST представляет собой клиентский инструмент, который можно вызвать как со стороны клиента, так и со стороны сервера. Это позволяет запускать команду INGEST там, где расположены входные файлы, как показано на рисунке 1.

Рисунок 1. Команда INGEST, выполненная из клиентской рабочей станции
Команда INGEST, выполненная из клиентской рабочей станции

В этом первом примере команда INGEST запускается клиентом DB2, работающим на рабочей станции пользователя. Клиент DB2 отвечает за чтение файлов (или конвейеров), форматирование содержимого и выполнение удаленных операций INSERT в базу данных DB2. Такого рода решение может быть подвержено влиянию пропускной способности сети.

Во избежание этой проблемы можно запускать команду INGEST локально на сервере DB2. В этом случае входные файлы нужно предварительно скопировать на сервер DB2, как показано на рисунке 2.

Рисунок 2. Команда INGEST выполняется локально с сервера DB2
На этом рисунке показана команда Ingest, выполняемая локально с сервера DB2

Внутренне архитектура Ingest представляет собой многопоточный процесс. Существует три типа потоков (транспортеры, форматизаторы и очистители), ответственных за каждую фазу операции Ingest, как показано на рисунке 3.

Рисунок 3. Многопоточная архитектура Ingest
Многопоточная архитектура Ingest
  • Транспортер отвечает за чтение входных файлов или конвейеров
  • Форматизатор выполняет основное форматирование входных файлов, как указано в команде INGEST. Количество модулей форматирования можно оптимизировать с помощью параметра num_formatters команды INGEST SET.
  • Очиститель записывает данные в таблицы DB2, используя массив операций вставки. Они же отвечают за управления транзакциями. Количество этих потоков можно настроить с помощью параметра num_flushers_per_partition.

Настройка производительности операции Ingest

Благодаря параллельной архитектуре операции Ingest ее настройку следует выполнять очень тщательно, чтобы добиться максимальной пропускной способности. Также очень важно учитывать ресурсы сервера, такие как количество процессоров и объем доступной памяти.

Параметры блокировки

Параметры настройки блокировки имеют решающее значение для пропускной способности операции Ingest. Если параметры LOCKLIST и MAXLOCKS настроены неправильно, то потоки Ingest могут заблокировать друг друга (за счет эскалации блокировки), что приведет к снижению общей производительности. Нужно также принимать во внимание конфликты при блокировках, вызванные выполнением других транзакций в базе данных.

В качестве общей рекомендации: включите функцию DB2 Self Tuning Memory Management (STMM) для базы данных (SELF_TUNING_MEM=ON) и установите LOCKLIST и MAXLOCKS в автоматический режим. С помощью этого метода DB2 будет регулировать эти параметры во время выполнения в зависимости от текущей рабочей нагрузки.

Ведение журнала транзакций

Помните, что большие операции Ingest производят много записей регистрации событий. Просмотрите все параметры, которые влияют на активное пространство журнала, такие как LOGFIZSZ, LOGPRIMARY и LOGSECOND, и убедитесь, что они не помешают операции Ingest.

Также просмотрите механизм архивирования журналов. Так как файлов журналов будет производится больше, процесс архивирования должен справляться с этой новой рабочей нагрузкой. Если выполняется архивирование журналов на диск, убедитесь, что место, в которое будут архивироваться журналы (диск или файловая система), позволит хранить большее количество создаваемых журналов.

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

Регулирование параметров Ingest

Некоторые из параметров, которые можно настроить непосредственно с помощью команды INGEST SET, влияют на производительность ввода данных.

Избегайте ненужных фиксаций

Если вы планируете управлять фиксациями только посредством параметра commit_count, то убедитесь, что значение параметра commit_period равно 0. В противном случае будет установлено значение commit_period по умолчанию в 1 секунду, и транзакции будут фиксироваться на основе обоих критериев.

commit_count и commit_period: если установить слишком низкие значения, то это повлияет на производительность Ingest ввиду большого количества фиксируемых транзакций. Обычно при настройке этих параметров рекомендуется сбалансировать производительность и параллелизм. С другой стороны, чрезмерно высокое значение этих параметров может негативно повлиять на механизм блокировки DB2. Если оба параметра не заданы, то Ingest будет выполнять фиксацию каждую секунду.

num_flushers_per_partition: по умолчанию команда INGEST вычисляет оптимальное значение этого параметра в зависимости от доступного числа логических процессоров. Если во время выполнения операции Ingest ресурсы процессоров простаивают, и вы хотите принудительно использовать больше потоков обработки, то можете попробовать увеличить этот параметр. Учтите, что в системах с функцией Database Partition, использующих логические разделы (несколько разделов базы данных на одном физическом сервере), этот параметр действует на уровне разделов, так что количество потоков умножается на количество логических разделов на сервере.

num_formatters and shm_max_size: по умолчанию Ingest вычисляет оптимальные значения этих параметров во время запуска.


Мониторинг операций Ingest

Выполнение операций Ingest необходимо контролировать, как и любую другую утилиту, работающую с DB2. Для контроля операций Ingest используются две команды: INGEST LIST и INGEST GET STATS.

Команда INGEST LIST

Это основная команда для проверки, того, выполняется ли на сервере какая-нибудь операция Ingest. Среди представляемой информации можно выделить загружаемые таблицы, время начала и количество обработанных строк. Другая важная часть информации ― это идентификатор заданий, который используется для получения подробной информации о задании Ingest, как показано в листинге 16.

Листинг 16. Идентификатор задания
db2inst2@asdp:~$ db2 ingest list
 
Ingest job ID               = DB21001:20130312.143314.008948:00002:00005
Ingest temp job ID          = 1
Database Name               = SAMPLE
Target table                = DB2INST2.DEPARTMENT
Input type                  = FILE
Start Time                  = 03/12/2013 14:33:14.406157
Running Time                = 00:00:06
Number of records processed = 22000

DB20000I  The INGEST LIST command completed successfully.

Команда INGEST GET STATS

Команда INGEST GET STAT позволяет получить более подробную информацию о работе утилиты Ingest. Эта команда особенно полезна для проверки показателей производительности Ingest. В примере, приведенном в листинге 17, команда сбора данных о производительности задания с ID=1 вызывается каждую секунду, пока выполняется Ingest.

Листинг 17. Пример выполнения команды INGEST GET STATS
db2inst2@asdp:~$ db2 ingest get stats for 1 every 1 seconds
 
Ingest job ID               = DB21001:20130312.143701.363666:00002:00005
Database Name               = SAMPLE
Target table                = DB2INST2.DEPARTMENT
 
Overall           Overall           Current           Current
ingest rate       write rate        ingest rate       write rate
(records/second)  (writes/second)   (records/second)  (writes/second)   Total records
----------------- ----------------- ----------------- ----------------- -----------------
            20000              1600            100000              8000              8000
            16666              3666                 0             14000             22000
            14285              3142                 0                 0             22000
            12500              4375                 0             13000             35000
            11111              5666                 0             16000             51000
            10000              5900                 0              8000             59000
             9090              5363                 0                 0             59000
             8333              7083                 0             26000             85000
             7692              6538                 0                 0             85000
             7142              6714                 0              9000             94000
             6666              6666                 0              6000            100000

DB20000I  The INGEST GET STATS command completed successfully.

Сравнение Ingest с другими методами

До версии IBM DB2 10.1 для ввода данных в таблицы приходилось выбирать между утилитами IMPORT и LOAD. Утилита Ingest составляет альтернативу другим методам, так как сочетает высокую пропускную способность при вводе данных с высокой степенью параллелизма их обработки в приложениях. Краткое сравнение методов приведено в таблице 1.

Таблица 1. Сравнение Ingest с другими методами ввода данных
СвойствоIMPORTINGESTLOAD
БыстродействиеНизкое. Использует последовательные операции INSERT.Высокое. Использует параллельные операции INSERTОчень высокое. Данные вводятся непосредственно в контейнеры DB2.
ПараллелизмВысокий, хотя могут происходить блокировки на уровне таблицы. Очень высокий, используются блокировки на уровне строк.Низкий. Разрешены только операции чтения.
ПротоколированиеЕстьЕстьНет, вводимые данные не регистрируются.
Поведение в случае отказаОткат. Таблица доступна.Откат. Таблица доступна.Таблица переходит в состояние ожидания загрузки. Требуется ручное вмешательство.
Поддержка LOB и XML-данныхЕстьНетЕсть

Способы использования Continuous Data Ingest

Ниже для пояснения концепции CDI описаны несколько практических ситуаций, когда утилита Ingest помогает клиентам достичь своих целей.

Оперативное хранилище данных

В базах данных, особенно киосках данных и хранилищах данных, когда данные должны обновляться в режиме, близком к режиму реального времени, пользователи не могут ждать следующего окна загрузки, чтобы получить свежие данные. И не могут выполнять автономные задания загрузки в рабочее время.

В этих случаях Ingest можно использовать для ввода данных в таблицы без влияния на выполнение запросов или приложений. Высокая степень параллелизма, которую обеспечивает Ingest, практически исключает необходимость в окне автономного режима для заполнения базы данных. Кроме того, производительность этого инструмента обеспечивает возможность загрузки большого количества данных с высокой пропускной способностью. Тесты показывают, что производительность операции Ingest сопоставима с временем, расходуемым при стандартном подходе с использованием операции LOAD для записи в промежуточную таблицу с последующим применением операций INSERT/SELECT для записи в целевые таблицы.

Заполнение базы данных HADR

Использовать утилиту LOAD с базами данных HADR особенно трудно. Единственный способ ― указать предложение COPY YES. Тем не менее, основной и резервный серверы должны иметь общую файловую систему, иначе требуется ручное вмешательство администратора, чтобы сохранить синхронизацию HADR после загрузки.

Ingest в этом случае обеспечивает преимущество, так как процесс полностью протоколируется, и HADR автоматически реплицирует все вставленные строки на резервный сервер без вмешательства пользователя.


Заключение

Системы поддержки принятия решений имеют решающее значение для компаний, и число пользователей, которые обращаются к данным BI, растет с каждым днем. Новые приложения с использованием хранилища данных требуют, чтобы свежие данные были доступны для запросов как можно скорее. Для поддержки этого спроса на оперативные аналитические данные в IBM DB2 10.1 появилась новая функция Continuous Data Ingest (CDI). Ее важное преимущество– способность вводить данные в базы данных и хранилища данных с высокой скоростью при минимальном влиянии на работу аналитических приложений.

Эта статья знакомит читателя с новым инструментом Ingest и объясняет, как писать команды INGEST и как контролировать их исполнение, а также знакомит с примерами сценариев, в которых эта функция может заменить старые методы заполнения хранилищ данных.

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=935020
ArticleTitle=Введение в функцию DB2 Continuous Data Ingest
publish-date=06212013