сразу оговорюсь вопрос не о репликациях.
сейчас столкнулся с проблемой синхронизации 2х различных баз данных / таблиц (различных в смысле количество данных или драйвера)
общение должно происходить всегда в одну сторону по средствам soap.
те. к примеру, исполнитель (имеющий данные нескольких заказчиков), опрашивает одного из заказчиков в попытке взять новые заказы.
заказы это табличные данные, по структуре у всех учасников одинаковые:
( id:"22-42", order:"сделай, а..." ).
при этом id всегда уникалелен для всех учасников
в обратную сторону тоже протекают данные. те исполнитель к примеру рапортует о проделанной работе.
(id:1-5041, order_id:22-42, desc: готово, invoice: EUR 3.45 ).
далее вопрос реализации. те понятно что опрос новых записей это where last_sync_time > now().
а как провести трансакцию. между двумя машинами. заказчик не должен иметь возможности обновлять данные на момент синхронизации и только когда данные записались они пометились синхронизированными.
клиент (исполнитель)
сервер (заказчик)
а как назад откатиться если done небыл вызван?, кроном?
а как определить что время вышло?
а не слишком ли сложно?
ну и вопрос готовых библиотечек тоже очень актуален.
к примеру на сервере исполнителя стоит mysql / php. у заказчика mssql или postgre / php или js в связке с монго.
сейчас столкнулся с проблемой синхронизации 2х различных баз данных / таблиц (различных в смысле количество данных или драйвера)
общение должно происходить всегда в одну сторону по средствам soap.
те. к примеру, исполнитель (имеющий данные нескольких заказчиков), опрашивает одного из заказчиков в попытке взять новые заказы.
заказы это табличные данные, по структуре у всех учасников одинаковые:
( id:"22-42", order:"сделай, а..." ).
при этом id всегда уникалелен для всех учасников
в обратную сторону тоже протекают данные. те исполнитель к примеру рапортует о проделанной работе.
(id:1-5041, order_id:22-42, desc: готово, invoice: EUR 3.45 ).
далее вопрос реализации. те понятно что опрос новых записей это where last_sync_time > now().
а как провести трансакцию. между двумя машинами. заказчик не должен иметь возможности обновлять данные на момент синхронизации и только когда данные записались они пометились синхронизированными.
клиент (исполнитель)
PHP:
$db->begin();
$db->set( $ws->get() ); // {id:"22-42", order:"сделай, а..."}
$ws->done( now() );
$db->commit();
// after a long time
$db->begin();
if( $time = $ws->set( $db->get() ){ // {id:1-5041, order_id:22-42, desc: готово, invoice: EUR 3.45}
$db->set('{last_sync_time:$time}');
$db->commit();
PHP:
$ws->on( 'get', function(){
$db->set( '{synchronization:1}'); // начали синхронизацию, данные нельзя менять
return $db->get();
});
$ws->on('set', function($data){
$db->begin();
$db->set($data)
$db->commit();
return now();
});
$ws->on('done', function($time){
$db->set( '{synchronization:0, last_sync_time:$time}' );
});
а как определить что время вышло?
а не слишком ли сложно?
ну и вопрос готовых библиотечек тоже очень актуален.
к примеру на сервере исполнителя стоит mysql / php. у заказчика mssql или postgre / php или js в связке с монго.
Последнее редактирование: