Репликация... IB / Firebird

8 отговора 242 прегледа
#1

Репликация... IB / Firebird

Няколко питания по въпроса - предварително се извинявам за неясното обяснение (може би)
1. Ще трябва да се боря с такова нещо - а не съм се занимавал с готовите продукти за това (по то4но съм си правил собствена доста ограничена система за това). Но сега проекта е по голям и няма да мога да използвам това което бях правил. Ще се радвам ако някой сподели малко опит и насоки с какво да се захвана първо.
Малко инфо за проекта - няма да бъде голям - едва ли ще надхвърля 100 000 реда - най-голямата таблица - около 10-15 полета предимно числа; около 10-15 таблици - повечето едва ли ще имат пове4е от 2-3000 реда.
Проблема е, че данните ще се модифицират на 2 места - т.е. - част от данните ще се модифицират на едно, а друга на друго място.

2. Във връзка с първото - дайте идеи за уникални първични ключове - мисля да ползвам числа (long int), но мисля, че ще е добре да различавам данните и по сървъри - примерно нещата правени на сървър 1 - 10000001,2,3... нещо подобно ,а на сървър 2 20000001,2,3
Милех да вкарвам отделна колона и първичния ключ да се състои от 2 полета - но няма смисъл - при положение, че едното поле ще е константно - по добре може би да ползвам тригер за дефиниране на първичния ключ в зависимост от сървъра.
Ще съм благодарен ако има някой който се е занимавал с това да сподели малко инфо .

Черпенето осигурено ;-)))

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #2

Re: Репликация... IB / Firebird

1. Ако съм те разбрал правилно, IMHO задачата няма общо решение, но за отделните частни случаи може да се намери частно решение. Ако искаш прегледай:
[линк]
[линк]
[линк]
[линк]

2. Аз използвам следния механизъм:
- Определям първите няколко бита от Id да идентифицират сървъра (напр.5 позволяват да се работи с до 31 сървъра, 0 използвам за служебни цели)
- На всеки сървър при инсталацията присвоявам номер (1..31), който записвам в самата база.
- При определяне на Id използвам UDF които от стойността на съответния генератор и идентификатора на сървъра връща съответната стойност

Отговор
в отговор на NDeu #3

Re: Репликация... IB / Firebird

Явно съм преоткрил топлата вода ;-) - по точка 2 нямаме различия, както успях да прочета и във връзките които ми изпрати.
За съжаление се обедих, че готов софтуер, който да извършва оптимална репликация няма ?!? За съжаление това което видях като софтуер е доста старо (най-новото е от 2000 - при това връзката не работи), което ме навежда на мислълта, че ще трябва пак да пиша мое решение - което никак не ми е приятно - най-малкото, че ще отнеме време и ресурси - които в момента нямам.

Интересува ме дали си пробвал Replication Server-a който върви с IB ? И въобще какво е поведението му - ако се ползва по dial-up канал и дали въобще е възможно?!?

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #4

Re: Репликация... IB / Firebird

ако правилно съм те разбрал....
при този обем данни ми изглежда по-разумно да си направиш пълна репликация - нека няма уникални първични ключове по сървъри...ще ти спести много код
от друга страна, ако искаш да помни кои данни на кой сървър са модифицирани/въведени/изтрити - нищо не ти пречи да си направиш една таблица, в която да помниш първичните ключове на модифицираните/въведени/изтрити полета, и тази таблица може да си стои кротичко на всеки сървър без да се репликира....

[линк]
Отговор
в отговор на PhantomAS #5

Re: Репликация... IB / Firebird

За съжаление с Replication Server-а не съм работил

Връзките, които ти дадох са стари, защото проекта в който съм решавал този проблем беше от преди няколко години. Но можеш да потърсиш по-нови решения.


Редактирано от NDeu на

Отговор
в отговор на Topбaлaн #6

Re: Репликация... IB / Firebird

Не става - защото на две места ще се модифицират данните - а пък те са свързани ;-)) т.е. в една и съща таблица ще има модификации от две места (но отнасящи се за различни обекти) Реално канала ми поставя много кофти ограничения.
За пълното копиране - няма смисъл да се мисли - при база данни от 30 - 50 МВ ще е безумие за dial-up. Освен това с течение на годините данните ще растат, аз споменах данните само за 1 година ;-). Разбира се репликацията няма да засяга старите данни или тези което вече са синхронизирани.
Интересно ми е дали някой въобще се занимава с репликация при такива "ненормални условия" - имам предвид dial-up канала при това не на цифрова линия. Хубавото е че поне една от базите ще е on-line и връзката ще е през интернет.

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #7

мъхъм

не съм добре запознат, но имах подобни терзания за репликации....
та питах когото трябва и ми беше отговорено, че базата данни (аз за MS SQL Qerver) е умна...не точи много информация по канала за репликацията...
само че - dial-up хич не ми звучи сериозно...

ти пълната репликация не си я представяй като копиране на целия файл...

[линк]
Отговор
в отговор на Topбaлaн #8

Re: мъхъм

Ами чесно казано след като доста мислих и четох по проблема - единствения възможен избор за пълна (оптимална) репликация е на база на check суми на таблици - и ако се различават - check сума на всички редове (като може да се оптимизира - ако се направят check суми на колони - и да се махнат излишните колони за трансфер). Но за съжаление не виждам такова готово решение - реално то може да се направи за всеки SQL сървър - стига той да подържа функции за извеждане на check суми ?!? - а пък за такова нещо не съм чувал.
Реално моята идея е неприложима или трудно приложима -и избягва всякакви журнали и прочие методи ползвани при репликацията(е не съвсем остават някои колизии - но и за тях съм помислил).

Ако имаш инфо за метода който се използва при репликация в MySQL ( ако има нещо стандартно като при IB 6/7) ще се радвам да споделиш.

Проблема е доста интересен - и ако някой не се е сбъсквал - не е гаранция, че при съвременните комуникации няма да се сблъска ;-)

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #9

не, не съм се блъскал с ....

IB / MySql
репликации съм правил само с хелп в едната ръка на MS SQL Server 2000 ама там проблеми няма - не се грижиш за нищо, освен да опишеш репликациите...
от там нататък - сървърът да му мисли...

представях си, че и в IB има нещо подобно...

[линк]
Отговор