多个系统怎么共享数据

问题描述

公司现在有多个系统:客服系统、订单系统、营销系统等,这些系统的数据经常要关联查询,怎么保证查询速度呢?目前我们是用ETL工具实现数据同步,比如把订单系统的订单数据同步到客服系统数据库,但是这样就增加了系统的复杂性,如果把所有数据同步到一个数据库会不会数据量太大了?不知道有没有更好的解决办法。

解决方案

采用共享数据库是一个比较快的方法,但是实际上增加了系统之间的耦合性。比如订单系统因为增加了一个字段,可能会对营销系统造成影响,所以建议的方式是采用服务间调用的方式。 但是题主采用ETL的方式我觉得是比较差的方式:A:采用数据库共享:即订单系统可以直接查营销系统的数据库,ETL实际上有延迟的问题,如果觉得不太安全可以将营销系统的数据库复制出一个库出来(如果是MySQL的话使用主从模式,这样比ETL要好一些);B:题主说的ETL方式:一般ETL用在进行后台的数据统计上面,对数据的实时性不敏感,比如做数据报表、离线的数据分析等;C:相互之间提供调用的接口,但是从题主提到的几个子系统来看,几个系统是不应该关联的。因此建议的方式是将界面部分提取出来,几个系统做成服务。 如WebSystem、OrderSystem、CustomerSystem、etc。WEBSystem依赖下面几个子系统,而子系统之间不相互依赖,这样是比较好的。
解决方案二:
好不容易拆分的系统, 楼主你又想把系统合并。。?这种系统集成性的问题,必须通过接口方式去走, 具体要是看你的业务而定。
解决方案三:
将数据复制到hadoop上,在hadoop上计算完毕后,再将结果表复制回数据库
解决方案四:
CQRS 读写分离
解决方案五:
做读写分离,提供一个专门的冗余数据库(专门用来查询)。客服系统、订单系统、营销系统的数据插入和更新时实时同步到这个冗余数据库来。各个系统要查询自己系统的数据直接连自己的库就行了,比如客服系统要查询客服数据直接连客服数据库。如果客服系统要查询订单数据、营销数据,或者联合查询客服数据、订单数据和营销数据,那么就连那个冗余数据库。这样既可以分担各个系统的数据库的负载,又可以提高查询的效率。
解决方案六:
如果不是为了做报表分析之类的,系统间的交互尽量不要用数据库共享,否则耦合性加大,容易出问题建议系统间定义交互的接口
解决方案七:
如果数据库是oracle,做dblink很简单,在一个数据库库中建立与其他数据库的dblink,像查本库表一样查询其他数据库的表;如果不是oracle数据库,那么可以在oracle数据库库上安装插件,link其他数据库(如:sql server)的表。希望对你有帮助。
解决方案八:
不知道你的数据库是oracle还是什么别的。oracle的话很简单,可以做dblink,在一个数据库中建立视图,关联所有link的数据库表,做关联查询。如果是其他数据库需要安装插件做dblink。希望能达到你的效果。
解决方案九:
sql貌似可以连别的数据库
解决方案十:
是不可以将一些数据查到内存中(redis memcache),这样查询的话会比较快。关联关系的话,数据库表行存为map (key是主键 value对应数据库表一行的,存成list)。另外数据库表如果太大的话是不是可以按照时间分表。
解决方案十一:
数据库是最好的方法。
解决方案十二:
系统之间提供数据交互的接口

时间: 2024-10-30 16:21:41

多个系统怎么共享数据的相关文章

App与Extensions间通信共享数据

  最近玩了玩Watch开发,而目前Watch的主要逻辑处理都是放在WatchKit Extension.真正的Host App,也就是WatchKit App只是用来在界面上显示数据的.于是实践了下containing app与app extension之间的通信和数据共享. App Groups & Framework 这两样兵器大家都很熟悉.想要共享数据就需要开启App Groups,给group起一个风骚的名字,这样无论是NSUserDefaults还是NSFileManager都能通过

java多线程通信之共享数据

(1)当访问共同的代码的时候:可以使用同一个Runnable对象,这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做. public class MutiThreadShareData {     public static void main(String[] args) {                   ShareData data=new ShareData();                   new Thread(data).start();         

线程间共享数据无需竞争

原文 地址  作者  Trisha   译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke's程序框架创新奖.本文将用图表的方式为大家介绍Disruptor是什么,用来做什么,以及简单介绍背后的实现原理. Disruptor是什么? Disruptor 是线程内通信框架,用于线程里共享数据.LMAX 创建Disruptor作为可靠消息架构的一部分并将它设计成一种在不同组件中共享数据非常快的方法. 基于Mechanical Sympathy(对于计算机底层硬

使用 ContentProvider 共享数据 访问与添加通讯录

1. 统一的数据访问方式 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据. 文件的操作模式中,通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样可以对外共享数据, 但数据的访问方式会因数据存储的方式而不同,如:采用xml文件对外共享数据,需要进行xml解析来读写数据: 采用sharedpreferences共享数据,需要使用sharedpre

Java多线程共享数据、同步、通信

一.线程共享数据 a)继承Thread,那么我们可以创建很多个这样的类,但是每个这样的类都是相互不关联的,也就是说我们Thread类中的内容每个创建出来的类都有一份,因此它不适合作为数据共享的线程来操作.同时由于Java继承的唯一性,我们只能继承一个对象. b)使用runnable就可以解决唯一性和不能共享的问题(不是说使用runnable就解决了共享问题,只是相对于创建Thread来说,它可以算的上是共享了,为了获得更精确的共享问题,它必须的使用线程同步操作).实现了runnable接口的类比

c#想编个windows窗体,然后可以通过局域网共享数据的

问题描述 不知道该怎么上手,搜索连关键词都不知道怎么搜,所以来请教一下各位.就是想编个系统,但是是windows窗体界面,不是网站,然后这个界面是可以联网的,通过局域网连到各个不同的电脑上,每台电脑上安装一下我编的系统就能调用数据库内容,现在是完全不知道头绪.... 解决方案 解决方案二:能不能详细的描述阿!我没有看的很明白.你到底想要个什么东东?若是需要编写windows窗体连接数据的话,很简单的.但是感觉你是想windows窗体和数据库连接之间还有东东,所以,请把你的要求详细的说明.解决方案

Windows Server 2008系统下的数据备份技巧

WindowsServer2008的设计允许管理员修改其基础结构来适应不断变化的业务需求,同时保持了此操作的灵活性.它允许用户从远程位置(如远程应用程序和终端服务网关)执行程序,这一技术为移动工作人员增强了灵活性.Windows Server 2008使用Windows部署服务(WDS)加速对IT系统的部署和维护,使用WindowsServer虚拟化(WSv)帮助合并服务器.对于需要在分支机构中使用域控制器的组织,Windows Server 2008提供了一个新配置选项:只读域控制器(RODC

Android开发中多进程共享数据简析_Android

 背景 最近在工作中遇到一个需求,需要在接收到推送的时候将推送获得的数据存起来,以供app启动时使用.我们会认为这不是So easy吗?只要把数据存到SharedPreferences中,然后让app打开同一个SharedPreferences读取数据就可以了.但是在实际的测试中,我们发现推送进程存入的数据,并不能在app进程中获得.所以这是为什么呢,也许聪明的读者从我们上面的陈述中已经发现了原因,因为我们有两个进程,推送进程负责将推送数据存入,而app进程负责读取,但是正是由于是两个进程,如果

专家:建设智慧城市 需要各方协同共享数据

灾害预警.天气预测.为市民选择更畅通的出行线路......越来越"智慧"的城市离不开大数据的支持.在28日召开的"2017大数据应用与新型智慧城市建设研讨会 "上,中国城市科学研究会大数据专业委员会副主任委员甄峰提出,大数据应用于城市治理创新过程面临诸多挑战,借鉴纽约等城市治理的经验,政府的决心对建设数据驱动的城市至关重要. "城市人口激增加大公共服务压力.城市治理资金有限.城市突发事件风险增加.美国纽约正是在这样的背景下推出大数据治理的."甄峰