Plain table

Plain table — это базовый элемент для поиска без перколяции. Он может быть определён только в конфигурационном файле с использованием 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 включает:

  • Создание меньшей таблицы для инкрементального индексирования
  • Объединение двух таблиц с помощью distributed table

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

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

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

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

Более подробную информацию по этой теме смотрите здесь.

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

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

Extension Description
.spa хранит атрибуты документов в построчном режиме
.spb хранит blob-атрибуты в построчном режиме: строки, 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