Russian Qt Forum
Ноябрь 24, 2024, 11:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подскажите, как правильнее организовать работу с данными  (Прочитано 2792 раз)
joker
Новичок

Offline Offline

Сообщений: 49


Просмотр профиля
« : Апрель 25, 2011, 13:49 »

Предыстория: Пишу системку синхронизации / репликации БД.

Приницп: выбираются записи из БД-шек упорядоченно по ключам и сравниваются. (Т.е. в двух словах - в одной БД (мастере) есть строка с ИД=5, во второй (слейве) - нет - добавляем (или наоборот - тогда удаляем)).

В приницпе, с бд все хорошо работает, но вот нужно "приделать" возможность сравнения с XML (те фактически одна из баз является XML файлом своей структуры). И вот тут не могу придумать красивое решение.
Мысли:
1. ODBC к XML. Вроде именно то что нужно. Но не нашел opensource, да и коммерческих вроде одна-две разработки столетней давности. Может кто что видел?

2. XQuery - вроде неплохо, но для каждой таблицы будет парситься XML. 2-3 достаточно тяжелых таблицы будут друг друга тормозить. Зато при выборке можно задавать порядок - что оччень нужно для сравнения.
Да и к сожалению - XQuery решит вопрос работы мастером (те чтение XML для сравнения) но не решит вопрос слейва (те запись в XML)
 
3. Брать DomDocument и делать свои методы по выбору потомков упорядоченно. Возможно нарисовать чтото вроде простеньких индексов. Опять же делать аналоги where. Ну и избаляться от сложных запросов, подзапросов и тп (вроде бы все это делается)


4. "Потрошить" XML в in-memory базу (например тот же SQLite). А дальше работать с ней как с обычной субд. Ну а по завершению работы - сохранять XML.
Тоже очень вкусный вариант, однако, добавятся, нарпимер, траблы с типизацией полей (их нужно будет хранить в XML файле, учитывать при загрузке и тп) и вообще со структурой БД (чтобы вычитать ее один раз при первом обращении а не под каждый запрос формировать нужную)
Хотя - по быстродействию - получится нормальный полноценный SQL и код менять особо сильно не нужно.

Пока останавился на последнем варианте - но может у кого-нибудь еще есть какие-нибудь мысли?

Записан
asvil
Гость
« Ответ #1 : Апрель 25, 2011, 14:02 »

Выгружаете SQL базу в xml.
Сравниваете два xml командой diff.
Записан
joker
Новичок

Offline Offline

Сообщений: 49


Просмотр профиля
« Ответ #2 : Апрель 25, 2011, 15:32 »

Выгружаете SQL базу в xml.
Сравниваете два xml командой diff.


К сожалению Вы меня неправильно поняли. Со сравнением все и так хорошо - и без diff. А вот чем оперировать в работе при разнородных данных....

ЗЫ выгружать так вообще не вариант - все равно чекать на апдейт/инсерт каждый результат. Плюс тягать стороннюю утилитку Грустный
Записан
twp
Гость
« Ответ #3 : Апрель 25, 2011, 16:29 »

а можно узнать что за СУБД? И почему бы не воспользоваться уже встроенными возможностями репликации, например MySQL?
Записан
joker
Новичок

Offline Offline

Сообщений: 49


Просмотр профиля
« Ответ #4 : Апрель 25, 2011, 20:01 »

Основная - firebird. Ну нету у него таких средств Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 23.