doza_and
Июнь 2, 2011 09:49:41
Есть служба которая монопольно и постоянно пишет файл (точнее нечто файлоподобное но не файл). Хочется чтобы множество клиентов в локальной сети имели доступ к файлу на чтение. Те open,close,seek,read,write,tell.
Расшаривание ресурса средствами os кажется не очень удобным в настройке и не очень переносимым.
Как посоветуете сделать? Может есть что-то подобное?
evilempirer
Июнь 2, 2011 10:36:20
Тогда ваш вариант или писать свой сервер, что-то на подобии БД.
doza_and
Июнь 2, 2011 11:05:48
Да это небольшой сервер. Базы данных рассматривал - но транзакционная целостность уж очень сильно снижает производительность - данных много (десятки гигабайт).
o7412369815963
Июнь 2, 2011 19:40:35
> множество клиентов в локальной сети имели доступ к файлу на чтение. Те open,close,seek,read,write,tell.
“на чтение” не вяжется с “write”.
запись клиентам нужна?
что за данные?
клиентам seek нужен в произвольные места или к блокам? например служба дописывает данные блоками (кусками), и клиентам читать тоже надо блоками.
doza_and
Июнь 3, 2011 08:11:55
ошибся
write только сервером только в конец.
остальные чтение с произвольных мест но последовательное - те велика вероятность последовательного чтения (как и во всех файлах)
Запросы не к блокам.
Данные - протоколы состояния физичекой установки. На сервер идет непрерывный поток данных, дальше он режется на блоки, чтобы создать solid архив, но по возможности с произвольным доступом. А запросы на получение данных - то запросы пользователей которые могут заинтересоваться некоторыми небольшими (по сравнению со всем архивом и может быть даже по сравнению с размером блока) кусочками архива.
o7412369815963
Июнь 3, 2011 08:25:13
Навскидку можно сделать так:
* Все данные хранятся в файлах по 1Гб: 1.dat, 2.dat
* Последний, записываемый “файл” хранится в оперативной памяти - для быстрой записи, чтения.
Для большей производительности файлы можно будет раскидать по разным разделам.
Обмен можно будет сделать через xmlRPC, если объем передаваемых данных будет не большим иначе можно на сокетах свой протокол потоковый сделать.
Ещё можно глянуть на MongoFS и подобные.
doza_and
Июнь 3, 2011 10:29:55
Спасибо за наводку MongoDB. Меня интересовали в основном реализации потокового протокола на Сокетах, Примеры вобщем есть, но хотелось побольше :)