Цитата(dzyk @ 14.9.2008, 18:57)
Имеется приложение. Ядро - база данных SQLite(информация в таблицах изменяется 20-30 раз в день). Сейчас необходимо реализовать одновременное использование БД на нескольких компьюетрах "сети"(постоянных соединений нет, кто-то подключается, кто-то отключатеся, IP динамические, всего 5-6 машин).
Вот мои варианты.
1. Связать приложения по UDP и отсылать каждые х-минут контрольную сумму файла БД SQLite. Если не совпадает то коннект по TCP и клонирование самого свежего файла БД SQLite.
2. Поставить сервер MySQL|PostgreSQL|other (нереально, нет выделенного сервера)
3. Ваше предложение
При подключении посылаем широковещательный пакет смысл которого сводится к фразе "Есть кто главный?"
Если главного нет, становимся главным и начинаем отвечать на подобные запросы.
Если главный есть, открываем с ним постоянное соединение и засасываем изменения к базе (или всю базу)
На каждой машине своя актуальная копия данных, но изменения происходят только через главный сервер (нажатием жирной кнопки ДОБАВИТЬ ИЗМЕНЕНИЯ).
Если сервер умирает - происходят выборы нового на основании например приоритета (не давать пользователям ничего изменять в такие моменты, просто лочить нахрен форму с надписью обрыв связи ждите итп)
Короче смысл такой - динамический главный сервер и все изменения только через него, а иначе секс с внедрением механизма транзакций, причем думаю придется все равно с ним что то придумывать, т.к. сервера могут отвалиться, и в то время как они отваливаются отваливается главный сервер, неожиданный shutdown, итп.