1 --SQLSERVER数据库表各种同步技术 减少SQLServer中每次的同步数据量
2
3 --说到数据库,我就不由地想到同步数据,如何尽可能地减少每次的同步数据量,以此来提高同步效率,降低对网络带宽的消耗是我们使用者所关心的。对于大批量的数据同步,这一点是应引起重视的。获取差异数据是解决这个问题的关键点,即我们仅仅同步变化了的数据,至于没有变化的,就不再同步。对于减少每次同步数据量,以下提供了6个方法:
4 --
5 --1、日期栏位(时间戳)
6 --
7 --一般情况下,在设计表的时候,添加两个日期栏位,createdOn, ChangedOn, 分别记录数据产生时间和变更时间。同步程序可以根据两个栏位来获取差异的数据。
8 --
9 --2、Trigger
10 --
11 --它可以实时获取差异数据, Trigger使用较为容易,不需要改变原表的结构,可以只监视部分的栏位变更,以获取你需要的变化数据,并对数据做二次处理。Trigger需要你对源表的维护状况比较了解,否则可能产生一些意想不到的影响。
12 --
13 --3、SQLServer本身的复制服务
14 --
15 --本身支持多种数据同步方式,功能很强大,但是使用上会比较复杂,而且如果在同步过程中,需要对差异数据做二次处理,似乎无路可走。
16 --
17 --这种方法可以保证随时获取某个时间段内新增(变化)的数据,同时对于追踪问题也大有裨益。但是缺陷也不少,其一是这两个栏位完全由开发人员控制,切实保证这两个栏位每次都得到正确的维护比较困难,其二是不容易确定你下一次取差异数据的基准时间。
18 --
19 --4、timestamp栏位
20 --
21 --timestamp可以理解为行的版本号,每次插入或更新包含 timestamp 列的行时,timestamp 列中的值均会更新。利用这一特性,建立一个包含源表ID和timestamp值的基准表,就可以找到哪些数据发生变化了,每次同步成功后,再更新该基准表。
22 --
23 --5、监控并记录基于某数据对象的所有DML语句
24 --
25 --这种方法,我没有具体尝试过,但是一个很不错的思路,如果网络状况糟糕,而且对数据实时性要求不高,可以采用。具体做法是每天定时获取你需要同步表的所有update, delete语句,然后定点打包发送到另外一台服务器执行。
26 --
27 --6、使用BINARY_CHECKSUM
28 --
29 --这个是我认为最简单的方法。BINARY_CHECKSUM是SQLServer内置的一个聚合函数,它可以针对一行,或者某些列计算出一个值,如果它计算的那些列中的任何一个值发生变化,那么那个计算值就会发生变化。这样我只要建立一个包含源表ID和最初计算值的基准表,就可以找到哪些数据发生变化了,每次同步成功后,再更新该基准表。与方法4不同的是,BINARY_CHECKSUM可以只监视部分变化的栏位,这一点又类似于Trigger了。
30 --
31 --使用BINARY_CHECKSUM有些限制,因为它在计算中会忽略具有不可比数据类型的列(不可比数据类型是 text、ntext、image、cursor 以及基本类型为前4个数据类型之一的 sql_variant),所以如果要监控这些列变化,这种方法是不起作用的。

SQLSERVER数据库表各种同步技术的更多相关文章

  1. SqlServer数据库表生成C# Model实体类SQL语句——补充

    在sql语句最前边加上  use[数据库名] 原链接:https://www.cnblogs.com/jhli/p/11552105.html   --[SQL骚操作]SqlServer数据库表生成C ...

  2. SqlServer数据库表导入SqlLite数据库表保持日期时间类型字段的格式

    在写查询功能的过程中遇到一个这样的问题:按日期范围查询,sql语句是:where dt>=用户选择起始日期&&dt<=用户选择结束日期.数据库中的数据如图1,我选择的测试数 ...

  3. 用sql语句生成sqlserver数据库表的数据字典

    THEN O.name ELSE N'' END, 表描述 THEN PTB.[value] END,N''), 字段序号=C.column_id, 字段名称=C.name, 字段描述=ISNULL( ...

  4. 用SqlBulkCopy批量插入数据到SqlServer数据库表中

    首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using Syst ...

  5. 监控SQLServer 数据库表每天的空间变化情况

    阅读完桦仔的<分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)>后,我想使用文中提供的代码做一个统计表每天的新增行数及新增存储空间的功能 实现步骤如下: 1 ...

  6. sqlserver 数据库表分区

    参考文档 https://msdn.microsoft.com/zh-cn/library/ms345146(SQL.90).aspx http://blog.sina.com.cn/s/blog_4 ...

  7. 解决sqlserver数据库表空间不自动释放问题

    在项目中遇到了sql server数据库经过频繁地删减数据后,查询变慢的问题. 我把数据导到另一个库中,发现查询就很快. 查了下原因,根本原因是删除数据并不释放表空间,日志文件太过巨大的原因. 网上查 ...

  8. mysql导入sqlserver数据库表

    原文:https://zhidao.baidu.com/question/1114325744502691499.html 在Navicat for MySQL 管理器中,创建目标数据库(注意:因为是 ...

  9. 查看SQLServer数据库表占用大小

      查看数据库mdf 文件中 各个表数据占用大小.      create table #t(name varchar(255), rows bigint, reserved varchar(20), ...

随机推荐

  1. 配置NAT回流导致外网解析到了内网IP

    单位有3个域名,用量很大,2014年开始本人研究部署了Bind+DLZ +Mysql的三机智能多链路DNS,非常好用,优点是: 1.使用Mysql管理记录,配置.管理.查询方便. 2.自动判断运营商, ...

  2. cwRsync window下的跨服务器的文件同步

    cwRsync 是window下的文件同步软件,可以跨服务器运行,第一次运行的时候是全部备份同步,之后的同步采用的是增量同步 这个软件分为服务端和客户端. 服务器是需要同步的文件源, 客户端相当于是备 ...

  3. Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!

    记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...

  4. make no mistake, we are the last line of defense.

    make no mistake, we are the last line of defense.

  5. win8磁盘占用100%的12种解决办法

    解决方法1:硬盘4K对齐,能减少磁盘占用100%情况.(大部分用户能解决) 解决方法2:检查硬盘AHCI驱动是否安装 解决方法3:通过 HD Tune Pro 5 专业的硬盘测试工具 检测硬盘健康度, ...

  6. Android 使用版本控制工具时添加忽略文件方式

    一.使用SVN管理项目时,添加忽略文件的方式 Android Studio 配合SVN时,添加忽略文件相对简单,首先打开项目的Settings选项,切换到Version Control下的Ignore ...

  7. zepto - scrollLeft

    <div style="border:1px solid black;width:100px;height:130px;overflow:auto"> The long ...

  8. Bower 手册

    安装 Bower 使用 npm 安装 Bower.(Bower 依赖于 Node, npm 和 Git.) $ npm install -g bower 基本用法 安装程序包 程序包安装命令 bowe ...

  9. Web程序员开发App系列 - 认识HBuilder

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...

  10. [IR] Probabilistic Model

    If user has told us some relevant and some irrelevant documents, then we can proceed to build a prob ...