From 893e3fe3d8bea8b9dd20c7b5c1581eef7595556b Mon Sep 17 00:00:00 2001 From: Astakhov Peter Date: Thu, 8 Oct 2026 23:21:17 +0300 Subject: [PATCH] Update OPDS_LIBRARY_CONTEXT.md --- OPDS_LIBRARY_CONTEXT.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/OPDS_LIBRARY_CONTEXT.md b/OPDS_LIBRARY_CONTEXT.md index 5755024..676f5fe 100644 --- a/OPDS_LIBRARY_CONTEXT.md +++ b/OPDS_LIBRARY_CONTEXT.md @@ -53,7 +53,7 @@ | `book_genres` | Связь книг↔жанров (book_id, genre_id) | **Особенности:** -- Полнотекстовый поиск через `fts tsvector` (русский язык) +- Полнотекстовый поиск через `tsvector` + GIN-индексы (русский язык) - Хеши (MD5) для быстрого поиска - Поле `source` для поддержки нескольких источников - Нормализация: авторы/серии/жанры вынесены в отдельные таблицы @@ -107,16 +107,15 @@ AUTHOR \x04 GENRE \x04 TITLE \x04 SERIES \x04 SERNO \x04 FILE \x04 SIZE \x04 LIB - Вложенность: до 3 уровней - RAR: бонусная поддержка -### Таблица `file_scan_log` -| Поле | Тип | Назначение | -|------|-----|-----------| -| file_path | TEXT | Полный путь к файлу | -| file_size | INTEGER | Размер файла | -| file_hash | TEXT | MD5/SHA256 хеш содержимого | -| updated_at | TIMESTAMP | Последнее обновление | +### Структура хранения (финальное решение) +- **file_scan_log** хранит архивы: `archive_path`, `archive_hash` (хэш всего ZIP), `file_size`, `updated_at` +- **books** хранит: `archive_path` + `fb2_name` (путь к FB2 внутри архива) +- При удалении архива → удаляем все книги из этого архива +- При изменении архива → удаляем старые книги, парсим заново +- Дубликаты с одинаковым содержимым не вызывают лишней работы (проверка по хэшу архива) ### Удаление книг -- Файл исчез с диска → книга удаляется из БД безвозвратно +- Файл (архив) исчез с диска → книги удаляются из БД безвозвратно - Файл изменён → старые книги удаляются, парсится заново ### Источник