Название: Подскажите, как правильнее организовать работу с данными Отправлено: joker от Апрель 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 и код менять особо сильно не нужно. Пока останавился на последнем варианте - но может у кого-нибудь еще есть какие-нибудь мысли? Название: Re: Подскажите, как правильнее организовать работу с данными Отправлено: asvil от Апрель 25, 2011, 14:02 Выгружаете SQL базу в xml.
Сравниваете два xml командой diff. Название: Re: Подскажите, как правильнее организовать & Отправлено: joker от Апрель 25, 2011, 15:32 Выгружаете SQL базу в xml. Сравниваете два xml командой diff. К сожалению Вы меня неправильно поняли. Со сравнением все и так хорошо - и без diff. А вот чем оперировать в работе при разнородных данных.... ЗЫ выгружать так вообще не вариант - все равно чекать на апдейт/инсерт каждый результат. Плюс тягать стороннюю утилитку :( Название: Re: Подскажите, как правильнее организовать работу с данными Отправлено: twp от Апрель 25, 2011, 16:29 а можно узнать что за СУБД? И почему бы не воспользоваться уже встроенными возможностями репликации, например MySQL?
Название: Re: Подскажите, как правильнее организовать работу с данными Отправлено: joker от Апрель 25, 2011, 20:01 Основная - firebird. Ну нету у него таких средств :)
|