Как данные форматируются под капотом
Работа над 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 гибок со схемой данных и может искать записи с помощью ключей и индексов. Часто это лучше подходит для клиентской базы данных.
Если вы нашли эту статью полезной, нажмите кнопку 👏 несколько раз, чтобы другие нашли ее и выразили свою поддержку! 👊
Спасибо за чтение!