Несколько экземпляров программы запускается с разными параметрами, отрабатывают и пишут результат в базу.
Нужно в случае невозможности подключения в базу кидать данные в буферный файл, потом с этого файла другой модуль будет периодически докидывать в базу информацию.
Думал сделать через INI
каждый файл пишет в этот ini секцию (название — время)
и в эту секцию пишет ключ (идентификатор опрашиваемого модуля — каждый экземпляр программы опрашивает свой модуль) и значение.
Т.е. получается в одну и ту же секцию в результате работы модулей должны добавиться строки (при двух работающих экземплярах программы)
[время опроса]
1=значение
2=значение
При следующих запусках создается новая секция и т.д
Но, в результате в секции остается только последняя запись, несмотря на уникальный ключ. Я думал, что переписывается только значение ключа, если оно уже существует, а у меня тупо вытираются все предыдущие ключи и остаются записанные.
В общем подскажите оптимальный вариант организации буфера.
Можно создавать для каждого модуля свой файл и писать в него, но тогда его надо блокировать, разблорировать, парсить данные, но может быть можно так как я начал?
18.06.03 14:43: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, Prond, Вы писали:
P>С INI разобрался, по глупости использовал WritePrivateProfileSection вместо WritePrivateProfileString, вот он секцию и переписывал.
P>Тем не менее, может тут есть подводные камни?
По-моему, размер INI файла ограничен 64К. И работает оно медленно — система каждый раз парсит его.
Можно, например, каждый раз создавать новый файл. Но при большом количестве записей файлов будет много и производительность файловой системы тоже сильно упадет. Можно, например, открывать файл на дозапись и добавлять данные; если открыть файл не удается, то можно ждать, пока удастся. Либо другой вариант — если открыть файл "1" не удается, то попробовать открыть файл "2" и дозаписать в него, если нет — то "3" и т.д. Потом перебрать все созданные файлы. Парсить особо не нужно будет, если каждый раз новую строку создавать. Оптимальность зависит от интенсивности запросов — если у тебя постоянно будут конфликты между 10 экземплярами, то это будет неэффективно, а если конфликт будет раз в час — то нормально.
Здравствуйте, Prond, Вы писали:
P>Несколько экземпляров программы запускается с разными параметрами, отрабатывают и пишут результат в базу. P>Нужно в случае невозможности подключения в базу кидать данные в буферный файл, потом с этого файла другой модуль будет периодически докидывать в базу информацию.
P>Думал сделать через INI
P>каждый файл пишет в этот ini секцию (название — время) P>и в эту секцию пишет ключ (идентификатор опрашиваемого модуля — каждый экземпляр программы опрашивает свой модуль) и значение.
P>Т.е. получается в одну и ту же секцию в результате работы модулей должны добавиться строки (при двух работающих экземплярах программы)
P>[время опроса] P>1=значение P>2=значение
P>При следующих запусках создается новая секция и т.д
P>Но, в результате в секции остается только последняя запись, несмотря на уникальный ключ. Я думал, что переписывается только значение ключа, если оно уже существует, а у меня тупо вытираются все предыдущие ключи и остаются записанные.
P>В общем подскажите оптимальный вариант организации буфера.
Можно попробовать распределение файла в память — они вроде часто используются чтобы обмениваться данными между разными процессами (тем более быстрее будет) — это мозно попробовать скомбинировать с ХМЛ
Re: Буферный файл
От:
Аноним
Дата:
23.06.03 06:26
Оценка:
Здравствуйте, Prond, Вы писали:
P>Несколько экземпляров программы запускается с разными параметрами, отрабатывают и пишут результат в базу. P>Нужно в случае невозможности подключения в базу кидать данные в буферный файл, потом с этого файла другой модуль будет периодически докидывать в базу информацию.
P>Думал сделать через INI
P>каждый файл пишет в этот ini секцию (название — время) P>и в эту секцию пишет ключ (идентификатор опрашиваемого модуля — каждый экземпляр программы опрашивает свой модуль) и значение.
P>Т.е. получается в одну и ту же секцию в результате работы модулей должны добавиться строки (при двух работающих экземплярах программы)
P>[время опроса] P>1=значение P>2=значение
P>При следующих запусках создается новая секция и т.д
P>Но, в результате в секции остается только последняя запись, несмотря на уникальный ключ. Я думал, что переписывается только значение ключа, если оно уже существует, а у меня тупо вытираются все предыдущие ключи и остаются записанные.
P>В общем подскажите оптимальный вариант организации буфера.
P>Можно создавать для каждого модуля свой файл и писать в него, но тогда его надо блокировать, разблорировать, парсить данные, но может быть можно так как я начал?
Зачем париться, если все уже придумано!!! Берешь DataSetProvider и ClientDataSet ам уже все предусмотрено и работает так, как ты говоришь.