数据库同步的方式有设置标志位同步方式、以时间戳同步的方式,对于一对一的同步这两种方式都满足,但是对于一对多的同步,则只能选择时间戳的同步方式了,但是已时间戳同步的方式的一个问题是如何可靠的保证数据可以不丢失的同步到数据库中。下面有两种方式来保证以时间戳同步的可靠性。
1、计算服务器与客户端两台电脑的时间差,将该时间差记入在同步时间的比对当中,下图是使用kettle做的一个计算同步的时间差的思路:

该思路的xml代码为:
getLeadValue
Normal
0
/downloadServerData/commonData
ID_BATCHYID_BATCHCHANNEL_IDYCHANNEL_IDTRANSNAMEYTRANSNAMESTATUSYSTATUSLINES_READYLINES_READLINES_WRITTENYLINES_WRITTENLINES_UPDATEDYLINES_UPDATEDLINES_INPUTYLINES_INPUTLINES_OUTPUTYLINES_OUTPUTLINES_REJECTEDYLINES_REJECTEDERRORSYERRORSSTARTDATEYSTARTDATEENDDATEYENDDATELOGDATEYLOGDATEDEPDATEYDEPDATEREPLAYDATEYREPLAYDATELOG_FIELDYLOG_FIELD
ID_BATCHYID_BATCHSEQ_NRYSEQ_NRLOGDATEYLOGDATETRANSNAMEYTRANSNAMESTEPNAMEYSTEPNAMESTEP_COPYYSTEP_COPYLINES_READYLINES_READLINES_WRITTENYLINES_WRITTENLINES_UPDATEDYLINES_UPDATEDLINES_INPUTYLINES_INPUTLINES_OUTPUTYLINES_OUTPUTLINES_REJECTEDYLINES_REJECTEDERRORSYERRORSINPUT_BUFFER_ROWSYINPUT_BUFFER_ROWSOUTPUT_BUFFER_ROWSYOUTPUT_BUFFER_ROWS
ID_BATCHYID_BATCHCHANNEL_IDYCHANNEL_IDLOG_DATEYLOG_DATELOGGING_OBJECT_TYPEYLOGGING_OBJECT_TYPEOBJECT_NAMEYOBJECT_NAMEOBJECT_COPYYOBJECT_COPYREPOSITORY_DIRECTORYYREPOSITORY_DIRECTORYFILENAMEYFILENAMEOBJECT_IDYOBJECT_IDOBJECT_REVISIONYOBJECT_REVISIONPARENT_CHANNEL_IDYPARENT_CHANNEL_IDROOT_CHANNEL_IDYROOT_CHANNEL_ID
ID_BATCHYID_BATCHCHANNEL_IDYCHANNEL_IDLOG_DATEYLOG_DATETRANSNAMEYTRANSNAMESTEPNAMEYSTEPNAMESTEP_COPYYSTEP_COPYLINES_READYLINES_READLINES_WRITTENYLINES_WRITTENLINES_UPDATEDYLINES_UPDATEDLINES_INPUTYLINES_INPUTLINES_OUTPUTYLINES_OUTPUTLINES_REJECTEDYLINES_REJECTEDERRORSYERRORSLOG_FIELDNLOG_FIELD
0.0
0.0
10000
50
50
N
Y
50000
Y
N
1000
100
-
2012/11/16 13:59:51.117
-
2014/05/12 15:22:12.008
backupConn
${CLIENT_DATABASE_IP}
ORACLE
Native
${CLIENT_DATABASE_NAME}
${CLIENT_DATABASE_PORT}
${CLIENT_DATABASE_USERNAME}
${CLIENT_DATABASE_PASSWORD}
FORCE_IDENTIFIERS_TO_LOWERCASEN
FORCE_IDENTIFIERS_TO_UPPERCASEN
IS_CLUSTEREDN
PORT_NUMBER${CLIENT_DATABASE_PORT}
QUOTE_ALL_FIELDSN
SUPPORTS_BOOLEAN_DATA_TYPEN
USE_POOLINGN
serverConn
${SERVER_DATABASE_IP}
ORACLE
Native
${SERVER_DATABASE_NAME}
${SERVER_DATABASE_PORT}
${SERVER_DATABASE_USERNAME}
${SERVER_DATABASE_PASSWORD}
FORCE_IDENTIFIERS_TO_LOWERCASEN
FORCE_IDENTIFIERS_TO_UPPERCASEN
IS_CLUSTEREDN
PORT_NUMBER${SERVER_DATABASE_PORT}
QUOTE_ALL_FIELDSN
SUPPORTS_BOOLEAN_DATA_TYPEN
USE_POOLINGN
wardConn
${CLIENT_DATABASE_IP}
ORACLE
Native
${CLIENT_DATABASE_NAME}
${CLIENT_DATABASE_PORT}
${CLIENT_DATABASE_USERNAME}
${CLIENT_DATABASE_PASSWORD}
FORCE_IDENTIFIERS_TO_LOWERCASEN
FORCE_IDENTIFIERS_TO_UPPERCASEN
INITIAL_POOL_SIZE50
IS_CLUSTEREDN
MAXIMUM_POOL_SIZE500
PORT_NUMBER${CLIENT_DATABASE_PORT}
QUOTE_ALL_FIELDSN
SUPPORTS_BOOLEAN_DATA_TYPEN
USE_POOLINGY
增加常量增加常量 2Y 计算器Set Variables 2Y 调用DB存储过程调用DB存储过程 2Y 调用DB存储过程 2增加常量Y 增加常量 2计算器Y
Set Variables 2
SetVariable
Y
1
none
TIMEDIFF
DOWNLOAD_SERVER_COMMON_DATA_LEAD
JVM
Y
118
273
Y
增加常量
Constant
Y
1
none
DIVIDEND
Integer
86400000
-1
-1
388
241
Y
增加常量 2
Constant