Какой самый эффективный способ сохранить строку для получения участков текста?
Мне нужен способ хранить только один большой текст на диске, не загружая его полностью в память.
Мои запросы представлены в виде промежутков текста, таких как: дать мне весь текст между позицией x и позицией x + n, ни больше, ни меньше. У меня нет частых изменений в тексте.
Вероятно, мне нужно что-то вроде "постоянного" B-Tree.
Также потребуются некоторые функции СУБД, такие как:
- клиент-серверная архитектура
- система кеша
Спасибо
1 ответ
Также потребуются некоторые функции СУБД, такие как: ...
Итак, почему вы не используете СУБД? Или даже решение NoSQL с возможностями запросов, как OrientDB?
Я думаю, что вы могли бы сделать что-то вроде этого.
- Разделите ваш текст на куски (главы? Параграфы? Фиксированный размер?)
- Сохраните ваш текст в таблице с (как минимум) тремя полями:
ТЕКСТ (кусок текста)
НАЧАЛО (смещение этого фрагмента от начала полного текста)
END (смещение конца этого фрагмента от начала полного текста)
Теперь вы можете написать свой запрос для извлечения текста между позицией x и позицией x+n.
SELECT TEXT, BEGIN END
FROM TEXT_TABLE
WHERE END >= x
AND BEGIN <= (x+n)
ORDER BY BEGIN
Наконец, вам нужно только извлечь свой текст, выполнив что-то вроде:
- Из первого ряда: подстрока (TEXT, (x-BEGIN))
- из "внутренних" рядов: все ТЕКСТ
- Из последней строки: подстрока (TEXT, 0, (x+n-BEGIN))
Очевидно, вы должны также позаботиться о "крайних случаях" (результат только с одной или двумя строками, запрошенный интервал вне диапазона,...).
Но я думаю, что этот подход должен решить вашу проблему без особых усилий.
Надеюсь, поможет.
До свидания,
Raf