|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
repl2.narod.ru - незамысловатый алгоритм репликации моего изобретения. Хотелось бы услышать конструктивную критику от специалистов. Надеюсь, что кому-то эта статья окажеться полезной (хотя бы ссылки на литературу:) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2006, 12:31 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
1) Ваша схема не отрытие. Я лично подобную схему реализовал еще полтора года назад (правда потом понял, что она пригодна лишь для статичных проектов - см.п.3) 2) "Запись изменяется и удаляется только в той ЛБД, в которой была создана (схема ведущий-ведомый)." - представьте себе систему документооборота, построенную по этому принципу :) представили?........ а я нет 3) Схема сама по себе сложна и любое ее расширение (добавление нового объекта в БД) требует внушительных по времени доработок. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2006, 14:14 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Distort1) Ваша схема не отрытие. Я лично подобную схему реализовал еще полтора года назад (правда потом понял, что она пригодна лишь для статичных проектов - см.п.3) 2) "Запись изменяется и удаляется только в той ЛБД, в которой была создана (схема ведущий-ведомый)." - представьте себе систему документооборота, построенную по этому принципу :) представили?........ а я нет 3) Схема сама по себе сложна и любое ее расширение (добавление нового объекта в БД) требует внушительных по времени доработок. 1) К сожалению, я Вашу схему не видел. Если бы Вы дали ссылку, то можно было бы сравнить. 2) Если схему трудно применить к документообороту, то её не надо для этого применять или надо доработать. Считаю, что доработать можно. 3) Я бы не сказал, что схема так уж сложна по сравнению с теми, что я видел. Модифицирование БД часто непростая задача, а с репликацией, естественно, сложнее. Если это необходимо, то добавление нового объекта можно автоматизировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2006, 15:28 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
По прочтении остался один вопрос: почему это названо репликацией? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2006, 15:39 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
автор1) К сожалению, я Вашу схему не видел. Если бы Вы дали ссылку, то можно было бы сравнить. Повторюсь - схема подобная. Однако, я не публикую свои решения, поэтому ссылку дать не могу. автор2) Если схему трудно применить к документообороту, то её не надо для этого применять или надо доработать. Считаю, что доработать можно. Это был всего лишь пример. Вы, видимо, не уловили суть проблемы. авторЕсли это необходимо, то добавление нового объекта можно автоматизировать. Так у Вас не Репликатор, а целая Платформа получится :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2006, 15:45 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Distort Повторюсь - схема подобная. Однако, я не публикую свои решения, поэтому ссылку дать не могу. Наверное, изобретателям репликаторов стоит объединить свои усилия:) Distort Это был всего лишь пример. Вы, видимо, не уловили суть проблемы. Кажеться мы друг-друга не поняли. Я пошёл на ограничение возможностей РБД для упрощения алгоритма. Поэтому выбрал схему "ведущий-ведомый". Думаю что алгоритм можно относительно легко модифицировать, и разрешить изменения во всех ЛБД но тогда прийдётся менять способ разрешения конфликтов обновления. Distort Так у Вас не Репликатор, а целая Платформа получится :) Почему "Платформа"? Просто не прототип а конечный продукт. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2006, 15:58 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
авторНаверное, изобретателям репликаторов стоит объединить свои усилия:) Наверное. Рекомендую обратить Ваше внимание на то, что чаще всего не все данные РБД1 требуются РБД2. В своей схеме я реализовал такую фишку (схема типа "отправитель-подписчик" - все это оформляется на репликаторе, который и распределяет всю нагрузку). До этого передавался слишком большой объем ненужной информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 07:59 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
guest_20040621По прочтении остался один вопрос: почему это названо репликацией? А я еще добавлю: зачем пирдуман странный и ужасный механизм поколений, их двухэтапность и т.д. Я к тому же так и не понял, каким образом данные все-же попадают с одной БД в другую и зачем там запрашивать счетчик поколений. Кроме кучи странных методов процесс попадания данных в базу непонятен. Собственно про выводы в статье: Зачем это все? Зачем пункты 6.1 и 6.3, если и без них все можно сделать хорошо? И что за таинственная программа Replication.exe? У нас есть свой обмен данными, только он намного проще и понятнее. И без пунктов 6.1 и 6.3. -- Tygra's -- Мои фотогалереи тут ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 09:22 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
DistortРекомендую обратить Ваше внимание на то, что чаще всего не все данные РБД1 требуются РБД2. В своей схеме я реализовал такую фишку (схема типа "отправитель-подписчик" - все это оформляется на репликаторе, который и распределяет всю нагрузку). До этого передавался слишком большой объем ненужной информации. Ценное замечание. У меня БД-клиент вызывает на БД-сервере процедуры типа MASTER_GEN . (надо было наверное сразу дать ссылку на документацию Doc ) Думаю, что если надо ограничить набор данных то можно добавить в процедуру дополнительный параметр - кот будет задавать условие в клаузе WHERE ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 12:03 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
guest_20040621По прочтении остался один вопрос: почему это названо репликацией? Может, Вы понимаете этот термин иначе. Дайте определение. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 12:07 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
tygra guest_20040621По прочтении остался один вопрос: почему это названо репликацией? А я еще добавлю: зачем пирдуман странный и ужасный механизм поколений, их двухэтапность и т.д. Я к тому же так и не понял, каким образом данные все-же попадают с одной БД в другую и зачем там запрашивать счетчик поколений. Кроме кучи странных методов процесс попадания данных в базу непонятен. Собственно про выводы в статье: Зачем это все? Зачем пункты 6.1 и 6.3, если и без них все можно сделать хорошо? И что за таинственная программа Replication.exe? У нас есть свой обмен данными, только он намного проще и понятнее. И без пунктов 6.1 и 6.3. -- Tygra's -- Мои фотогалереи тут Механизм поколений может и странный но не ужасный. Придуман он для регистрации изменений (позволяет обойтись без системного таймера, от которого одни неприятности). Двухэтапность - для того что бы изменения не оказались скрыты от клиента (это может произойти в особо замороченных случаях. у меня в статье есть пример ) Изменения попадают из одной БД в другую с помощью таинственной программы Replication.exe, которая вызывает кучу странных методов :) Запрашивать счётчик поколений у БД-сервера надо для того, что бы сравнить его с сохранённым на БД-клиенте(сравнить со счётчиком, кот. был на сервере во время предыдущей репликации) и понять, что на сервере изменилось (если равны - ничего не изменилось). tygra У нас есть свой обмен данными, только он намного проще и понятнее. И без пунктов 6.1 и 6.3. Я ни к кому не навязываюсь. Если для задачи подходят стандартные средства, то естественно их и надо применять. Если у Вас есть свой обмен данными, интересно на него посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 12:24 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
tygraЯ к тому же так и не понял, каким образом данные все-же попадают с одной БД в другую и зачем там запрашивать счетчик поколений. Кроме кучи странных методов процесс попадания данных в базу непонятен. Возможно я изложил свои идеи недостаточно ясно. Постараюсь учесть все замечания. По замыслу статья, документация по БД и исходники должны друг друга дополнять:) (исходники: http://repl2.narod.ru/Replicator_1_beta_src_only.zip ; документация http://repl2.narod.ru/Doc_Replicator_1_beta.zip ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 13:04 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Не-не-не, я не хочу рассматривать никакие исходники. Вы словами можете написать? Например: таинственный Replication.exe идет на одну БД, там делает селект того, что изменилось, делает селект конкретной таблицы и делает инсерт по этому селекту в другую БД. Типа такого хватит. Или словами описать, что делают методы. Иначе непонятно, каким именно путем данные ходят - с помощью этой ехе, через DTS, из БД в БД напрямую или как-то еще. И зачем получать новый счетчик все же - вы храните чтоли всю историю изменений? А зачем? Ну и про механизм поколений - хоть двухэтапный, хоть одноэтапный - я вообще не понял. Что такое поколение, зачем оно.... ========== По поводу своего механизма: если кратко, в нужных местах отписываются события в отдельную таблицу событий обмена. По этой таблице идет ехе, который получает по событию данные и отгоняет в БД-получатель. Работает все через ХП. Никаких поколений, timestamp или чего еще такого. Все тупо и просто, заодно гибко. В таблице событий лежит ссылка на первичный ключ - обычно это ID - по которому потом забираются данные. -- Tygra's -- Мои фотогалереи тут ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 15:45 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
tygraНе-не-не, я не хочу рассматривать никакие исходники. Вы словами можете написать? Например: таинственный Replication.exe идет на одну БД, там делает селект того, что изменилось, делает селект конкретной таблицы и делает инсерт по этому селекту в другую БД. Типа такого хватит. Или словами описать, что делают методы. Иначе непонятно, каким именно путем данные ходят - с помощью этой ехе, через DTS, из БД в БД напрямую или как-то еще. И зачем получать новый счетчик все же - вы храните чтоли всю историю изменений? А зачем? Ну и про механизм поколений - хоть двухэтапный, хоть одноэтапный - я вообще не понял. Что такое поколение, зачем оно.... ========== По поводу своего механизма: если кратко, в нужных местах отписываются события в отдельную таблицу событий обмена. По этой таблице идет ехе, который получает по событию данные и отгоняет в БД-получатель. Работает все через ХП. Никаких поколений, timestamp или чего еще такого. Все тупо и просто, заодно гибко. В таблице событий лежит ссылка на первичный ключ - обычно это ID - по которому потом забираются данные. -- Tygra's -- Мои фотогалереи тут Могу и словами. --- Поколения служит для определения порядка изменений. Это просто счётчик (generator). Произвели кучу изменений, присвоили им поколение напр. 1 Произвели ещё кучу, присвоили поколение 2. и т.д. (каждой записи в таблице данных XXX соответствует запись в таблице LOG_XXX, куда поколение и записывается). Потом такими кучами изменения и передаются. --- История конечно не хранится. Храниться одно число - счётчик поколений. Напр. приняли кучу изменений с поколением 2, запомнили 2. В след. раз запросили у сервера счётчик, а у него он равен 4. Знач надо принять поколения 3 и 4. --- Данные ходят след. образом: replicator.exe коннектится к клиенту и серверу и перегоняет изменения. --- Изменения replicator.exe перегоняет так: надо напр. принять изменения в таблице MASTER, вызывается процедура MASTER_GEN на сервере, входной параметр - значение счётчика поколений. Процедура смотрит в LOG_MASTER находит записи, у кот поколение равно входному параметру, возвращает набор записей и инфу, что с ними делать (вставить, удалить, изменить). Этот набор записей временно сохраняется в таблице MASTER_INPUT а потом изменения применяются к таблице MASTER на клиенте (выполняются вставки изменения удаления). ================== Наверное, Ваш метод похож на описанный в http://home.sinn.ru/~mapnn/articles.html . В там кстати описывается проблема скрытия изменений (из-за чего я и сделал двухэтапную установку поколений). Наск. я понял у вас одна таблица для всех изменений базы в кот заносится ID записи и таблица в кот. произошло изменение. А как Вы решили проблему с уникальными идентификаторами? А у меня напр. БД можно соединять как угодно: каждую с каждой и т.д., причём они могут передавать и принимать данные одновременно (лишь бы БД не принимала одну и ту же запись одновременно от разных серверов) :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 16:41 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
У нас разные подходы, так что сильно не сравнишь. Но хотя бы поговорить можно :) авторНаверное, Ваш метод похож на описанный в http://home.sinn.ru/~mapnn/articles.html. Нет, у них там зачем то дублируются все таблицы. авторНаск. я понял у вас одна таблица для всех изменений базы в кот заносится ID записи и таблица в кот. произошло изменение. Почти так, далее объясню подробнее. авторА как Вы решили проблему с уникальными идентификаторами? Ну это не проблемы репликации конечно. Особых проблем нет, т.к. немного таблиц таких, в которые добавляется информация и там и там. Собственно есть две таких БД, в одной таблица с identity, который отодвинут на некоторый интервал, в другой берется max от этого интервала вниз (пример: 1 БД - от 1 до 100 000 000, 2 БД - от 100 000 001 и до ..) Ну а сам обмен подробнее вот так: Есть типы обмена - событие ложится вв лог с этим типом (не с таблицей). Тип - это сущность, которая описывает хранимую процедуру, отдающие данные, которые нужно перегнать - это могут быть несколько рекордсетов. И набор принимающих хранимых процедур на каждый рекордсет. Это никак не привязано к таблицам в общем случае - оперируем "объетами" так сказать. Например тип обмена "Клиент" содержит в себе несколько рекордсетов по нескольким таблицам. Бонус (большой) - данные не просто добавляются в принимающую БД. Над ними производятся некоторые действия, производяятся вообще некоторые действия над хоть какими таблицами в системе, вообще ничего может никуда не записываться/меняться по приходу обмена - просто делаются какие-то действия (типа: отослать письмо, поменять статус и т.д.), т.е. все то, что можно делать в хранимой процедуре. В принимающей ХП список параметров - их заполняет ехе из пришедших рекордсетов. Имя поля = имя параметра. Как работает: ехе считывает типы обмена, которые могут быть на этом сервере, считывает лог обмена для каждого типа, далее по конкретной записи с ID=1234556 дергает ХП, передав туда в качестве параметра этот ID, обратно получает рекордсет(ы) и по ним для каждого рекордсета дергает принимающую ХП на другой БД. В общем, это не просто репликация данных, это некоторая даже бизнес-логическая штуковина :) -- Tygra's -- Мои фотогалереи тут ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 17:18 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
C ID ясно. У меня по большому счёту так же сделано, просто диапазоны другие:) У Вас, наск. я понял, на каждый рекордсет есть хранимая процедура на передающей БД и на принимающей. Интересная идея с типами обмена. Судя по описанию, очень гибкая. Я так понимаю, что получается двухуровневая иерархия: тип обмена-рекордсеты; данные сразу разбиваются на логические группы. Возникают вопросы: Что будет, если принимающая БД обратиться к передающей второй раз? она получит те же изменения + новые или только новые? Если только новые, то как это сделано? (предполагаю, что лог очищается, но тогда у передающей БД должна быть только одна принимающая) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2006, 19:01 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
авторУ Вас, наск. я понял, на каждый рекордсет есть хранимая процедура на передающей БД и на принимающей. На передающей только одна процедура - с кучей селектов внутри. авторИнтересная идея с типами обмена. Судя по описанию, очень гибкая. Я так понимаю, что получается двухуровневая иерархия: тип обмена-рекордсеты; данные сразу разбиваются на логические группы. Да, так и есть. авторВозникают вопросы: Что будет, если принимающая БД обратиться к передающей второй раз? она получит те же изменения + новые или только новые? Если только новые, то как это сделано? (предполагаю, что лог очищается, но тогда у передающей БД должна быть только одна принимающая) Вообще после того, как обмен успешно прошел, то в логе эта запись уничтожается. Если обмен в несколько БД должен быть, для каждой БД создается своя запись. Изменений собственно то и не передается как таковых - передаются те данные, которые есть на момент запроса от обмена - все данные, какие найдутся. Т.е. независимо от того, менялись данные или нет, все данные по конкретному типу обмена приносятся и меняются - до того, как обмен сработает, можно 10 раз поменять данные, но запись об обмене останется одна. Но можно ведь сделать отдельный тип обмена, который будет срабатывать только по конкретным изменениям, и который будет приносить только те данные, которые в этом случае нужны. Например, при создании чего-то, по этому "чего-то" нужно принести естественно все данные. А при смене статуса "чего-то" можно просто сделать обмен с типом "Изменение статуса" и отписывать только его - а он принесет только данные о статусе, т.к. вообще все данные в этот момент не нужны. Получается, это не только передача данных, а и передача событий тоже. -- Tygra's -- Мои фотогалереи тут ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2006, 13:10 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
tygraВообще после того, как обмен успешно прошел, то в логе эта запись уничтожается. Если обмен в несколько БД должен быть, для каждой БД создается своя запись. Такой подход, наверное, решает проблему скрытия изменений, зато требует больше памяти. tygra Изменений собственно то и не передается как таковых - передаются те данные, которые есть на момент запроса от обмена - все данные, какие найдутся. Т.е. независимо от того, менялись данные или нет, все данные по конкретному типу обмена приносятся и меняются - до того, как обмен сработает, можно 10 раз поменять данные, но запись об обмене останется одна. Но можно ведь сделать отдельный тип обмена, который будет срабатывать только по конкретным изменениям, и который будет приносить только те данные, которые в этом случае нужны. Например, при создании чего-то, по этому "чего-то" нужно принести естественно все данные. А при смене статуса "чего-то" можно просто сделать обмен с типом "Изменение статуса" и отписывать только его - а он принесет только данные о статусе, т.к. вообще все данные в этот момент не нужны. Получается, это не только передача данных, а и передача событий тоже. Почему-то вспоминается MVC или Документ-Представление. Похоже это действительно не репликация БД, а репликация объектов, которые просто хранятся в БД. А почему возникла необходимость сделать именно так? Просто Ваш подход сильно отличается от тех, что я встречал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2006, 17:11 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
И что использовалось для реализации (СУБД и т.д.)? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2006, 17:24 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
MS SQL, Delphi авторА почему возникла необходимость сделать именно так? Просто Ваш подход сильно отличается от тех, что я встречал. Просто это наиболее гибкая и простая возможность передавать не только просто данные одной таблицы, а данные в пределах одного объекта системы, а также передавать события :) Когда все это работает под одним механизмом, гораздо проще и легче. В общем, почти всех зайцев постреляли одним разом. :) Только очень массовая передачи - десятки и сотни тысяч записей - передаем через DTS или напрямую, т.к. загружать стандартный обмен таким количеством данных не стоит :) -- Tygra's -- Мои фотогалереи тут ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 15:21 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
tygraMS SQL, Delphi Наск. я знаю, в MS SQL есть стандартные средства репликации, хотя с событиями наверное ни однин стандартный репликатор не работает:) Случайно наткнулся на целую россыпь тем по репликации: /topic/357703&hl=%f0%e5%ef%eb%e8%ea%e0%f6%e8%ff http://www.rsdn.ru/Forum/Message.aspx?mid=2100448&only=1 http://www.rsdn.ru/Forum/Message.aspx?mid=1269536 http://www.rsdn.ru/File/84/primary_keys_and_replication.zip ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 16:47 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
авторзначение logical clock увеличивается после каждого события (в данном случае событие ‑ изменение), таким образом, можно восстановить очерёдность изменений в одной ЛБД, но нельзя восстановить очерёдность изменений в РБД, т.к. нельзя сравнивать значения logical clock в разных ЛБД Кому, интересно, нужна такая "репликация?" ===============================================================================<BR> Отвечать без смысла на это письмо. <BR>Сообщение направлено вам роботом доски объявлений. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 17:07 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogen авторзначение logical clock увеличивается после каждого события (в данном случае событие ‑ изменение), таким образом, можно восстановить очерёдность изменений в одной ЛБД, но нельзя восстановить очерёдность изменений в РБД, т.к. нельзя сравнивать значения logical clock в разных ЛБД Кому, интересно, нужна такая "репликация?" ===============================================================================<BR> Отвечать без смысла на это письмо. <BR>Сообщение направлено вам роботом доски объявлений. Приведенная цитата - это только пояснения отличия моего метода от описанного в источнике (см. статью ), поэтому риторические вопросы считаю необоснованными:) А почему Вы считаете, что для репликации необходимо знать порядок изменений в РБД? (системный таймер этого напр. не гарантирует) В моём случае на каждой локальной БД как бы свой отсчёт времени. Поэтому сравнивать "время" разных БД нельзя. Но это и не нужно. Для того, что бы определить, какие изменения произошли достаточно знать очерёдность событий в локальной БД (т.е. клиенту достаточно знать очерёдность изменений сервера, причём очерёдность групп а не единичных изменений). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 17:34 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomadeриторические вопросы считаю необоснованными:) А почему Вы считаете, что для репликации необходимо знать порядок изменений в РБД? (системный таймер этого напр. не гарантирует) Ух ты как интересно. Раз системный таймер не гарантирует , то проблемы такой ни у кого нет? Вот Вы попробовали бы изобрести алгоритм, отслеживающий точную хронологию изменений записи в разных БД без использования системного таймера, вот это было бы дело. Так что вопрос не риторический, риторические вопросы задавать мне недосуг. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 17:48 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogen Ух ты как интересно. Раз системный таймер не гарантирует , то проблемы такой ни у кого нет? Непонятный логический переход. У меня такой проблемы нет. Dogen Вот Вы попробовали бы изобрести алгоритм, отслеживающий точную хронологию изменений записи в разных БД без использования системного таймера, вот это было бы дело. Так что вопрос не риторический, риторические вопросы задавать мне недосуг. У меня записи менются только в той БД, в которой созданы. т.е. изменения в БД происходят в 2х случаях: БД менят свои записи, БД получает изменения в чужих записях в процессе репликации. Для определения порядка изменений системный таймер не используется. Зачем Вам всё-таки точная хронология? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 18:14 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomadeЗачем Вам всё-таки точная хронология? Для разрешения update-конфликтов. У Вас такой проблемы нет, зато у тех кто пользуется подобными системами, есть. И решают эту проблему отнюдь не красивыми способами - иногда и надо отредактировать запись в филиале компании, а не разрешают. Ждут центр. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 18:16 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogen nomadeЗачем Вам всё-таки точная хронология? Для разрешения update-конфликтов. У Вас такой проблемы нет, зато у тех кто пользуется подобными системами, есть. И решают эту проблему отнюдь не красивыми способами - иногда и надо отредактировать запись в филиале компании, а не разрешают. Ждут центр. В моей схеме репликации проблему тоже можно решить "некрасивым" способом: разрешить изменения и заменить поле LOG_OWN_GEN "собственное поколение записи" ( см. пример таблицы данных ) на timestamp. Тогда для определения порядка изменений в БД будут по-прежнему использоваться поколения, а при разрешении конфликтов - timestamp. Т.к. методов разрешения конфликтов много (timestamp, приоритет БД, разруливание вручную и т.п.), то я в прототипе эту проблему проигнорировал. Можно напр. сделать как в Delphi: если мы изменили запись в филиале, отправляем в центр, и выясняем, что в центре эту запись поменял кто-то другой, то запись возвращается обратно для ручного разруливания. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 18:50 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Dogen nomadeЗачем Вам всё-таки точная хронология? Для разрешения update-конфликтов.В моей схеме репликации проблему тоже можно решить "некрасивым" способом: Уважаемый nomade, обратите внимание, что оперировать таблицами при построении перспективного (или неперспективного...) репликатора - не очень удачная идея по двум причинам: 1) Ваш продукт будет конкурировать со штатными решениями по репликации, присутствующими в арсенале любой СУБД. Причем конкурировать с заведомо проигрышной позиции, поскольку претендует на универсальность, в то время как решения от вендоров тесно интегрированы с СУБД. 2) Если Вы всерьез задумались о разрешении конфликтов встречных изменений, то обратите внимание на следующее: данные в БД обновляются транзакциями. Транзакция может затрагивать более одной таблицы и выполняться продолжительное время. Пусть есть таблицы Т1, Т2 и их реплики R1, R2. Пусть над T1, T2 проведена транзакция, поменявшая записи T1Rec10 - в момент времени 10 T2Rec25 - в момент времени 20 В то же время над репликой было проведено похожее действо (встречное обновление): R1Rec10 - в момент времени 12 R2Rec25 - в момент времени 18 К какому результату приведет Ваше "некрасивое" решение по разрешению конфликта на базе отдельных таблиц, поколений и timestamp? Гарантирует ли оно целостность (непротиворечивость) данных? ИМХО если и строить что-то свое, то лучше на принципах, подобных изложенным tygra - с ориентацией на бизнес-смысл потоков данных, а не на их физическое хранение. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 22:43 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
contr ИМХО если и строить что-то свое, то лучше на принципах, подобных изложенным tygra - с ориентацией на бизнес-смысл потоков данных, а не на их физическое хранение. Совершенно верно. В свете этого пассажи про распределенные транзакции теряют смысл. Кроме того, репликация - это синхронизация одинаковых таблиц (грубо), а не распределенная транзакция. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 23:02 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogenпассажи про распределенные транзакции Я что-то пропустил? Не нашел ни одного пассажа про распределенные транзакции... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 23:11 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
contr Dogenпассажи про распределенные транзакции Я что-то пропустил? Не нашел ни одного пассажа про распределенные транзакции... А и правда. Я слишком быстро прочитал Ваш текст :) Вообще считаю что транзакции выполняются достаточно быстро и пример интересен только теоретически, тем более что для целей репликации во всех таблицах должно быть поле для временной отметки, а уж если в таких полях при изменении записей в рамках транзакции проставятся разные (?) значения, то это не суть важно. Или репликация будет отталкиваться от них, или она будет работать с сущностью более высокого логического уровня. чем запись в таблице. Например. с документом. А на весь документ имеется по логике ведей ОДИН таймстамп. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 23:25 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
А было бы любопытно рассмотреть репликацию документа как распределенную транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 23:27 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogen Обратите внимание на тот факт, что в "документарной" постановке речь уже не идет о репликации таблиц - система репликации в этом случае изначально завязана на бизнес-логику. Ее можно построить "в общем виде" отдельно от приложения - неплохо описано tygra, а можно построить частное репликационное решение, под которое заточить само приложение (Ваш вариант с timestamp документа). Что до продолжительности транзакций... Ну... Разные они бывают, бывают короткие (характерно для OLTP) бывают и многочасовые (например, злой ETL в DWH). Расмотреть репликацию документа как распределенную транзакцию вполне возможно - нам потребуется двухфазный коммит "по переписке" и пользователь, готовый сутками ждать освобождения блокировки на нужный документ :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2006, 23:39 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Зря напали на человека А по моему нормальный механизм репликации, сам применял подобный в паре проектов, идею придумал не я, взял отсюда: Репликация AD Если не касаться частностей, то это аналог приведенной реализации ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 08:16 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
ShultzeЗря напали на человека А по моему нормальный механизм репликации, сам применял подобный в паре проектов, идею придумал не я, взял отсюда: Репликация AD Если не касаться частностей, то это аналог приведенной реализации А никто не спорит. Человек попросил заценить, а ему говорят, что мастер-слэйв неинтересно и в самом деле может быть реализовано встроенными средствами серверов (хотя я бы делал все сам, к примеру). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 10:20 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
contr nomade Dogen nomadeЗачем Вам всё-таки точная хронология? Для разрешения update-конфликтов.В моей схеме репликации проблему тоже можно решить "некрасивым" способом: Уважаемый nomade, обратите внимание, что оперировать таблицами при построении перспективного (или неперспективного...) репликатора - не очень удачная идея по двум причинам: 1) Ваш продукт будет конкурировать со штатными решениями по репликации, присутствующими в арсенале любой СУБД. Причем конкурировать с заведомо проигрышной позиции, поскольку претендует на универсальность, в то время как решения от вендоров тесно интегрированы с СУБД. 2) Если Вы всерьез задумались о разрешении конфликтов встречных изменений, то обратите внимание на следующее: данные в БД обновляются транзакциями. Транзакция может затрагивать более одной таблицы и выполняться продолжительное время. Пусть есть таблицы Т1, Т2 и их реплики R1, R2. Пусть над T1, T2 проведена транзакция, поменявшая записи T1Rec10 - в момент времени 10 T2Rec25 - в момент времени 20 В то же время над репликой было проведено похожее действо (встречное обновление): R1Rec10 - в момент времени 12 R2Rec25 - в момент времени 18 К какому результату приведет Ваше "некрасивое" решение по разрешению конфликта на базе отдельных таблиц, поколений и timestamp? Гарантирует ли оно целостность (непротиворечивость) данных? ИМХО если и строить что-то свое, то лучше на принципах, подобных изложенным tygra - с ориентацией на бизнес-смысл потоков данных, а не на их физическое хранение. Ценные замечания. 2)Признаюсь, я про обновления на разных БД толком не думал. А это, как оказалось, серьёзный недостаток. На краткость транзакций надеяться не приходится, время и так не слишком надёжно. Пока что вижу такое решение описанной Вами проблемы: применить двухэтапную установку времени (как в поколениях) :). Получится такая штука: Пусть есть таблицы Т1, Т2 и их реплики R1, R2. Пусть над T1, T2 проведена транзакция, поменявшая записи T1Rec10 - момент времени: NULL T2Rec25 - момент времени: NULL Записи недоступны для репликации. Перидически заупскается транзакция, кот. устанавливает поколения, одновременно она устанавливает и время: T1Rec10 - момент времени: 30 T2Rec25 - момент времени: 30 Записи доступны для репликации. В то же время над репликой было проведено похожее действо (встречное обновление): R1Rec10 - момент времени: NULL R2Rec25 - момент времени: NULL Потом установили время: R1Rec10 - момент времени: 20 R2Rec25 - момент времени: 20 --- Целостность сохраняется (пока ИМХО. надо проверить:) Время оценивается конечно грубовато. 1)Да я сознаю, что область применения самописных методик очень небольшая. Но, судя по форумам, такая необходимость иногда всё-таки есть. У меня пока не продукт а прототип, который ИМХО можно приспособить к конкретной ситуации. contr ИМХО если и строить что-то свое, то лучше на принципах, подобных изложенным tygra - с ориентацией на бизнес-смысл потоков данных, а не на их физическое хранение. Мне сложно сказать. Готовых репликаторов действительно много. А описаний методик почему-то мало:) Может моя схема кому-то пригодится. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 13:22 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
ShultzeЗря напали на человека А по моему нормальный механизм репликации, сам применял подобный в паре проектов, идею придумал не я, взял отсюда: Репликация AD Если не касаться частностей, то это аналог приведенной реализации Приятно слышать, что подходы, подобные моему, применяются на практике. В статье, наск. я понял, речь идёт о репликации объектов. Как этот подход можно применять к БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 15:58 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade ShultzeЗря напали на человека А по моему нормальный механизм репликации, сам применял подобный в паре проектов, идею придумал не я, взял отсюда: Репликация AD Если не касаться частностей, то это аналог приведенной реализации Приятно слышать, что подходы, подобные моему, применяются на практике. В статье, наск. я понял, речь идёт о репликации объектов. Как этот подход можно применять к БД? В АД репликация сетевая, попарно между серверами, в режиме мастер-мастер. Ничего общего. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 16:16 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogen ShultzeЗря напали на человека А по моему нормальный механизм репликации, сам применял подобный в паре проектов, идею придумал не я, взял отсюда: Репликация AD Если не касаться частностей, то это аналог приведенной реализации А никто не спорит. Человек попросил заценить, а ему говорят, что мастер-слэйв неинтересно и в самом деле может быть реализовано встроенными средствами серверов (хотя я бы делал все сам, к примеру). Обсуждение на форуме - неплохой способ для "стресс-тестирования" метода. Кроме многочисленных достоинств моего метода обнаружились и некоторые недостатки:) Несколько раз критиковалась схема мастер-слэйв. Похоже от неё таки прийдётся избавиться. Вопрос к экспертам: достаточно ли позволить всем БД изменять чужие записи но запретить удаление? Или все БД должны иметь возможность и удалять чужие записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 16:24 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomadeВопрос к экспертам: достаточно ли позволить всем БД изменять чужие записи но запретить удаление? Или все БД должны иметь возможность и удалять чужие записи? Это к заказчикам вопрос, а не к экспертам. Если Вы занимаетесь общим случаем, то всё нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 16:36 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogen В АД репликация сетевая, попарно между серверами, в режиме мастер-мастер. Ничего общего. Сеть можно и у меня сделать: соединять БД можно как угодно и две БД могут одновременно реплицироваться друг с другом. (правда, не мультимастер:( ) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 16:42 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Dogen nomadeВопрос к экспертам: достаточно ли позволить всем БД изменять чужие записи но запретить удаление? Или все БД должны иметь возможность и удалять чужие записи? Это к заказчикам вопрос, а не к экспертам. Если Вы занимаетесь общим случаем, то всё нужно. С удалением и так проблем много:) Тогда можно по-другому спросить: насколько часто втречается необходимось удалять чужие записи? (хотя конечно если делать общий алгоритм, то надо или всё запретить или всё разрешить:) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 16:57 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Dogen nomadeВопрос к экспертам: достаточно ли позволить всем БД изменять чужие записи но запретить удаление? Или все БД должны иметь возможность и удалять чужие записи? Это к заказчикам вопрос, а не к экспертам. Если Вы занимаетесь общим случаем, то всё нужно. С удалением и так проблем много:) Тогда можно по-другому спросить: насколько часто втречается необходимось удалять чужие записи? (хотя конечно если делать общий алгоритм, то надо или всё запретить или всё разрешить:)У Вас какой-то подход не от жизни. Удалять на определенном уровне абстракции надо разрешать всё, а запрещать - это уже уровень выше, т.е. уровень бизнес-логики. При этом физического удаления записей не должно происходить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 17:03 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Для централизованных систем линейная репликация серверов БД не годится.. и интересно, кто расскажет что это не так... Статью прочитал бегло, не понял зачет версионность. Практическая модель централизованной репликации есть, что тоже не велосипед. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 17:17 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
DogenУ Вас какой-то подход не от жизни. Удалять на определенном уровне абстракции надо разрешать всё, а запрещать - это уже уровень выше, т.е. уровень бизнес-логики. При этом физического удаления записей не должно происходить. Просто я не привязываюсь к конкретным примерам. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 17:22 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Валентин КДля централизованных систем линейная репликация серверов БД не годится.. и интересно, кто расскажет что это не так... наск. я понял, для ценрализованных систем не годится репликация "каждый с каждым". т.к. иерархическая система проще, то из репликации "каждый с каждым" всегда можно сделать репликацию "центр-филиалы". Валентин К Статью прочитал бегло, не понял зачет версионность. Если имеется ввиду поле LOG_OWN_GEN "собственное поколение записи" (см. пример таблицы данных) , то оно для разрешения кофликтов обновления. Если вы про поколения, то они для того, что бы определить какие изменения произошли. Клиенту достаточно хранить одно число - старое значение счётчика поколений сервера, что бы понять, что на сервере изменилось. Валентин К Практическая модель централизованной репликации есть, что тоже не велосипед. Я не спорю. Даже привёл список ссылок на другие статьи. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 17:40 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Валентин КДля централизованных систем линейная репликация серверов БД не годится.. и интересно, кто расскажет что это не так... наск. я понял, для ценрализованных систем не годится репликация "каждый с каждым". т.к. иерархическая система проще, то из репликации "каждый с каждым" всегда можно сделать репликацию "центр-филиалы". Не всегда. Вы работали с реальными системами учета, или только с демобазой из поставки Борланда? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 17:45 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Валентин К Статью прочитал бегло, не понял зачет версионность. Если имеется ввиду поле LOG_OWN_GEN "собственное поколение записи" (см. пример таблицы данных) , то оно для разрешения кофликтов обновления. Если вы про поколения, то они для того, что бы определить какие изменения произошли. Клиенту достаточно хранить одно число - старое значение счётчика поколений сервера, что бы понять, что на сервере изменилось. Зачем вообще версионность и зачем по ней определять что-то? это тупиковая мысль, рабочая, но иррациональная. Можете применять. Но реально лучше сделать проще, надежней и быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 17:47 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Валентин К Практическая модель централизованной репликации есть, что тоже не велосипед. Я не спорю. Даже привёл список ссылок на другие статьи. У меня есть, и ссылки на нее нету, потому что в инет не выкладывал. Всяких статей читал. На практике смотрел. В основном - фигня. Считаю основным критерием работоспособноть модели на больших объемах данных, все остальное - нажитие гимороя. Кто считает иначет - слушаю ваши "за". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 17:50 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Валентин К Зачем вообще версионность и зачем по ней определять что-то? это тупиковая мысль, рабочая, но иррациональная. Можете применять. Но реально лучше сделать проще, надежней и быстрее. Обоснуйте своё высказывание. Что конкретно Вы предлагаете взамен? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 18:09 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Валентин КУ меня есть, и ссылки на нее нету, потому что в инет не выкладывал. Очень плохо. Валентин К Всяких статей читал. На практике смотрел. В основном - фигня. Сильное утверждение:) Валентин К Считаю основным критерием работоспособноть модели на больших объемах данных, все остальное - нажитие гимороя. Кто считает иначет - слушаю ваши "за". Для проверки работоспособности в разных ситуациях к статье прилагается прототип. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 18:13 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
Валентин К Не всегда. Вы работали с реальными системами учета, или только с демобазой из поставки Борланда? Не работал. Зато участвовал в создании:) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 18:17 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Валентин К Зачем вообще версионность и зачем по ней определять что-то? это тупиковая мысль, рабочая, но иррациональная. Можете применять. Но реально лучше сделать проще, надежней и быстрее. Обоснуйте своё высказывание. Что конкретно Вы предлагаете взамен? Я не предлагаю, и не обосновываю. У меня уже это работает быстро и эффективно. Я просто прокомментировал где есть нерациональные направления мысли, с моей точки зрения. Остальное, суды по тексту и статье - вы ближе к науке - додумайте сами. Обучать у меня к сожалению нет ни времени ни желания. Иногда под заказ делаю экспертизы учетных систем - вас не прошу доверять моему мнению, просто констатирую факты. Когда вы поработаете с реальными системами и реальными объемами данных (таблицы более 15 млн строк), которые нужно подымать на аналитических отчетах и пр... сделаете планировку OLAP-системы... централизованную репликацию, которая имеет устойчивость около 99,999% возможно мои высказывания покажутся вам более логичными, чем ваши сейчас. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 18:20 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Валентин К Не всегда. Вы работали с реальными системами учета, или только с демобазой из поставки Борланда? Не работал. Зато участвовал в создании:) Участвовать в создании советую, только после практики на данных, которых много, а не на прототипах. Иначе прийдется переделывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 18:21 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
nomade Валентин К Всяких статей читал. На практике смотрел. В основном - фигня. Сильное утверждение:) Скорее фактическое положение, нежели досужее утверждение, хотя для форума просто набор букв или фраза напышенного студента :) Вся загвозка в том, что я не студент уже давно... Но теоретические материалы пишу по мере необходимости, т.к. иначе можно участвовать в написании систем и не понимать "зачем" тот или иной объект, слой и пр... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 18:24 |
|
репликация: зацените новый велосипед
|
|||
---|---|---|---|
#18+
А особенно руководить разработкой и не понимать, что собственно говоря делается подчиненными и к чему это приведет, а когда приведет - переделывать. Статья продуманная, теория вроде гладкая... вобщем риспект. Зерно правильного мышления есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2006, 18:27 |
|
|
start [/forum/topic.php?all=1&fid=33&tid=1549237]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
227ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
238ms |
get tp. blocked users: |
1ms |
others: | 278ms |
total: | 789ms |
0 / 0 |