Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объектно-ориентированная синхронизация, разыскиваю инструмент синхронизации БД 
:(
    Опции темы
skyboy
Дата 30.12.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



ищу инструмент синхронизации. или библиотеку, позволяющую быстро написать под мой конкретный случае инструмент синхронизации.
есть реляционные БД одинаковой структуры. есть механизмы, которые позволяют описать логическую структуру данных(по крайней мере, связь между таблицами, даже не имеющими foreign key): ORM-библиотеки или конфиг в виде xml. 
хочется тулзу, которой: 
а) кормишь описание струтуры
б) кормишь параметры подключения к двум БД
в) тулза проводит сравнение и позволяет выбрать направление переноса данных при несовпадении("синхронизация каталогов" в total commander просто стоит перед глазами smile)
чего не хватает в имеющихся средствах?
- конфига для сравнения: некоторые поля не нужно сравнивать(modification_time бессмысленно переносить - надо генерировать заново), некоторые поля(значения в них) не надо переносить, логика сравнения может быть сложнее "совпадают/не совпадают значения во всех указанных полях", но все же которую(логику) возможно реализовать в виде sql запроса
- для некоторых записей(которые можно определить при помощи sql-выражения) нельзя делать перенос в направлеини А-В, только наоборот
- некоторые записи зависят от других - если не перенесли запись об объекте, то не давать переносить записи об атрибутах этого объекта
-------------
тут скорее не законченное ПО надо, а платформу/библиотеку.
может, подскажете чего?
[updated]
да, сообщение не совсем было понятно. дополнил первым предложением.
PM MAIL   Вверх
gcc
Дата 31.12.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



вы ищите ORM?
PM WWW ICQ Skype GTalk Jabber   Вверх
skyboy
Дата 31.12.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



инструмент синхронизации двух баз данных на уровне объектов, а не отдельных значений в отдельных таблицах.
PM MAIL   Вверх
Simpliest
Дата 31.12.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



skyboy, 
посмотри в RoR - миграции. Что-то похожее о чем ты говоришь.

В большинстве же случаев такое пишется ручками насколько я знаю. Ибо все сильно индивидуально.


--------------------
user posted image
PM   Вверх
skyboy
Дата 1.1.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



посмотрю RoR, правда в Ruby даже с синтаксисом незнаком.
насчет "индивидуальности": я вот начал писать и пришел к тому, что есть базовый абстрактный клас с пятком методов, зависящих от структуры, и оболочка, в которой будет большая часть кода и которая не будет привязана к стурктуре.
вот я такое и хотел: написать класс с пятком методов, реализующих выборку/удаление/перенос данных, а все остальное чтоб было.
вот как qsort - передал функцию-callback для сравнения элементов, а невидимый тебе "шаблонный метод" берет на себя обязанность собственно сортировать smile
ведь элементов не так уж и много: есть данные в таблице; есть связь между данными; есть набор ограничений, которые можно свести к sql-конструкциям. на самом деле, можно загнать с двух источников данные на локальный сервер и десятком/другим sql-выражений перегнать именно нужные данные.
но это слишком сложно в управлении - изменится структура на одно поле - возможно, придется перелопачивать все сваленные в кучу запросы. а если пропустишь что? и потом порою при переносе нужно просто визуальное сравнение не совпадающих данных, ибо многи параметры не возможно формализировать(например, полнота информации в описании, заносимого автором-человеком) и нужна оболочка для сравнения "визуально".

Добавлено @ 00:05
что-то слишком многословно получилось, извини smile
PM MAIL   Вверх
gcc
Дата 3.1.2010, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



skyboy, можете посмотреть вот эту http://search.cpan.org/search?query=DBIx%3...ss&mode=all

это одна из мощнейших
PM WWW ICQ Skype GTalk Jabber   Вверх
skyboy
Дата 3.1.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



gcc, я так понял, это ORM написанный на Perl, да?
я там не нашел ничего похожего ни на синхронизацию двух источников данных, ни на импорт/экспорт в XML c древоподобной структурой. Значит, писать самому, пусть и на готовом ORM.
PM MAIL   Вверх
Simpliest
Дата 5.1.2010, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(skyboy @  31.12.2009,  23:04 Найти цитируемый пост)
изменится структура на одно поле - возможно, придется перелопачивать все сваленные в кучу запросы

Судя по всему таки миграции.

Суть в том что скрипт миграции описывает две вещи

1. как из состояния А сделать Б
2. как из Б вернуть опять в состояние А

Важно. Это относится именно к структуре (т.е. к полям) с данными.
Эдакая транзакция для структурных изменений.

Пример.
  • Меняем структуру с А на Б. (данные перестраиваются)
  • Добавляем какие-то данные 1
  • Меняем структуру с Б на В. (данные перестраиваются)
  • Добавляем данные 2.
  • Что-то пошло не так, мы решили откатится.
  • Меняем структуру с В на Б. (данные 2 не убирались, а перестраиваются в соответствии с откатом структуры)
  • Меняем структуру с Б на Д. (данные перестраиваются)
Добавлено через 5 минут и 26 секунд
Но такие вещи таки пишутся ручками.
Есть у меня одна знакомая, которая занималась практически такими же задачами.
Попробую завтра ее спросить, есть ли у них какой-то специализированный софт для этих задач.

P.S. но если я правильно помню, у них все же работа идет в рамках SQL. Т.е. объектную обвязку тебе надо смотреть/писать отдельно.
Просто я с RoR вообще не знаком, но идею миграций БД мы когда-то брали именно оттуда.

Добавлено через 8 минут и 21 секунду
Забыл уточнить
■Меняем структуру с А на Б
■Меняем структуру с Б на В
■Меняем структуру с В на Б
■Меняем структуру с Б на Д
это все делается скриптами миграций. В итоге ты можешь откатиться без потерь данных в любую точку.


--------------------
user posted image
PM   Вверх
gcc
Дата 5.1.2010, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



skyboy, тогда не знаю, я преложил посмотреть как вариант

1) с 2 базами можно работать, я с ORM на высоком уроне не работал, но там все красиво на OOP - можно быстро что-то подкрутить, даже OOP на Си переписанном 
2) на счет "синхронизацию двух источников данных" не знаю что это такое... и как именно у вас должно оно быть (догадываюсь)
3) для дерева есть http://search.cpan.org/~bjeps/DBIx-Tree-1.9/Tree.pm
там документацяи не полная, то я выводил (могу показать) в HTML с одим parrent_id все дерево (или начиная с конкертного узла), и с пробелами, красиво, так же выводил в шаблонизатор который очень сильно похож на XML т.е. там реализуемо...

пример вывода дерева на на Rose:smileB еще тут http://forum.vingrad.ru/index.php?showtopi...t&p=1778273 (почти в виде XML)



Это сообщение отредактировал(а) gcc - 5.1.2010, 02:40
PM WWW ICQ Skype GTalk Jabber   Вверх
skyboy
Дата 15.1.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



 smile 
хотел уйти от конкретики, чтоб не получить полурешений, но в итоге с абстракциями не справился и только вас запутал smile
насчет миграции, Simpliest, я понял. инструмент знакомый. в Doctrine пересекался.
но у меня(черт, почему сразу было не уточнить?!  smile ) структура не меняются. Только данные.
Пример:
есть БД с каталогом предприятий. есть внутренняя база и каталог на сайте. Редактироваться данные могут независимо друг от друга(потому односторонний перегон данных "локальная БД->сайт" не устроит). И надо время от времени производить синхронизацию.
Некоторые поля заменяться не должны, некоторые предварительно должны быть проверены человеком(на сайте при вводе проверка помягче и могут попадаться даже откровенно ложные данные, что допустимо для сайта и недопустимо для внутренней БД) - потому репликация, даже двухсторонняя, не подходит.
Вот и я пытался найти существующее решение, которое позволило бы свести операцию синхронизации к той, что есть в файловых менеджерах:
выбрать источники(папки == базы данных)
выбрать алгоритм сравнения(файлы можно сравнивать побайтово, а вот для БД может понадобиться описать алгоритм, игнорирующий некоторые различия)
выбрать направление копирования(слева-направо, справа-налево, удалить слева, удалить справа) 
выполнить синхронизацию(перенос файлов/операции над данными в БД).
в конечном итоге написал инструмент на РНР, где логика сравнения/переноса для каждой сущности в БД инкапсулирована в определенный класс. А остальное - платформа(что я собственно искал) реализует визуальный интерфейс и абстрактные файлы, которые надо реализовать для определения логики работы.
PM MAIL   Вверх
Simpliest
Дата 16.1.2010, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



skyboy, такого нет.

У тебя целостность данных вынесена в приложение и приложением же тебе разруливать. Структура твоего приложения - одному богу известна. И в общем случае ни один парсер не позволит однозначно ее определить (для частных случаев опять таки пишутся обычно индивидуальные вещи smile )

Выхода у тебя 2.
1. Писать контроль целостности данных в виде отдельной части приложения (тогда ты можешь этим же контролем и пользоваться при экспорте/импорте)
2. переделать базу, возложив контроль целостности на нее.

Добавлено через 22 секунды
собственно, ты по первому пути и пошел smile


--------------------
user posted image
PM   Вверх
skyboy
Дата 16.1.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Цитата(Simpliest @  16.1.2010,  02:14 Найти цитируемый пост)
И в общем случае ни один парсер не позволит однозначно ее определить

ну, мне парсер и не нужен. я бы довольствовался оболочкой, которая реализовывала бы все, кроме записи, чтения и сравнения конкретных сущностей.
не хотелось писать "костяк".
Цитата(Simpliest @  16.1.2010,  02:14 Найти цитируемый пост)
skyboy, такого нет.

ясно. спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0862 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.