Plain table

Plain table — это базовый элемент для поиска без percolate. Он может быть определён только в конфигурационном файле с использованием Plain mode и не поддерживается в RT mode. Обычно используется совместно с source для обработки данных из внешнего хранилища и может позднее быть присоединён к real-time table.

Создание plain table

Чтобы создать plain table, необходимо определить его в конфигурационном файле. Команда CREATE TABLE его не поддерживает.

Ниже приведён пример конфигурации plain table и source для получения данных из базы данных MySQL:

‹›
  • Plain table example
Plain table example
📋
source source {
  type             = mysql
  sql_host         = localhost
  sql_user         = myuser
  sql_pass         = mypass
  sql_db           = mydb
  sql_query        = SELECT id, title, description, category_id  from mytable
  sql_attr_uint    = category_id
  sql_field_string = title
 }
table tbl {
  type   = plain
  source = source
  path   = /path/to/table
 }

👍 Что можно делать с plain table:

⛔ Что нельзя делать с plain table:

  • Вставлять дополнительные данные после построения таблицы
  • Удалять данные из таблицы
  • Создавать, удалять или изменять схему таблицы онлайн
  • Использовать UUID для автоматической генерации ID (данные из внешнего хранилища должны содержать уникальный идентификатор)

Числовые атрибуты, включая MVA, — единственные элементы, которые могут обновляться в plain table. Все остальные данные в таблице неизменяемы. Если требуются обновления или новые записи, таблицу нужно перестроить. В процессе перестройки существующая таблица остаётся доступной для обслуживания запросов, а когда новая версия готова, выполняется процесс ротации, переводящий её в онлайн и отбрасывающий старую версию.

Производительность построения plain table

Скорость индексации plain table зависит от нескольких факторов, включая:

  • Скорость получения данных из источника
  • Настройки токенизации
  • Аппаратные характеристики (например, CPU, RAM и производительность диска)

Сценарии построения plain table

Полная перестройка по мере необходимости

Для небольших наборов данных самый простой вариант — использовать одну plain table, полностью перестраиваемую по мере необходимости. Такой подход приемлем, когда:

  • Данные в таблице менее свежие, чем данные в источнике
  • Время построения таблицы увеличивается с ростом объёма данных
Сценарий main+delta

Для больших наборов данных можно использовать plain table вместо Real-Time. Сценарий main+delta включает:

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

Однако со временем продолжительность индексации меньшей таблицы станет слишком большой, что потребует перестройки большой таблицы и очистки меньшей.

Схема main+delta подробно описана в этом интерактивном курсе.

Механизм kill list и директива killlist_target используются для обеспечения приоритета документов текущей таблицы над документами другой таблицы.

Более подробно на эту тему можно почитать здесь.

Структура файлов plain table

В следующей таблице приведены различные расширения файлов, используемых в plain table, и их описания:

Расширение Описание
.spa хранит атрибуты документа в построчном режиме
.spb хранит блоб-атрибуты в построчном режиме: строки, MVA, json
.spc хранит атрибуты документа в колоночном режиме
.spd хранит списки совпадающих ID документов для каждого ID слова
.sph хранит информацию заголовка таблицы
.sphi хранит гистограммы значений атрибутов
.spi хранит списки слов (ID слов и указатели на файл .spd)
.spidx хранит данные вторичных индексов
.spjidx хранит данные вторичных индексов, сгенерированных для JSON-атрибутов
.spk хранит kill-списки
.spl файл блокировки
.spm хранит битовую карту удалённых документов
.spp хранит списки хитов (также известные как posting, или появления слова) для каждого ID слова
.spt хранит дополнительные структуры данных для ускорения поиска по ID документов
.spe хранит skip-листы для ускорения фильтрации списков документов
.spds хранит тексты документов
.tmp* временные файлы во время index_settings_and_status
.new.sp* новая версия простой таблицы до ротации
.old.sp* старая версия простой таблицы после ротации
Last modified: August 28, 2025