NTP方式保证以时间戳同步可靠性
数据库同步的方式有设置标志位同步方式、以时间戳同步的方式,对于一对一的同步这两种方式都满足,可是对于一对多的同步,则仅仅能选择时间戳的同步方式了。可是已时间戳同步的方式的一个问题是怎样可靠的保证数据能够不丢失的同步到数据库中。以下有两种方式来保证以时间戳同步的可靠性。
1、计算server与client两台电脑的时间差,将该时间差记入在同步时间的比对其中,下图是使用kettle做的一个计算同步的时间差的思路:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3NodWl5dWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
该思路的xml代码为:
- <transformation>
- <info>
- <name>getLeadValue</name>
- <description/>
- <extended_description/>
- <trans_version/>
- <trans_type>Normal</trans_type>
- <trans_status>0</trans_status>
- <directory>/downloadServerData/commonData</directory>
- <parameters>
- </parameters>
- <log>
- <trans-log-table><connection/>
- <schema/>
- <table/>
- <size_limit_lines/>
- <interval/>
- <timeout_days/>
- <field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field></trans-log-table>
- <perf-log-table><connection/>
- <schema/>
- <table/>
- <interval/>
- <timeout_days/>
- <field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
- <channel-log-table><connection/>
- <schema/>
- <table/>
- <timeout_days/>
- <field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
- <step-log-table><connection/>
- <schema/>
- <table/>
- <timeout_days/>
- <field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
- </log>
- <maxdate>
- <connection/>
- <table/>
- <field/>
- <offset>0.0</offset>
- <maxdiff>0.0</maxdiff>
- </maxdate>
- <size_rowset>10000</size_rowset>
- <sleep_time_empty>50</sleep_time_empty>
- <sleep_time_full>50</sleep_time_full>
- <unique_connections>N</unique_connections>
- <feedback_shown>Y</feedback_shown>
- <feedback_size>50000</feedback_size>
- <using_thread_priorities>Y</using_thread_priorities>
- <shared_objects_file/>
- <capture_step_performance>N</capture_step_performance>
- <step_performance_capturing_delay>1000</step_performance_capturing_delay>
- <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
- <dependencies>
- </dependencies>
- <partitionschemas>
- </partitionschemas>
- <slaveservers>
- </slaveservers>
- <clusterschemas>
- </clusterschemas>
- <created_user>-</created_user>
- <created_date>2012/11/16 13:59:51.117</created_date>
- <modified_user>-</modified_user>
- <modified_date>2014/05/12 15:22:12.008</modified_date>
- </info>
- <notepads>
- </notepads>
- <connection>
- <name>backupConn</name>
- <server>${CLIENT_DATABASE_IP}</server>
- <type>ORACLE</type>
- <access>Native</access>
- <database>${CLIENT_DATABASE_NAME}</database>
- <port>${CLIENT_DATABASE_PORT}</port>
- <username>${CLIENT_DATABASE_USERNAME}</username>
- <password>${CLIENT_DATABASE_PASSWORD}</password>
- <servername/>
- <data_tablespace/>
- <index_tablespace/>
- <attributes>
- <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
- <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
- <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
- <attribute><code>PORT_NUMBER</code><attribute>${CLIENT_DATABASE_PORT}</attribute></attribute>
- <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
- <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
- <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
- </attributes>
- </connection>
- <connection>
- <name>serverConn</name>
- <server>${SERVER_DATABASE_IP}</server>
- <type>ORACLE</type>
- <access>Native</access>
- <database>${SERVER_DATABASE_NAME}</database>
- <port>${SERVER_DATABASE_PORT}</port>
- <username>${SERVER_DATABASE_USERNAME}</username>
- <password>${SERVER_DATABASE_PASSWORD}</password>
- <servername/>
- <data_tablespace/>
- <index_tablespace/>
- <attributes>
- <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
- <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
- <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
- <attribute><code>PORT_NUMBER</code><attribute>${SERVER_DATABASE_PORT}</attribute></attribute>
- <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
- <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
- <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
- </attributes>
- </connection>
- <connection>
- <name>wardConn</name>
- <server>${CLIENT_DATABASE_IP}</server>
- <type>ORACLE</type>
- <access>Native</access>
- <database>${CLIENT_DATABASE_NAME}</database>
- <port>${CLIENT_DATABASE_PORT}</port>
- <username>${CLIENT_DATABASE_USERNAME}</username>
- <password>${CLIENT_DATABASE_PASSWORD}</password>
- <servername/>
- <data_tablespace/>
- <index_tablespace/>
- <attributes>
- <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
- <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
- <attribute><code>INITIAL_POOL_SIZE</code><attribute>50</attribute></attribute>
- <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
- <attribute><code>MAXIMUM_POOL_SIZE</code><attribute>500</attribute></attribute>
- <attribute><code>PORT_NUMBER</code><attribute>${CLIENT_DATABASE_PORT}</attribute></attribute>
- <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
- <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
- <attribute><code>USE_POOLING</code><attribute>Y</attribute></attribute>
- </attributes>
- </connection>
- <order>
- <hop> <from>添加常量</from><to>添加常量 2</to><enabled>Y</enabled> </hop> <hop> <from>计算器</from><to>Set Variables 2</to><enabled>Y</enabled> </hop> <hop> <from>调用DB存储过程</from><to>调用DB存储过程 2</to><enabled>Y</enabled> </hop> <hop> <from>调用DB存储过程 2</from><to>添加常量</to><enabled>Y</enabled> </hop> <hop> <from>添加常量 2</from><to>计算器</to><enabled>Y</enabled> </hop> </order>
- <step>
- <name>Set Variables 2</name>
- <type>SetVariable</type>
- <description/>
- <distribute>Y</distribute>
- <copies>1</copies>
- <partitioning>
- <method>none</method>
- <schema_name/>
- </partitioning>
- <fields>
- <field>
- <field_name>TIMEDIFF</field_name>
- <variable_name>DOWNLOAD_SERVER_COMMON_DATA_LEAD</variable_name>
- <variable_type>JVM</variable_type>
- <default_value/>
- </field>
- </fields>
- <use_formatting>Y</use_formatting>
- <cluster_schema/>
- <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
- <xloc>118</xloc>
- <yloc>273</yloc>
- <draw>Y</draw>
- </GUI>
- </step>
- <step>
- <name>添加常量</name>
- <type>Constant</type>
- <description/>
- <distribute>Y</distribute>
- <copies>1</copies>
- <partitioning>
- <method>none</method>
- <schema_name/>
- </partitioning>
- <fields>
- <field>
- <name>DIVIDEND</name>
- <type>Integer</type>
- <format/>
- <currency/>
- <decimal/>
- <group/>
- <nullif>86400000</nullif>
- <length>-1</length>
- <precision>-1</precision>
- </field>
- </fields>
- <cluster_schema/>
- <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
- <xloc>388</xloc>
- <yloc>241</yloc>
- <draw>Y</draw>
- </GUI>
- </step>
- <step>
- <name>添加常量 2</name>
- <type>Constant</type>
- <description/>
- <distribute>Y</distribute>
- <copies>1</copies>
- <partitioning>
- <method>none</method>
- <schema_name/>
- </partitioning>
- <fields>
- <field>
- <name>DEVIATION</name>
- <type>Integer</type>
- <format/>
- <currency/>
- <decimal/>
- <group/>
- <nullif>10000</nullif>
- <length>-1</length>
- <precision>-1</precision>
- </field>
- </fields>
- <cluster_schema/>
- <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
- <xloc>364</xloc>
- <yloc>362</yloc>
- <draw>Y</draw>
- </GUI>
- </step>
- <step>
- <name>计算器</name>
- <type>Calculator</type>
- <description/>
- <distribute>Y</distribute>
- <copies>1</copies>
- <partitioning>
- <method>none</method>
- <schema_name/>
- </partitioning>
- <calculation><field_name>TEMP</field_name>
- <calc_type>SUBTRACT</calc_type>
- <field_a>LOCAL_DATE</field_a>
- <field_b>SERVER_DATE</field_b>
- <field_c/>
- <value_type>BigNumber</value_type>
- <value_length>-1</value_length>
- <value_precision>-1</value_precision>
- <remove>N</remove>
- <conversion_mask/>
- <decimal_symbol/>
- <grouping_symbol/>
- <currency_symbol/>
- </calculation>
- <calculation><field_name>TEMP2</field_name>
- <calc_type>ADD</calc_type>
- <field_a>TEMP</field_a>
- <field_b>DEVIATION</field_b>
- <field_c/>
- <value_type>BigNumber</value_type>
- <value_length>-1</value_length>
- <value_precision>-1</value_precision>
- <remove>N</remove>
- <conversion_mask/>
- <decimal_symbol/>
- <grouping_symbol/>
- <currency_symbol/>
- </calculation>
- <calculation><field_name>TIMEDIFF</field_name>
- <calc_type>DIVIDE</calc_type>
- <field_a>TEMP2</field_a>
- <field_b>DIVIDEND</field_b>
- <field_c/>
- <value_type>BigNumber</value_type>
- <value_length>-1</value_length>
- <value_precision>-1</value_precision>
- <remove>N</remove>
- <conversion_mask/>
- <decimal_symbol/>
- <grouping_symbol/>
- <currency_symbol/>
- </calculation>
- <cluster_schema/>
- <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
- <xloc>251</xloc>
- <yloc>272</yloc>
- <draw>Y</draw>
- </GUI>
- </step>
- <step>
- <name>调用DB存储过程</name>
- <type>DBProc</type>
- <description/>
- <distribute>Y</distribute>
- <copies>1</copies>
- <partitioning>
- <method>none</method>
- <schema_name/>
- </partitioning>
- <connection>serverConn</connection>
- <procedure>F_GET_SYSDATE2INT</procedure>
- <lookup>
- </lookup>
- <result>
- <name>SERVER_DATE</name>
- <type>BigNumber</type>
- </result>
- <auto_commit>Y</auto_commit>
- <cluster_schema/>
- <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
- <xloc>140</xloc>
- <yloc>134</yloc>
- <draw>Y</draw>
- </GUI>
- </step>
- <step>
- <name>调用DB存储过程 2</name>
- <type>DBProc</type>
- <description/>
- <distribute>Y</distribute>
- <copies>1</copies>
- <partitioning>
- <method>none</method>
- <schema_name/>
- </partitioning>
- <connection>wardConn</connection>
- <procedure>F_GET_SYSDATE2INT</procedure>
- <lookup>
- </lookup>
- <result>
- <name>LOCAL_DATE</name>
- <type>BigNumber</type>
- </result>
- <auto_commit>Y</auto_commit>
- <cluster_schema/>
- <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
- <xloc>353</xloc>
- <yloc>132</yloc>
- <draw>Y</draw>
- </GUI>
- </step>
- <step_error_handling>
- </step_error_handling>
- <slave-step-copy-partition-distribution>
- </slave-step-copy-partition-distribution>
- <slave_transformation>N</slave_transformation>
- </transformation>
2、通过NTP方式校对系统时间
1)假设能够连接到Internet网中,则能够採用国际上的校时server去校对时间
2)假设在内网中且不能上网,则能够自定义一台都可訪问到的台式机作为NTPserver,其它机子与该计算机教士就可以,以下是window NTP校时server的设置。
能够參考文章:NTP服务同步时间方案
NTP方式保证以时间戳同步可靠性的更多相关文章
- 转:TCP为什么要3次握手和4次挥手时等待2MSL、 TCP如何保证消息顺序以及可靠性到达
关于tcp三次握手.四次挥手可以看这里:TCP与UDP的差别以及TCP三次握手.四次挥手 1.TCP为甚要3次握手? 在谢希仁著<计算机网络>第四版中讲“三次握手”的目的是“为了防止已失效 ...
- Windows核心编程 第八章 用户方式中线程的同步(上)
第8章 用户方式中线程的同步 当所有的线程在互相之间不需要进行通信的情况下就能够顺利地运行时, M i c r o s o f t Wi n d o w s的运行性能最好.但是,线程很少能够在所有的时 ...
- C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式
C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式 置顶 2018年03月06日 19:16:51 黎筱曦 阅读数:19098 标签: C#时间 更多 个人 ...
- Windows API学习---用户方式中的线程同步
前言 当所有的线程在互相之间不需要进行通信的情况下就能够顺利地运行时, Micrsoft Windows的运行性能最好.但是,线程很少能够在所有的时间都独立地进行操作.通常情况下,要生成一些线程来处理 ...
- JAVA\Android 多线程实现方式及并发与同步
转载:https://blog.csdn.net/csdn_aiyang/article/details/65442540 概述 说到线程,就不得不先说线程和进程的关系,这里先简单解释一下,进 ...
- Windows核心编程 第八章 用户方式中线程的同步(下)
8.4 关键代码段 关键代码段是指一个小代码段,在代码能够执行前,它必须独占对某些共享资源的访问权.这是让若干行代码能够"以原子操作方式"来使用资源的一种方法.所谓原子操作方式,是 ...
- Kettle根据时间戳同步数据实现
1 Kettle总体步骤 由于Kettle自身的特殊性以及在多个步骤中kettle自身处理数据库事务的特殊性,尝试了很多种方案,最终确定暂使用如下方案. 1.使用此方案可以解决kettle本身数据库事 ...
- websocket 无需通过轮询服务器的方式以获得响应 同步在线用户数 上线下线 抓包 3-way-handshake web-linux-shell 开发
https://code.google.com/archive/p/phpwebsocket/source/default/source The WebSocket API (WebSockets) ...
- 解决 RaspberryPi 树莓派 NTP服务异常 无法自动同步时间
sudo nano /etc/ntp.conf 然后找到 # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server ...
随机推荐
- [Oracle] 常用工具集之 - SQL*Loader
SQL*Loader原理 SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高.其示 ...
- Oracle控制文件操作
控制文件是连接instance和 database的纽带.记录了database的结构信息. 控制文件是1个2进制文件.记录的是当前database的状态. 控制文件可以有多个,在参数文件中通过con ...
- ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展
关于ExtJS对javascript中的Array的扩展.能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 因为 ...
- A Game of Thrones(17) - Bran
It seemed as though he had been falling for years. Fly, a voice whispered in the darkness, but Bran ...
- Exception in thread "main" java.lang.IllegalArgumentException
1.错误叙述性说明 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format giv ...
- Filezilla出现中文乱码
使用Filezilla client FTP客户端登陆某些FTP站点会出现中文乱码,原因是FTP服务器端编码与filezilla client端编码不一致造成的,解决方法如下:文件-站点管理-选中要登 ...
- 【Linux编程】存储映射I/O
存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区相映射,对缓冲区的读.写操作就是对文件的读.写操作,从而能够不再使用read.write系统调用. 将文件映射到存储区的函数由mmap完毕,函数原型 ...
- The Official Preppy Handbook
The Official Preppy Handbook: Lisa Birnbach: 9780894801402: Amazon.com: Books The Official Preppy Ha ...
- I2C分析三
1 引言 IIC (Inter-Integrated Circuit1总线是一种由Philips公司开发的2线式串行总线,用于连接微控制器及其外围设备.它是同步通信的一种特殊形式,具有接口线少.控制方 ...
- POJ 2676/2918 数独(dfs)
思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...