Как данные форматируются под капотом

Работа над Vasern (клиентская база данных для React Native) дала мне возможность попробовать и протестировать различные форматы данных, которые включают ключ-значение, столбцы, документы и кортежи. Каждый формат был разработан для разных сценариев.

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

В этом посте я резюмирую плюсы и минусы двух распространенных форматов: пары "ключ-значение" и формат кортежей. Кроме того, я расскажу о тегированных ключах- values ​​, расширение пар "ключ-значение" с поиском по индексу, в котором используется формат кортежей.

Хранилище ключей и значений

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

Преимущества хранилища пар "ключ-значение":

  • Простой формат данных ускоряет операции записи и чтения
  • Значение может быть любым, включая JSON, гибкие схемы

Недостатки:

  • Оптимизирован только для данных с одним ключом и значением. Парсер необходим для хранения нескольких значений.
  • Не оптимизирован для поиска. Поиск требует сканирования всей коллекции или создания отдельных значений индекса

Хранилище данных кортежей (СУБД)

Формат данных кортежей существует уже много десятилетий. Он используется в реляционных базах данных, таких как MySQL, Postgres и т. Д.

В отличие от формата "ключ-значение", он использует предопределенную схему для организации записей в строки, а ее значения - в столбцы фиксированной длины. Каждое значение обычно представляет собой только одну часть информации.

Преимущества хранилища данных кортежей:

  • Структурированный формат данных помогает быстро просматривать значения записей
  • Оптимизирован для поиска (обычное использование SQL для запросов к записям)

Недостатки:

  • Ограничено структурой схемы
  • Изменение схемы обычно требует перезаписи всей базы данных

Tagged Key-Value Store (Хранилище ключей и значений с тегами)

Tagged Key-Value - это расширенная версия хранилища Key-Value - у него более одного ключа для одного значения. Другими словами, у него есть ключ, индексы (или теги) и значение тела для каждой записи. Где:

  • Ключ и индексы будут загружены в память при запуске.
  • Значение тела может быть любым: от простой строки, BSON / JSON или значения, разделенного запятыми.

Преимущества хранилища ключей и значений с тегами:

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

Недостатки:

  • Для изменения схемы, включающей индексы, может потребоваться перенос данных.

Vasern с помеченным хранилищем ключей и значений

Vasern - это клиентская база данных для React Native. Последняя версия была выпущена в рамках бета-тестирования для тестирования и использовала хранилище «ключ-значение».

В грядущей версии 0.3.0-RC Васерн переходит на разметку хранилища ключей и значений с тегами. Основное внимание уделяется его мощной функции поиска и экономии места.

Ниже представлен демонстрационный запрос. Красиво, правда?

Заключение

Существует множество баз данных с различными форматами данных, которые можно выбрать для приложения. Два распространенных формата:

  • Пары "ключ-значение" - быстрое чтение и запись, но не оптимизированы для поиска. Его часто используют как простое хранилище данных, NoSQL.
  • Кортежи - поддерживают значения с несколькими типами, индексы, оптимизированные для поиска, но отсутствие гибкости схемы. Обычно используется для реляционных баз данных.

Комбинируя упомянутые выше сильные стороны, формат Tagged-Key-Values ​​ гибок со схемой данных и может искать записи с помощью ключей и индексов. Часто это лучше подходит для клиентской базы данных.

Если вы нашли эту статью полезной, нажмите кнопку 👏 несколько раз, чтобы другие нашли ее и выразили свою поддержку! 👊

Спасибо за чтение!