On 14 июн, 10:14, Kovalenko Dmitry <[EMAIL PROTECTED]> wrote: > Привет всем. > > ... Не все таки меня здорово подкололи насчет моей реализации > управления деревом, хранящимся в файле. Ржунемогу. Респект шутнику :)
Вообщем, не асилил :( Вчера понял, что я уже забыл ради чего я затеял кэш - решил заморозить это направление. Пишу сразу в базу. Локальные кэши (которые были в памяти и работали до кеша в индексе) я оставил - реально помогают уменьшить количество обращений к базе. Но пишу я вот по какому виду. Многопоточная лихорадка меня еще не покинула :) - хочу чтобы сервер мог работать в _одной_ транзакции для двух подключений. То бишь подключения видят "грязные" изменения другого подключения. Гы. - придумал такую штуку. Нужно время от времени фиксировать сделанную работу (посредством commit_retaining). Перебрал в голове несколько вариантов "как останавливать генераторы при достижении порогового объема". Больше всего понравилась идея прикрутить синхронизацию "много читателей, один писатель". Когда "генератор данных в БД" начинает новую порцию данных (начал индексацию очередного документа), он блокирует подключение как "читатель". Когда поток, следящий за размером данных, закачанных в базу, видит что пора фиксировать - он пытается заблокировать на "запись". В этот момент все новые попытки "читать" приостанавливаются, ждется завершение работы текущих "читателей", и после того как все "читатели" будут выгнаны - делаем commit_retaining. Бугага. Коваленко Дмитрий.

