再问.怎么实现数据同步?

lokiice 2008-08-27 12:06:15
存在A B 2个数据库,数据结构(包括表名,字段名以及表结构,表关系等)都不同
A库为数据提供商提供数据后的中央库数据结构不可以变动,数据更新量在2000~5000/天左右,保存量现在有4年份
B库为应用数据库(我这边敲代码后实际要用到的库)公司计划对开发模式做个转变,以后每个平台都是从中央库分离出个别库后再行开发,减少中央库的结构改写

上次问的时候游人说做事物复制或者 服务器发布/订阅.不过看过以后好想都是一数据库快照的方式来进行同步的,好像没涉及到数据结构的改变什么的,所以只能重新来问下.

A B库之间的关系是 同数据服务引擎或者是不同数据引擎
现在想到的数据同步方式是2种:当有数据更改(I/D/U)时A库向B库做推送;定时由B库向A库请求新数据.

1.在同数据服务引擎上,可以在A库的表中做触发器将插入的数据按照B库的格式进行推送.但是应为2库之间表名和字段名几乎都是不同的,所以用数据库级的触发器难度比较大,但是没个表触发工作量又过于庞大(用到大概40~50个表,数据提供商提供了600+个表....),维护一不是很方便,而且不同数据需求的平台一多,一些主数据表势必要挂很多触发器或者触发器结构变的很复杂,不方便维护.
Q1.有没有更理想的方式在实现这种数据推送?

2.在不同的数据服务引擎上,现在看下来好像只有靠服务器的发布/订阅机制来实现(可能我没找到吧),但是用这种方法的话貌似只能取得数据数据快照或者副本而已,并不能对传送过来的数据进行重新搭建结构.
而且分离小数据库出来本来的目的就是为了减少数据量(有些平台需要6个月数据,有些只需要4~8周的就可以,公司好像没打算对中央数据库的旧数据进行清理)以便提高查询效率和降低维护难度
Q2怎么在实现A->B的推动或者B->A的订阅的同时,将A库中的数据格式化成B库中的数据结构,并且只提取我所需要的种类,保留最低限度的纪录量


只有100分了,将就下吧
...全文
1681 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
老纪@ToB Dev 2008-09-05
  • 打赏
  • 举报
回复
数据库最差了,学习下
lokiice 2008-09-04
  • 打赏
  • 举报
回复
同步程序啊......
每5秒做1次100W级的全表扫描....貌似很浪费啊

说ServiceBrokee的那位,能说说具体用哪个吗?有好几个,都是没用过的,不知道有什么用
charden 2008-09-04
  • 打赏
  • 举报
回复
学习下
yinlijun610 2008-09-04
  • 打赏
  • 举报
回复
学习
zougang5 2008-09-04
  • 打赏
  • 举报
回复
我也正在找oracle 数据库的同步@!
lokiice 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 tinti2007 的回复:]
我来说说,你说的推进是否可以采用存储过程来单独的处理,
A表和B表需要有关联关系,方可以把A表和B表关联取出你要的字段,然后通过ETL的方式把他写入到C表中,这样做前期工作量大,不知道是否满足你的要求。
或者做个视图来同步也可以 。
[/Quote]

老兄,我的问题是A库的A表和B库的B表....B.B是A.A字段缩减再命名后的副本,也就是说有对应关系但不完全相同,不同的库不太可能做关联关系吧,视图?视图可以将A.A的数据主动推到B.B里面吗?而且要按照B.B的数据格式,实时的推过去(A.A insert一条数据就要推到B.B里面去).

V景天 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 lokiice 的回复:]
引用 22 楼 whoisyourdady 的回复:
写程序吧 etl又不是非用数据库做的 那么多业务放数据库里 你觉得好吗


程序啊,那不是增加数据库负担吗?
几秒就要扫描一下数据库判断是否有新数据后再更新......比触发器还要麻烦
[/Quote]

个人认为考虑数据量的大小在考虑用ETL程序来实现同步。
V景天 2008-09-03
  • 打赏
  • 举报
回复
我来说说,你说的推进是否可以采用存储过程来单独的处理,
A表和B表需要有关联关系,方可以把A表和B表关联取出你要的字段,然后通过ETL的方式把他写入到C表中,这样做前期工作量大,不知道是否满足你的要求。
或者做个视图来同步也可以 。
skypeople 2008-09-03
  • 打赏
  • 举报
回复
我做过类似的应用,据经验来看,你还是自己写同步程序较好.可写成通用的用XML来配置同步的表.
fyskyhf 2008-09-03
  • 打赏
  • 举报
回复
如果你是用的都是SQL 2005,根据你的具体要求,建议你使用ServiceBrokee!
Tomcat4 2008-09-03
  • 打赏
  • 举报
回复
写个后台程序,如果实时性要求不是很高的话,1分钟扫描一下,对数据库没有什么影响的
lokiice 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 whoisyourdady 的回复:]
写程序吧 etl又不是非用数据库做的 那么多业务放数据库里 你觉得好吗
[/Quote]

程序啊,那不是增加数据库负担吗?
几秒就要扫描一下数据库判断是否有新数据后再更新......比触发器还要麻烦
mlhy20060406 2008-08-31
  • 打赏
  • 举报
回复
mark
whoisyourdady 2008-08-30
  • 打赏
  • 举报
回复
写程序吧 etl又不是非用数据库做的 那么多业务放数据库里 你觉得好吗
tianhuo_soft 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lokiice 的回复:]
LS,能说下书名吗?
[/Quote]

http://search.dangdang.com/rd.asp?id=20165951&clsid=01.54.05.04&key=%d7%de%bd%a8
czglover 2008-08-29
  • 打赏
  • 举报
回复
我前几天刚同步过2个数据库,就是用订阅的方法同步的,A->B,B->A这样都可以的,但是2个数据库的结构都是一样的,数据也都是一样的,要做到LZ你们复杂估计得费很多功夫了。我已经把同步文档整理出来放在CSDN下载里面了,LZ可以去看看参考一下,希望对你有帮助!
zoujp_xyz 2008-08-29
  • 打赏
  • 举报
回复
jf
帮顶
wangxuelid 2008-08-29
  • 打赏
  • 举报
回复
Jl
lokiice 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 parss 的回复:]
用订阅功能实现数据同步
[/Quote]

如果是单纯的数据同步应订阅当然是最简单的,安全性和数据完整性都没什么问题
可是关键是现在需要的是在不同的数据结构的情况下实现同步,现在能力范围里只想到了主库做触发器将数据按照副本库的数据结构推出,或者副本库定时向主库请求数据后再处理.....不管那种都会很复杂.....
wwwtyb 2008-08-29
  • 打赏
  • 举报
回复
学习了.......顶!!!!!!!!
加载更多回复(15)

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧