Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  12:02[Войти] | [Зарегистрироваться]
Обсуждение темы:
Синхронизация баз данных или Данные off-line.

Уважаемые коллеги. Хочу предложить тему, которая, думаю, будет интересна тем, кто занимается базами данных, особенно в промышленном масштабе. Тему можно обозначить примерно как "Синхронизация баз данных" или "Данные off-line". Попробую смоделировать некую условную абстрактную задачу, которую можно спроецировать на конкретную ситуацию.

Пусть существует некий главный склад, отгружающий продукцию, оснащенный IT-системой контроля отгрузки, ведения учета и т.п. Пусть существует некий удаленный филиал, который также занимается оформлением отгрузки с главного склада, и у которого имеется точно такая же IT-система. Связь on-line отсутствует в силу каких-либо причин - технических, экономических, политических и т.д. :o) В каждой IT-системе производятся независимые и раздельные по времени манипуляции с данными. Требуется обеспечить надежную синхронизацию данных между двумя системами, неважно, каким способом - посредством дискет, разовым соединением модемами и т.д. Проблемы видятся следующие:

1) Отслеживание добавления/изменения/удаления данных в каждой копии данных Если добавление/удаление можно достаточно надежно синхронизировать, то при модификации имеющихся данных возникает проблема "первородности" изменений, т.е. принятие решения о том, которое из изменений какого поля является наиболее объективным.
2) Объективная модификация каких-либо счетчиков, например, счетчиков отгружаемой продукции. Поясняю - если в обеих копиях данных был организован декремент счетчика продукции на 1, при неизменности других полей записи, то в синхронизированной записи должен быть произведен окончательный декремент уже на 2.
3) Проблема возрастания сложности синхронизации между тремя и более копиями данных (ведь филиалов может быть несколько)
4) Невозможность проводить анализ изменений по штампам времени, т.к. нет синхронизации часов между компьютерами. Эта проблема только кажется несерьезной, на самом деле китайские "мамы" и чайниковость пользователей создают массу проблем с отметками времени.
?) Ваши дополнения о возможных проблемах такого рода систем.

Интересны мнения о возможных моделях построения такой off-line системы. В том числе, и симбиоз с on-line системой для обеспечения общей работоспособности системы при неполадках связи on-line. Я попробовал рассчитать некие дополнительные "журналирующие" таблицы. Т.е., имется запись, одинаковая во всех копиях данных, а все изменения заносятся в журнал без ее модификации. Для работы пользователям выдается "виртуальная" запись, собранная на основе журнала. Но это очень неэффективно по скорости плюс пункт 4 из описания возможных проблем. Что касается SQL-сервера, то с точки зрения надежности, минимума ресурсоемкости и минимального администрирования предпочтение было отдано серверу InterBase. Кстати, было бы интересно узнать о принципах работы версионности этого сервера, этот механизм может быть неплохим вариантом для частичного решения моей проблемы.

 Андрей Омутов

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 33 сообщения

Добавить свое сообщение

Отслеживать это обсуждение
<<<... | 23—14 | 13—4 | ...>>>
Всего сообщений в теме: 33; страниц: 4; текущая страница: 2


№ 23   11-01-2001 13:57 Ответить на это сообщение Ответить на это сообщение с цитированием
Vadim:
<<<Господа, не надо выдумывать велосипед. Внимательно посмотрите вокруг и ВЫ найдете нужное решение. Конкретно один из вариантов: СУБД Sybase SQL Anywhere начиная с версии 5.0 (Сейчас Adaptive Server Anywhere). Прекрасный, надежный, промышленный вариант решения ваших проблем.>>>

Ну-ну... Ну и что этот замечательный репликатор сделает, если я в одной БД припишу к главной записи дочернюю, а в другой БД - удалю эту главную? Коллизию покажет?... И тебе придется посадить понимающего человека, который будет эти коллизии исправлять...  Или у вас все кроме одной БД read-only? Тогда ЛЮБОЙ рапликатор нормально справится...

ИМХО нормального репликатора для двусторонней репликации не будет никогда - я недавно почитал доки по репликации в DB2 - вот уж кто БД занимается с незапамятных времен - у них там все далеко не шоколадно.....


№ 22   11-01-2001 13:53 Ответить на это сообщение Ответить на это сообщение с цитированием
2 Nick
заводим служебную таблицу-указатель изменений
(можно и просто mirror файл)
а далее простой SQL

а вообще самый оптимум предложен Flx'ом - это реляционный подход !!!!


№ 21   11-01-2001 13:35 Ответить на это сообщение Ответить на это сообщение с цитированием
TO: Сергей Тарасов
Интересно, какой анализ семантики может быть, если в справочниках наименования вводятся с грамматическими ошибками, а проверка орфографии невозможна в принципе? Например в справочнике ассортимента 10 юзеров любой иностранный товар введут 10 раз по-разному, причём в половине случаев в русской транслитеризации или смешав русские и английские буквы, не говоря уж про сложные составные наименования.
Не, по-моему надо лучше работать над структурой данных и выделять однонаправленные потоки, а всё остальное легче и быстрее решить на организационном уровне. Против человеческого ФАКтора помогает только другой человеческий фактор.


№ 20   11-01-2001 13:22 Ответить на это сообщение Ответить на это сообщение с цитированием
To Vadim
Любимое занятие российских программистов-выдумывать велосипед. Не мешайте им.


№ 19   11-01-2001 12:36 Ответить на это сообщение Ответить на это сообщение с цитированием
Vadim
Удобство удобством, но Вы говорите о физической репликации. А как в вашей системе анализируется семантика? (Тот же пример со вводом Петербургом-Ленинградом в разных физических базах)


№ 18   11-01-2001 12:29 Ответить на это сообщение Ответить на это сообщение с цитированием
Господа, не надо выдумывать велосипед. Внимательно посмотрите вокруг и ВЫ найдете нужное решение. Конкретно один из вариантов: СУБД Sybase SQL Anywhere начиная с версии 5.0 (Сейчас Adaptive Server Anywhere). Прекрасный, надежный, промышленный вариант решения ваших проблем. Заложенный в этот сервер решение SQL Remote (репликация данных по низкоскоростным линиям)имеет все что нужно, протоколы от FTP до Lotus Notes, разбор полетов в момент слияния на уровне тригеров, репликация части таблиц, а можно по условию, три режима репликации: по требованию, shedule вариант или через промежуток времени. Практически все схемы репликации, 1-1, 1-много, много-1, "круговая". Истинный (чистый)SQL server на всех практически платформах (все Win.., Novell, QNX)Мы его эксплуатировали в режиме репликации около двух лет. Удаленная точка, круглые сутки в две смены, модем 19200, ~500 записей в день, сервер NT4 + Exhange (для репликации) все работало честно, ни разу не упало, не пропало ни одной записи. Потом все переделали на Midas3 стало быстрее и проще. Но это было потом, сперва были Delphi2. Что касается двойных первичных ключей, на первый момент это кажется верно (и у нас так было), но это очень неудобно в работе и при администрировании, рекомендую использовать в случае репликации GUID в качестве первичного ключа.


№ 17   11-01-2001 10:11 Ответить на это сообщение Ответить на это сообщение с цитированием
мы тоже решили такую проблему.
структура подразделений была такая : Главный офис - Обласные управления - Подразделения обласных управлений.
Схема СУБД везде одинакова. Синхронизация строилась на основе обмена файлами выгрузок. Можно по обмениватся или через мыло или через дискетки(что очень важно в связи с качеством линий в регионах). Основная идея - 2ой ключ в каждой таблице (ID, INST) INST - номер структурного подразделения из общего справочника.
Для хранения счетчиков делается справочник с названием сечика, номером инстанции, значением.

На мой взгляд наиболее сложная проблема - КАК ВЫБРАТЬ ИЗ БАЗЫ ТОЛЬКО ИЗМЕНЕНЫЕ ДАННЫЕ.
У нас было поще - мы запретили всякие делиты и апдейты(В основном это было связано с возможностью отслеживания всей истории модификации данных)


№ 16   11-01-2001 09:27 Ответить на это сообщение Ответить на это сообщение с цитированием
Мы решили подобную задачу так (метод похож на предложенный AnorAglar'oм):

Во всех таблицах нуждающихся в синхронизации обязательно присутствуют поля:
1) RemoteId - номер БД (1-в гл.офисе, 2- на 1-ом удал. складе, 3- на 2-ом и т.д.)
2) Id - автоинкремент, уник номер для данной таблицы
3) LastChangeDate - дата последнего изменения записи (есть и поле с ФИО того кто менял, но это не в тему)
4) LastSyncDate - дата последней синхронизации для этой записи.

Алгоритм:

1) базы подливаются в главную (это условно- важно, что все подливания в одном месте), а после всех подливаний - копии рассылаются на места и там заменяют местные экземпляры. Важно: в операции одного подливания участвуют две БД.

2) Из местной БД выбираются записи (по очереди для каждой таблицы), у которых дата последнего изменения позднее, чем дата синхронизации  _И_  записи, у которых нет даты синхронизации (т.е. новые).
Для этих записей ищется аналог в Главной БД (в соответствующих таблицах) по ключу "RemoteId;Id": если в Главной БД дата изменения не позднее даты синхронизации (т.е. не изменялась) - тогда запись из Местной заменяет запись в Главной. А если в Главной БД дата последнего изменения позднее даты синхронизации (т.е. и здесь ее тоже изменили), то решать какую оставить будет Юзер ответственный за это: список таких записей - в таблицу конфликтов и пользователю на решение.
Понятно, новые записи - просто подливаются из местной в главную.

Вообще порядок такой -
сначала делается диагностика конфликтов без подливаний -
потом ответственный разбирает конфликтные записи -
потом собственно подливание с учетом таблицы конфликтов, в кот. уже указано какую запись оставить (из сливаемых таблиц удаляются  "лишние"  записи и потом одна табл добавляется в др.

-----------------
Рад, если кому-то поможет или наведет на дельные мысли.


№ 15   11-01-2001 09:21 Ответить на это сообщение Ответить на это сообщение с цитированием
Мы решили подобную задачу так (метод похож на предложенный AnorAglar'oм):

Во всех таблицах нуждающихся в синхронизации обязательно присутствуют поля:
1) RemoteId - номер БД (1-в гл.офисе, 2- на 1-ом удал. складе, 3- на 2-ом и т.д.)
2) Id - автоинкремент, уник номер для данной таблицы
3) LastChangeDate - дата последнего изменения записи (есть и поле с ФИО того кто менял, но это не в тему)
4) LastSyncDate - дата последней синхронизации для этой записи.

Алгоритм:

1) базы подливаются в главную (это условно- важно, что все подливания в одном месте), а после всех подливаний - копии рассылаются на места и там заменяют местные экземпляры. Важно: в операции одного подливания участвуют две БД.

2) Из местной БД выбираются записи (по очереди для каждой таблицы), у которых дата последнего изменения позднее, чем дата синхронизации  _И_  записи, у которых нет даты синхронизации (т.е. новые).
Для этих записей ищется аналог в Главной БД (в соответствующих таблицах) по ключу "RemoteId;Id": если в Главной БД дата изменения не позднее даты синхронизации (т.е. не изменялась) - тогда запись из Местной заменяет запись в Главной. А если в Главной БД дата последнего изменения позднее даты синхронизации (т.е. и здесь ее тоже изменили), то решать какую оставить будет Юзер ответственный за это: список таких записей - в таблицу конфликтов и пользователю на решение.
Понятно, новые записи - просто подливаются из местной в главную.

Вообще порядок такой -
сначала делается диагностика конфликтов без подливаний -
потом ответственный разбирает конфликтные записи -
потом собственно подливание с учетом таблицы конфликтов, в кот. уже указано какую запись оставить (из сливаемых таблиц удаляются  "лишние"  записи и потом одна табл добавляется в др.

-----------------
Рад, если кому-то поможет или наведет на дельные мысли.


№ 14   11-01-2001 09:18 Ответить на это сообщение Ответить на это сообщение с цитированием
Когда я занимался 1С, то обращал внимание что там это реализовано.
Никто не интересовался как?


<<<... | 23—14 | 13—4 | ...>>>
Всего сообщений в теме: 33; страниц: 4; текущая страница: 2


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования