crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Тема закрытаНачать новую тему
> Стратегия сетевого приложения., Помогите определиться, какой путь надежней.
dzyk
  опции профиля:
сообщение 14.9.2008, 17:57
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

Спасибо сказали: 0 раз(а)




Репутация:   0  


Имеется приложение. Ядро - база данных SQLite(информация в таблицах изменяется 20-30 раз в день). Сейчас необходимо реализовать одновременное использование БД на нескольких компьюетрах "сети"(постоянных соединений нет, кто-то подключается, кто-то отключатеся, IP динамические, всего 5-6 машин).

Вот мои варианты.

1. Связать приложения по UDP и отсылать каждые х-минут контрольную сумму файла БД SQLite. Если не совпадает то коннект по TCP и клонирование самого свежего файла БД SQLite.

2. Поставить сервер MySQL|PostgreSQL|other (нереально, нет выделенного сервера)

3. Ваше предложение
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.9.2008, 18:00
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(dzyk @ 14.9.2008, 18:57) *
2. Поставить сервер MySQL|PostgreSQL|other (нереально, нет выделенного сервера)

3. Ваше предложение

Вопрос (сорри, если тупой): нельзя одну машину сделать серверной?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 14.9.2008, 18:06
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(AD @ 14.9.2008, 19:00) *
Вопрос (сорри, если тупой): нельзя одну машину сделать серверной?


к сожалению нет, т.к.

1. Нет администраторов
2. Компьютеров в сети максимум 6-7. Ни один из них постоянно работать не будет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Novak
  опции профиля:
сообщение 14.9.2008, 18:19
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 319
Регистрация: 15.3.2008
Из: Замкадыш
Пользователь №: 121

Спасибо сказали: 28 раз(а)




Репутация:   6  


Может, стоит реализовать синхронизацию копий БД, которые хранятся на каждом компе, путём оповещения при каждом изменении?

Ещё вариант - попробовать реализовать своеобразный динамический сервер, то есть данную роль передавать при отключении. Для этого выстроить определённый порядок обращений (с начала по этому ip, потом по другому и т.д.).
В любом случае при этом крайне желательны статические IP

Но лучше всего было бы поставить на один компьютер нормальную СУБД, решается много проблем разом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 14.9.2008, 18:55
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Novak @ 14.9.2008, 19:19) *
попробовать реализовать своеобразный динамический сервер


Это самый интересный вариант, но сложно. :crazy:

Развивая Вашу идею:

1 Программы, живущие в настоящее время в сети, вещают в сеть свой IP+контр сумму файла БД+время жизни в онлайн
2 Если контр сумма не совпадает, то кешировавшиеся ранее SQL запросы передаются по TCP тем, кто был в оффлайне ?от программы, которая дольше всех живет в сети.

Самое сложное - создать кэш запросов к БД SQLite, так как в программе используется в основном QSQLTableModel.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.9.2008, 19:08
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


SQLite не поддерживает транзакции, т.е. к БД одновременно сможет подключатся только одно приложение/компьютер/пользователь. Поэтому лучше использовать MySQL он как SQLite может быть встроен в приложение и работать с неким файлом. Но коль уж нет единого места для БД, то тогда видимо все равно какая БД.

Мой вариант такой - ставим на все тачки Git, у каждого своя копия файла БД и при необходимости работать с БД сначало обновляем свою копию БД, средствами Git, он в отличие от Subversion может работать с децентрализованой средой. Но пускать его видимо нодо будет руками, либо выдрать часть кода из QGit - Qt'явая оболчка для Git'а.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Novak
  опции профиля:
сообщение 14.9.2008, 19:26
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 319
Регистрация: 15.3.2008
Из: Замкадыш
Пользователь №: 121

Спасибо сказали: 28 раз(а)




Репутация:   6  


Всё же стоит выделить один комп для постоянной работы СУБД, пусть он даже и не будет чистым сервером))
Просто как представишь себе все проблемы работы в подобной децентрализованной среде..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 14.9.2008, 20:06
Сообщение #8


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


dzyk, мне кажется, что ты предложил самое оптимальное решение.
Только вот я не думаю, что целесобразно копировать весь файл бд, лучше просто передавать новые, изменившиеся или удаленные записи.
Так как не понятно до каких размеров вырастет бд, и какая связь у клиентов с тобой. Например те же 10-20Gb постоянно передавать по сети 20-30 раз в день это не мало... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 14.9.2008, 20:41
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 14.9.2008, 20:08) *
SQLite не поддерживает транзакции, т.е. к БД одновременно сможет подключатся только одно приложение/компьютер/пользователь


не согласен.
SQLite is a software library that implements a ... transactional SQL database engine.

Цитата(ViGOur @ 14.9.2008, 21:06) *
я не думаю, что целесобразно копировать весь файл бд


Справедливое замечание.

Но я не знаю как кэшировать SQL запросы, я ведь использую класс QSQLTableModel
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 14.9.2008, 22:21
Сообщение #10


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(dzyk @ 14.9.2008, 21:41) *
Но я не знаю как кэшировать SQL запросы, я ведь использую класс QSQLTableModel
Нужно подумать как обойти класс QSQLTableModel...

Например у той же Berkeley DB аля логирование, файлы логов, которые создаются при добавлении новой записи, изменении или удалении. Но это как вариант стороны в которую капать...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.11.2024, 2:09