|
|
|
Необычная реализация "синхронизации" (без конфликтов). Оцените идею
|
|||
|---|---|---|---|
|
#18+
На самом деле не совсем синхронизация, поскольку в этой схеме не будет конфликтов. Предыстория, есть программа на VB6(с корнями глубоко в прошлом) и на Access. Сейчас программа полностью переписывается под .Net4.0 со всеми наворотами. Но новая версия опаздывает, и потому нужно чтобы версия VB6 имела возможность работать параллельно с .Net, который будет использовать SQLExpress2008 Проблема в том что старая версия использовала систему обновления данных восходящую еще ко временам текстовых файлов на дискетах, и сменила только способ доставки этих текстовых файлов... Задача. Три сотни клиентов с локальными базами, один центральный сервер, клиенты подключаются очень нерегулярно(в течении года), актуальность обновления не критична. Данные (таблицы) трех групп - глобальные (общие для всех клиентов, изменяются ОДНИМ администратором), региональные (изменяются ОДНИМ ответственным в каждом регионе) и клиентские (сохраняются в центральный сервер, но их там никто не меняет) С такими ограничениями необходимости разрешать конфликты вроде бы нет. Потому была выдвинута идея простого способа обновлять данные - по логу. Иначе говоря, в функции, которая выполняет запрос, каждый запрос не только исполняется, но и сохраняется в таблицу в виде (ID int,Request string). При "синхронизации" админ досылает на сервер новые рекеты, а юзеры при подключении получают рекеты с новыми айдишниками и применяют их. Так же админ исполняет запросы на центральном сервере, чтобы иметь там актуальную базу, и не портить старый механизм обновления. Способ странный, но он много проще в реализации чем, например, добавлять в каждую таблицу дату обновления-удаления, и много легче по ресурсам(прежде всего сети) чем настоящая синхронизация(массивы данных могут быть приличными, до полумиллиона записей). Я, может быть по неопытности, не вижу минусов в такой реализации, но не нашел нигде упоминаний такого способа, поэтому хочу спросить у знающих людей - в чем может быть подвох? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2011, 12:07 |
|
||
|
Необычная реализация "синхронизации" (без конфликтов). Оцените идею
|
|||
|---|---|---|---|
|
#18+
MADem, вопросы: 1. Последовательность выполнения запросов влияет на результат? если - да - сможете ли вы обеспечить ту же последовательность запросов при обновлениях? 2. Место применения запросов (1, 2, 3) не повлияет на результат выполнения каждого запроса? Минус: запросы модификации можно разделить на простые (учётные) и сложные (сохранение результатов расчётов). При вашей схеме "логирование запросов" на второй тип запросов понадобятся ресурсы на всех серверах. Если у вас такиз запросов нет или пренебрежительно мало - проблем нет. По поводу новизны идеи: в куче СУБД используются куча разных механизмов репликации. В том числе и описанный Вами. Например, http://msdn.microsoft.com/en-us/library/ms152565.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2011, 13:08 |
|
||
|
Необычная реализация "синхронизации" (без конфликтов). Оцените идею
|
|||
|---|---|---|---|
|
#18+
АнатоЛой, 1. Последовательность обеспечивается ID, иначе упадем на foreign_key. Запросы будут выполнятся просто по возрастанию ID, удаления не предусмотрено. Клиенты друг на друга не влияют, а вот порядок обновления Глобальные->Региональные->Клиентские строгий, там уже зависимости, но опять же - не должно оставаться возможности его нарушить. 2. Место выполнения влиять не должно, поскольку в исходном положении базы(их соответствующие части) должны быть одинаковы(например все таблицы что относятся к глобальным, и к которым мы применяем запросы из группы "глобальные"). На старых клиентах это будет обеспечиваться старым механизмом обновления... и вы правы, надо быть внимательнее, чтобы обновить совсем старые базы до момента когда будет запущен новый механизм и не дальше, подумаю над этим, спасибо. По сложным запросом не совсем понял, имеется ввиду вычисления на стороне сервера? Таких запросов вроде бы нету. И спасибо за ссылку, видимо не так искал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2011, 13:57 |
|
||
|
Необычная реализация "синхронизации" (без конфликтов). Оцените идею
|
|||
|---|---|---|---|
|
#18+
MADemПо сложным запросом не совсем понял, имеется ввиду вычисления на стороне сервера? Таких запросов вроде бы нету. Да, с одним нюансом - сложные запросы модификации , т.е. не просто вычисления, а вычисления, результаты которых сохраняются в БД, а не просто отдаются клиенту... Ну нет - и слава Богу :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2011, 12:30 |
|
||
|
Необычная реализация "синхронизации" (без конфликтов). Оцените идею
|
|||
|---|---|---|---|
|
#18+
MADem, Велосипед давно изобретен в системе репликации Sybase Anywhere ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2011, 13:02 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37386795&tid=1542067]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 435ms |

| 0 / 0 |
