难度比较大的数据整合问题,看有人会吗?

Overriding 2012-02-27 02:43:25
这个方案应该能满足以下的要求
1. 多个SQL数据源,但是所有这些数据源的schema都是一样的,数据不一样,但是有可能存在重复。
2. 多个数据源的数据要拷贝到同一个目标数据库,要涉及到数据的整合去重。
3. 数据源的个数可能以后会有添加。
4. 数据源分布在多个域上,也就是说会涉及到跨域访问的问题。
5. 每个源的数据增长速度可能不完全相同,有的可能会非常快。
6. 数据同步是单向的,只有多个源到同一个目标。目标不会有任何改动。
7.源数据的更改必须能同步到目标,也就是说对于已经同步过的数据在源系统做了修改,那需要重新同步。

目前考虑个的两个方案,一个是SQL replication另外一个是SSIS+BCP,似乎都不能很好地满足要求。

SQL replcation方案在多个源re-initialization会造成目标数据库的数据被重写,丢掉从其他源过来的数据,另外跨域访问好像也有问题。

SSIS+BCP似乎不能很好地满足第七条,求高手支招,在这个板块级别太低只能给100分了。
...全文
310 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomu252803306 2012-03-15
  • 打赏
  • 举报
回复
I don't know what you really you want to do

1.build Datawarhouse or Data mart

2. rapid solution to kikc off simple data integration?
coolkisses 2012-02-28
  • 打赏
  • 举报
回复
这只是一个数据同步的需求
这个需求复杂了一点,多数据源 + 数据更新同步(增、删、改)
但是,这些数据源存在的冲突又如何处理? 楼主好像没有说明一下。

后续如何使用这些数据,要将这些数据完全去重,整合在一起,是否还有其它要求?

如果按字面理解,假设数据源和目标库都一样,都是ORACLE,DBLINK+PRC+触发器 就可以解决所有问题
haitao 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhanqiangz 的回复:]
引用 14 楼 warren_zqw 的回复:

引用 6 楼 zhanqiangz 的回复:
引用 4 楼 warren_zqw 的回复:

首先按照sz_haitao说的加入一个字段Datasource,好的方法是加入一个table DataSource(SourceID, Source, des,...)
定义好数据重复的依据,相当于Natural Key;
从任何数据源Pul……
[/Quote]

如果可以加字段,可以先bcp过来后,再慢慢update
本地的update,怎么也会快


不过,几小时几十G,10G/小时=1G/6分钟=2.8M/s
生成sql语言也要很占cpu了
haitao 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhanqiangz 的回复:]
引用 12 楼 sz_haitao 的回复:

引用 3 楼 zhanqiangz 的回复:
引用 1 楼 sz_haitao 的回复:

多个数据源的物理位置关系如何?
目标数据库的表结构可以加一个数据源字段吗?


数据源的物理位置没有必然关系,在不同的域里,彼此之间没有通信。目标数据库可以填加一个数据源字段。


如果可以加字段,应该没问题
我做过的2个同步工具,一……

【数据块的时候几个小时几十个G的数据】
[/Quote]

那是多了一点,我那个系统一年才1、2亿条记录,几十个G
Overriding 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 warren_zqw 的回复:]

引用 6 楼 zhanqiangz 的回复:
引用 4 楼 warren_zqw 的回复:

首先按照sz_haitao说的加入一个字段Datasource,好的方法是加入一个table DataSource(SourceID, Source, des,...)
定义好数据重复的依据,相当于Natural Key;
从任何数据源Pull数据时,首先给数据添加一个信息SoruceID,然……
[/Quote]
我当时尝试SQL replication是因为数据Update的信息我不需要关注, transactional replication可以自己handle,之所有不能用是因为: 1. 多个数据源的场景中如果reinitialize subscription,会早晨目标数据库数据被覆盖,换言之如果reinitialize了source A的,那么target数据库里就只有A的数据,其他数据源的数据会丢掉。 2. 跨域访问是个比较大的问题,可能其他技术也会有同样的问题,跨域访问只能用push模式不能用pull.

BCP的限制在于没有办法做update。

我对service broker不是太了解,需要定制的东西很多吗?目前最后的方案是用SSIS逐个表做同步,比较繁琐。
Warren 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhanqiangz 的回复:]
引用 4 楼 warren_zqw 的回复:

首先按照sz_haitao说的加入一个字段Datasource,好的方法是加入一个table DataSource(SourceID, Source, des,...)
定义好数据重复的依据,相当于Natural Key;
从任何数据源Pull数据时,首先给数据添加一个信息SoruceID,然后再做Upsert处理;
SSIS可以完成这类工……
[/Quote]

Upsert 就是Update or Insert。按照你说的数据比较大,大到哪种程度,需要考察的,否则做Update可能不行。1亿行左右的数据应该没问题,当然和环境有关(我们的Server 2.33G x 16颗cpu, 128G RAM)
再有就是每次要取增量数据,这需要Source端需要提供增量提取的依据信息,比如数据的Update时间;

还有一种选择,就是使用SQL Server 的servcie broker 技术完成数据“实时”同步。
Overriding 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sz_haitao 的回复:]

引用 3 楼 zhanqiangz 的回复:
引用 1 楼 sz_haitao 的回复:

多个数据源的物理位置关系如何?
目标数据库的表结构可以加一个数据源字段吗?


数据源的物理位置没有必然关系,在不同的域里,彼此之间没有通信。目标数据库可以填加一个数据源字段。


如果可以加字段,应该没问题
我做过的2个同步工具,一个是 深圳同城两个不同公司之间,一个是 同一个公司……
[/Quote]

谢谢楼上的,首先在不同域里访问是个问题,其次通过web 方式提交数据对于我们的场景来说肯定不行,数据量太大了,数据块的时候几个小时几十个G的数据。我现在尝试了SQL Replication, BCP+SSIS,但是这两种方案都不能满足所有的需求。
haitao 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhanqiangz 的回复:]
引用 1 楼 sz_haitao 的回复:

多个数据源的物理位置关系如何?
目标数据库的表结构可以加一个数据源字段吗?


数据源的物理位置没有必然关系,在不同的域里,彼此之间没有通信。目标数据库可以填加一个数据源字段。
[/Quote]

如果可以加字段,应该没问题
我做过的2个同步工具,一个是 深圳同城两个不同公司之间,一个是 同一个公司,但是深圳、广州番禺两个城市之间。一方都是adsl上网。
具体方法是:
在目的服务器,运行一个webserver+应用服务程序,接受https的提交内容,插入表
在源服务器,运行一个上传程序,定时通过https提交未同步的记录,定时周期根据每次同步的记录数自动调整
Overriding 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 coolkisses 的回复:]

这只是一个数据同步的需求
这个需求复杂了一点,多数据源 + 数据更新同步(增、删、改)
但是,这些数据源存在的冲突又如何处理? 楼主好像没有说明一下。

后续如何使用这些数据,要将这些数据完全去重,整合在一起,是否还有其它要求?

如果按字面理解,假设数据源和目标库都一样,都是ORACLE,DBLINK+PRC+触发器 就可以解决所有问题
[/Quote]

关于数据源的冲突可以不用考虑,重复数据不用考虑,其他的参考6,7. 您的方案能在多个域里使用吗?
Overriding 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 luckyrandom 的回复:]

这个不是BI概念,仅仅是数据同步而已。。有偿方案支持
[/Quote]

我说的是我们要做的东西的一小部分,当然是数据同步。至于有偿方案您就免了吧!大不了我直接联系SQL Server team,也不用来这里找有偿方案。
Q315054403 2012-02-27
  • 打赏
  • 举报
回复
这个不是BI概念,仅仅是数据同步而已。。有偿方案支持
Overriding 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dawugui 的回复:]

你这是在做系统.强大而复杂的系统.
[/Quote]
很多功能类似于BI系统。
Overriding 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 warren_zqw 的回复:]

首先按照sz_haitao说的加入一个字段Datasource,好的方法是加入一个table DataSource(SourceID, Source, des,...)
定义好数据重复的依据,相当于Natural Key;
从任何数据源Pull数据时,首先给数据添加一个信息SoruceID,然后再做Upsert处理;
SSIS可以完成这类工作;


另外,这个板块级别太低?是啥意思?……
[/Quote]

请问Upsert处理怎么做,我们的系统要求性能,数据量会比较大。级别低指的是我在这个版块积分比较少,不能发300分的帖子。
dawugui 2012-02-27
  • 打赏
  • 举报
回复
你这是在做系统.强大而复杂的系统.
Warren 2012-02-27
  • 打赏
  • 举报
回复
首先按照sz_haitao说的加入一个字段Datasource,好的方法是加入一个table DataSource(SourceID, Source, des,...)
定义好数据重复的依据,相当于Natural Key;
从任何数据源Pull数据时,首先给数据添加一个信息SoruceID,然后再做Upsert处理;
SSIS可以完成这类工作;


另外,这个板块级别太低?是啥意思?
Overriding 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sz_haitao 的回复:]

多个数据源的物理位置关系如何?
目标数据库的表结构可以加一个数据源字段吗?
[/Quote]

数据源的物理位置没有必然关系,在不同的域里,彼此之间没有通信。目标数据库可以填加一个数据源字段。
yanyuchonglou 2012-02-27
  • 打赏
  • 举报
回复
可不可以建一个表作为目的表,指定唯一索引项,然后就依次从各个地方取值插啊使劲插,插到不需要插啊?
haitao 2012-02-27
  • 打赏
  • 举报
回复
多个数据源的物理位置关系如何?
目标数据库的表结构可以加一个数据源字段吗?

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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