2013-02-15 4 views
0

Мне нужен способ хранить только один большой текст на диске, не загружая его полностью в память.Каков наиболее эффективный способ сохранения строки для извлечения строк текста?

Мои запросы представлены в виде строк текста, таких как: дайте мне весь текст между позицией x и положением x + n, ничего больше, не меньше. У меня нет частых изменений в тексте.

Возможно, мне нужно что-то вроде «стойкого» B-Tree.

Это также потребуется некоторое СУБД функции, такие как:

  • архитектуре клиент/сервер
  • система кэш

Благодаря

+0

выглядит как хорошая задача для ттар() (если вы будете жить в unixland) – wildplasser

ответ

0

Также нужно будет некоторые особенности СУБД например: ...

Итак, почему вы не используете СУБД? Или даже решение NoSQL с возможностями запросов, такими как OrientDB?

Я думаю, вы могли бы сделать что-то подобное.

  1. Сплит текст на куски (главы абзацы фиксированный размер??)
  2. Сохранить текст в таблице с (по крайней мере) три поля:
    текст (фрагмент текста)
    НАЧАТЬ (смещение этого фрагмента от начала полного текста)
    END (конец смещения этого фрагмента от начала полного текста)

Теперь вы можете написать запрос для извлечения текста между положением х и положением х + N.

SELECT TEXT, BEGIN END 
    FROM TEXT_TABLE 
WHERE END >= x 
    AND BEGIN <= (x+n) 
ORDER BY BEGIN 

Finaly у вас есть только для извлечения текста делает что-то вроде:
- от первой строки: подстрока (текст, (х-только начинается))
- от "внутренних" рядов: весь TEXT
- Из последней строки: подстрока (TEXT, 0, (x + n-BEGIN))

Очевидно, что вы также должны позаботиться о «краевых случаях» (результат только с одной или двумя строками, запрошенный диапазон выходит за пределы диапазона. ..).
Но я думаю, что этот подход должен решить вашу проблему без особых усилий.

Надеюсь, это поможет.
Bye,
Raf

+0

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

+0

Да, запрос прост, но вы сказали, что вам также нужны возможности запросов, архитектура клиент-сервер, кеш ... – Raf

Смежные вопросы