СУБД с хранением данных по столбцами и по строкам

Итерация по блокам


Для обработки последовательностей кортежей в строчных хранилищах просматриваются все кортежи, и из них выбираются требуемые атрибуты через интерфейс представления кортежей [11]. Во многих случаях, например, в MySQL, это приводит к покортежной обработке запросов, где для каждой операции требуется 1-2 вызова функций для извлечения из кортежа требуемых данных (и если эта операция связана с вычислением простого выражения или условия, то стоимость ее выполнения мала по сравнению с расходами на вызов функции) [25].

В недавних исследованиях показано, что некоторые накладные расходы обработки кортежей в строчных хранилищах можно сократить, если одновременно доступны блоки кортежей, которые можно обрабатывать путем вызова одной операции [24, 15]. Подобный подход реализован в IBM DB2 [20]. В отличие от выборочной реализации блочного подхода в строчных хранилищах, во всех колоночных хранилищах (насколько это известно авторам) операции над блоками значений одного и того же столбца выполняются на счет одного вызова функции. Кроме того, не требуется извлечение атрибутов, и, если данный столбец содержит значения фиксированного размера, то данные можно представлять в виде массива. Обработка данных, представленных в виде массива, не только минимизирует покортежные накладные расходы, но также дает возможность использовать средства распараллеливания современных процессоров, позволяя применять методы конвейеризации циклов [9].



Содержание раздела