On 14 июн, 10:14, Kovalenko Dmitry <[EMAIL PROTECTED]> wrote:
> Привет всем.
>
> ... Не все таки меня здорово подкололи насчет моей реализации
> управления деревом, хранящимся в файле. Ржунемогу. Респект шутнику :)

Вообщем, не асилил :(

Вчера понял, что я уже забыл ради чего я затеял кэш - решил заморозить
это направление.

Пишу сразу в базу. Локальные кэши (которые были в памяти и работали до
кеша в индексе) я оставил - реально помогают уменьшить количество
обращений к базе.

Но пишу я вот по какому виду. Многопоточная лихорадка меня еще не
покинула :)

- хочу чтобы сервер мог работать в _одной_ транзакции для двух
подключений. То бишь подключения видят "грязные" изменения другого
подключения. Гы.

- придумал такую штуку. Нужно время от времени фиксировать сделанную
работу (посредством commit_retaining). Перебрал в голове несколько
вариантов "как останавливать генераторы при достижении порогового
объема". Больше всего понравилась идея прикрутить синхронизацию "много
читателей, один писатель".

Когда "генератор данных в БД" начинает новую порцию данных (начал
индексацию очередного документа), он блокирует подключение как
"читатель".

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

Коваленко Дмитрий.

Ответить