Настройка хранения и создание индексов #13

Closed
opened 2026-05-02 16:13:56 +03:00 by aleksey · 0 comments
Owner

Этап 1. Настройка хранения и создание индексов (пункты 1 и 2 задачи)

Цель: перевести таблицы на дисковое хранение, создать все необходимые индексы для горячих данных, подготовить основу для архивирования и репликации.

Шаги:

  1. Модификация infra_mnesia.erl:
    • В функции table_opts/1 вернуть disc_copies для всех персистентных таблиц (user, admin, calendar, calendar_share, event, booking, review, report, subscription).
    • Для session, admin_session оставить ram_copies.
    • Добавить опцию disc_copies для новых таблиц, если они появятся.
  2. Создание индексов:
    • Реализовать функцию create_indices/0 (или несколько функций для разных таблиц), которая вызывается после init_tables/0.
    • Индексы по таблицам:
      • event: calendar_id, start_time, event_type, master_id, specialist_id, status (+ возможно location).
      • booking: event_id, user_id, status.
      • calendar: owner_id, status, short_name, category.
      • user: nickname.
      • review, report: при необходимости event_id или author_id.
    • Использовать mnesia:add_table_index/2.
  3. Фрагментация (опционально):
    • Заложить в код возможность фрагментации больших таблиц (event, booking) с помощью mnesia:change_table_frag/2 или mnesia:add_table_fragment/2. На данном этапе можно не включать, но подготовить утилиту для будущего применения.
  4. Тестирование:
    • Запустить приложение, проверить через mnesia:table_info(Table, storage_type) и mnesia:table_info(Table, index_info), что таблицы созданы на диске и индексы присутствуют.
    • Сравнить производительность выборок с индексами и без (профилирование).

Результат: все таблицы хранятся в disc_copies, индексы созданы и готовы к использованию.

## Этап 1. Настройка хранения и создание индексов (пункты 1 и 2 задачи) **Цель**: перевести таблицы на дисковое хранение, создать все необходимые индексы для горячих данных, подготовить основу для архивирования и репликации. **Шаги**: 1. **Модификация `infra_mnesia.erl`**: - В функции `table_opts/1` вернуть `disc_copies` для всех персистентных таблиц (`user`, `admin`, `calendar`, `calendar_share`, `event`, `booking`, `review`, `report`, `subscription`). - Для `session`, `admin_session` оставить `ram_copies`. - Добавить опцию `disc_copies` для новых таблиц, если они появятся. 2. **Создание индексов**: - Реализовать функцию `create_indices/0` (или несколько функций для разных таблиц), которая вызывается после `init_tables/0`. - Индексы по таблицам: - `event`: `calendar_id`, `start_time`, `event_type`, `master_id`, `specialist_id`, `status` (+ возможно `location`). - `booking`: `event_id`, `user_id`, `status`. - `calendar`: `owner_id`, `status`, `short_name`, `category`. - `user`: `nickname`. - `review`, `report`: при необходимости `event_id` или `author_id`. - Использовать `mnesia:add_table_index/2`. 3. **Фрагментация (опционально)**: - Заложить в код возможность фрагментации больших таблиц (`event`, `booking`) с помощью `mnesia:change_table_frag/2` или `mnesia:add_table_fragment/2`. На данном этапе можно не включать, но подготовить утилиту для будущего применения. 4. **Тестирование**: - Запустить приложение, проверить через `mnesia:table_info(Table, storage_type)` и `mnesia:table_info(Table, index_info)`, что таблицы созданы на диске и индексы присутствуют. - Сравнить производительность выборок с индексами и без (профилирование). **Результат**: все таблицы хранятся в `disc_copies`, индексы созданы и готовы к использованию.
aleksey added the Future label 2026-05-02 16:13:56 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: EventHub/EventHubBack#13