stringtranslate.com

Ориентация данных

Ориентация данных относится к тому, как табличные данные представлены в линейной модели памяти , например, на диске или в памяти . Два наиболее распространенных представления — это ориентированные на столбцы (столбчатый формат) и ориентированные на строки (строчный формат). [1] [2]

Выбор ориентации данных — это компромисс и архитектурное решение в базах данных , механизмах запросов и численном моделировании. [1] В результате этих компромиссов форматы, ориентированные на строки, чаще используются в онлайн-обработке транзакций (OLTP), а форматы, ориентированные на столбцы, чаще используются в онлайн-аналитической обработке (OLAP). [2]

Примерами столбчато-ориентированных форматов являются Apache ORC , [3] Apache Parquet , [4] Apache Arrow , [5] форматы, используемые BigQuery , Amazon Redshift и Snowflake . Преобладающими примерами строко-ориентированных форматов являются CSV, форматы, используемые в большинстве реляционных баз данных , формат в памяти Apache Spark и Apache Avro . [6]

Описание

Табличные данные двумерны по своей природе — данные представлены в строках и столбцах. Однако современные операционные системы логически представляют данные в линейной модели памяти , как на диске, так и в памяти. [7] [8] [9] Поэтому таблица в линейной модели памяти требует проецирования своих двумерных элементов в одномерное пространство. Ориентация данных относится к решению, принятому в этой проекции. Существует два основных варианта ориентации: ориентированная на строки и ориентированная на столбцы. [1] [2]

Ряд-ориентированный

В строковой ориентации элементы таблицы

хранятся линейно как

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

Примеры

Ориентированный на столбцы

В столбчатом формате элементы таблицы

хранятся линейно как

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

Примеры

Дополнительные примеры см . в списке столбчато-ориентированных СУБД .

Компромисс

Ориентация данных является важным архитектурным решением систем, обрабатывающих данные, поскольку она приводит к важным компромиссам в производительности и хранении . [8] Ниже приведены избранные аспекты этого компромисса.

Произвольный доступ

Строчно-ориентированный выигрывает от быстрого случайного доступа к строкам. Столбчато-ориентированный выигрывает от быстрого случайного доступа к столбцам. В обоих случаях это является результатом меньшего количества промахов страниц или кэша при доступе к данным. [8]

Вставлять

Строчно-ориентированный выигрывает от быстрой вставки новой строки. Столбчато-ориентированный выигрывает от быстрой вставки нового столбца.

Это измерение является важной причиной того, почему форматы, ориентированные на строки, чаще используются в онлайн-обработке транзакций (OLTP), поскольку они обеспечивают более быстрые транзакции по сравнению с форматами, ориентированными на столбцы. [2]

Условный доступ

Строчно-ориентированный выигрывает от быстрого доступа под фильтром. Столбчато-ориентированный выигрывает от быстрого доступа под проекцией. [4] [3]

Производительность вычислений

Преимущества, связанные с колонками, от быстрых аналитических операций. Это результат возможности использовать инструкции SIMD . [5]

Размер в несжатом виде

Столбцово-ориентированный выигрывает от меньшего несжатого размера. Это результат возможности, которую эта ориентация предлагает для представления определенных типов данных с выделенными кодировками. [4] [3]

Например, таблица из 128 строк с булевым столбцом требует 128 байт в формате, ориентированном на строку (один байт на булево значение), но 128 бит (16 байт) в формате, ориентированном на столбец (через битовую карту). Другим примером является использование кодирования длины серии для кодирования столбца.

Сжатый размер

Колонка-ориентированная выигрывает от меньшего сжатого размера. Это результат более высокой однородности внутри колонки, чем внутри нескольких строк. [4] [3]

Конвертация и обмен

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

  1. чтение данных из Apache Parquet (ориентированных на столбцы)
  2. загрузить его во внутренний формат памяти Spark (ориентированный на строки)
  3. преобразовать его в Apache Arrow для определенного вычисления (ориентированного на столбцы)
  4. записать его в Apache Avro для потоковой передачи (ориентированной на строки)

Ссылки

  1. ^ abc Abadi, Daniel J.; Madden, Samuel R.; Hachem, Nabil (2008). "Column-stores vs. Row-stores: How different are they real different?". Труды международной конференции ACM SIGMOD 2008 года по управлению данными . стр. 967–980. doi :10.1145/1376616.1376712. ISBN 978-1-60558-102-6.
  2. ^ abcd Функе, Флориан; Кемпер, Альфонс; Нойманн, Томас (2012). «Уплотнение транзакционных данных в гибридных базах данных OLTP&OLAP». Труды VLDB Endowment . 5 (11): 1424–1435. doi :10.14778/2350229.2350258.
  3. ^ abcd "Apache ORC" . Получено 2024-05-21 .
  4. ^ abcd "Apache Parquet" . Получено 2024-05-21 .
  5. ^ ab "Apache Arrow" . Получено 2024-05-21 .
  6. ^ "Apache Avro" . Получено 2024-05-21 .
  7. ^ Ричард, Голден Г.; Кейс, Эндрю (2014). «Вместо подкачки: анализ сжатой оперативной памяти в Mac OS X и Linux». Digital Investigation . 11 : S3–S12. doi : 10.1016/j.diin.2014.05.011 .
  8. ^ abc M. Frans Kaashoek, Jerome H. Saltzer (2009). Принципы проектирования компьютерных систем . Morgan Kaufmann. ISBN 978-0-12-374957-4.
  9. ^ "Глава 4 Адресное пространство процесса (документация ядра Linux)" . Получено 2024-05-21 .