SQL Server横向扩展方案-SODA

每次在提到SQL Server扩展性问题的时候,似乎很多的SQL Server DBA或者使用微软技术开发的朋友心里总是一整痛:SQL Server只能纵向的扩展(Scaling-Up),无法横向的扩展(Scaling-Out)。

每次有人提到Oracle和SQL Server,第一句话就是:SQL Server无法搞负载均衡,而Oracle可以使用RAC。

每次我问其他的SQL Server DBA朋友:SQL Server自带的Mirroring,Replication,Cluster难道不能搞负载均衡吗?很多的人摇摇头。最后不能不选择第三方的方案。

后来,通过不断的实践和思考,我明白了为什么很多的朋友对SQL Server的横向扩展能力不理解。其实SQL Server已经提供了横向扩展所需要的所有技术和工具,但是如果单看每一种工具,可能认为达不到目的,但是如何把这些技术按照适当的设计,和组合,那么,绝对就是满足功能的。

另外,做DBA的朋友,可能在技术上面有一定的局限性。因为很多的DBA是“纯”的DBA,很少懂应用程序的设计,懂架构设计的人DBA就更加的少了。

其中,一个好的高性能的数据架构的做出,需要多方面的知识,需要既懂数据库(知识能力要达到专业的DBA水平),也懂架构的人。这样,就可以将应用和数据很好的结合在一起。

好了,说了这么多,希望对大家有些帮助,不要“盲目的”相信一些传说和谣言,特别是对刚刚踏入技术行业的朋友,很容易让大家望而却步。

言归正传,我们来看看几种实现SQL Server横向扩展的方案:

1.Service Oriented Database Architecture (SODA)

2.Shared Scalable Database (SSD)

3.Peer-to-Peer (P2P) Replication

4.Data Dependent Routing

我们本篇就介绍这些方案以及实现的原理,我们站点后续会根据朋友们的需要给出更多相关的讲解。

数据的分类

在讲述SODA之前,我们先来看看考虑这样一个问题:如何分割数据?

为什么要问这个问题,因为很多的时候,为了使得数据访问的性能更好,合理的分布数据是一个非常好的手段。对于这个问题,这个问题的回答有很多,但是有一点是不变的,要根据数据的特性来分割,那么数据包含哪些特性呢,或者说数据可以分为哪几种。

下面,我们就来看看这个问题。

引用类的数据

顾名思义,引用类的数据就是指代那些被应用程序使用,但是又不被程序所维护和管理的数据。一般而言,引用数据往往是不变的数据,或者是变化非常缓慢的数据。例如,电子商务网站中的产品的分类数据。

活动类的数据

也是见名知意。主要是指与一些特定的活动或者业务处理相关的数据。例如,在订单或者库存的系统中,会随着业务的处理而产生出一些数据,这些的数据的作用范围就是某个活动或者业务流程中,一旦活动或者流程结束,数据就没了,除非处于某些特定的目的,例如作为历史或者跟踪的数据进行存储保留。

资源类的数据

资源类的数据就是系统中的业务处理所依赖的核心数据,例如库存数据,用户用户,订单数据等。如果资源数据丢失,那么我们就无法处理业务,所以资源类的数据是非常重要的,必须保证它的高可用性和完整性。从这里也可以知道,资源类的数据和其他类型的数据的分割和管理方式是不一样的,甚至使用的配套的设备都可以不一样。

另外,因为SODA的引入,出现了另外一种类型的数据:服务交互数据。

服务交互数据

这一类的数据只要用了在是服务进行数据交互的。这类型的数据必须是被其他的服务理解,而且必须保证稳定。例如,如果一个订单的信息在传输的过程中丢失了,那么信息的发送方必须要可以重新的产生和原先一样的数据,然后再次发送。

好,大致的清楚了这些数据类型之后,我们继续往下看。

Service Oriented Database Architecture (SODA)

相信大家对SOA都有所了解,我这里也不长篇大论的讲SOA的细节,但是有点要提的就是:通过采用SOA,像外界隐藏了内部的实现细节,外面看到的都是一个个的服务,不用管服务内部是如何部署,采用什么技术平台,采用什么数据库提供数据等等。

SODA其实就是沿用了SOA的实现,实现基于数据库的SOA。其实,我们可以这样理解,我们的数据库向应用程序或者其他的调用了提供了数据,也就是提供了数据的服务。在很多的应用中,我们都是采用比较直接的方式去访问数据库,但是现在,我们把数据库那一端封装起来,隐藏细节,然后以统一而标准的方式公布数据服务的接口,告诉应用程序:你甭管我是如何实现的,反正你只要调用我的接口,你需要的数据操作就完成了。此时应用程序和数据进行了解耦,使得他们独立的保持变化,极大的提升了灵活性和后续的扩展性。

通过下面的图,我们看看对SODA有个了解:

20120904105321.png(29.29 K)

9/5/2012 10:37:13 AM

采用了SODA之后,我们基本上面就已经不知道有数据库这回事了,因为此时我们只知道存在数据服务,它可以满足我们一切的数据需要。

在SQL Server中,实现SODA主要基于Service Broker来进行的,主要依赖下面的技术:SQLCLR,CacheSync,Native Web Service Support,Service Broker。

Native Web Service Support:因为SODA会服务的形式发布数据,所以肯定就需要一些基于web service的支持。在win2003以及以后版本,就为基于SQL Server的SODA提供了支持。可以支持SQL Server将数据用SOAP形式进行交互。

Service Broker:提供了一个强大的基于消息的机制。

CacheSync:缓存同步机制。可以使得依赖底层数据的那么缓存在底层的数据方式变化的时候更新缓存中的数据。

SQLCLR:强化和扩展对数据库的编程,使得相关的逻辑直接驻留在数据库中,从而减少远程数据访问的开销。

很多的朋友可能希望,我们对上面的每一种技术,以及SODA的具体的设计和使用有个详细的讲解,这个我们以后会以视频的方式给出,也会有一些文章发布,但是文字的表述能力确实有限,如果大家企业中需要,我们可以提供专门的培训讲解。

本系列文章主要是给那些已经懂的这些技术,在技术选型上的朋友一些参考。也给那些不太熟悉这些内容的朋友一个感觉,起码知道有这么回事。

我们下篇文章继续讲述。

mysql的纵向扩展方案_SQL Server横向扩展方案-SODA相关推荐

  1. mysql水平分区方案_SQL Server表分区(水平分区及垂直分区)

    什么是表分区? 表分区分为水平表分区和垂直表分区,水平表分区就是将一个具有大量数据的表,进行拆分为具有相同表结构的若干个表:而垂直表分区就是把一个拥有多个字段的表,根据需要进行拆分列,然后根据某一个字 ...

  2. mysql查看索引创建进度_SQL Server查看索引重建、重组索引进度

    相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战 ...

  3. mysql数据库sa默认密码_SQL Server数据库sa密码相关问题的解决方法

    1.如何查找sqlserver的sa密码? 查询分析器,连接时,身份验证使用"使用windows身份验证" 然后,执行: EXEC sp_password NULL, 'NewPa ...

  4. mysql使用需要钱吗_SQL Server是要钱的吗?是怎么要的?

    展开全部 SQLserver使用的话,需要购买数据库,以及访问许可CLA. 1.数据库管理工具(DBMS)是收费的,比如Oracle,SQL Server,SyBase.还有免费的如323131333 ...

  5. mysql外键更新规则_sql server 外键 更新(删除)规则

    以前用数据库,一般都建表关系,但是这些关系建好了往往没有用到. 这次写一个项目,涉及到多表的外键约束和级联删除的问题,才研究了一下. 用的vs2005里面自带的SqlExpress,在VS里面作数据库 ...

  6. mysql配置管理器在哪_SQL Server 2008配置管理器在哪下载

    1 在打开[SQL Server Managemenet Studio]窗口,在[对象资源管理器]窗口依次站看[数据库]--[新建的数据库]节点 2 鼠标右键单击[视图]节点,在弹出的快捷菜单中选择[ ...

  7. mysql查询加伪列_SQL Server数据库中伪列及伪列的含义详解

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...

  8. mysql 约束1 100分_SQL SERVER CHECK语句,使用check约束限定成绩只能为0~100分

    mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0)); Query OK, 0 rows af ...

  9. mysql 进制转换函数_SQL Server 进制转换函数

    一.背景 前段时间群里的朋友问了一个问题:"在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0-9,A--Z),0x0000000Z后面将是0x00000010,生 ...

最新文章

  1. 探秘Hadoop生态12:分布式日志收集系统Flume
  2. 一个jstack/jmap等不能用的case
  3. matlab食饵,食饵捕食者模型进一步研究(matlab)
  4. 100行JavaScript代码实现JavaScript
  5. sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比
  6. 使用Zipkin和Sleuth进行SpringBoot微服务跟踪
  7. Java笔记-spring-rabbitmq中queue设置argument(添加x-message-ttl)
  8. kpi绩效考核流程图_某集团公司完整KPI绩效考核方案(PPT)
  9. Maya mtoa使用Houdini Mplay当渲染窗口
  10. 怎么用python将日期转化为数字_python转化excel数字日期为标准日期操作
  11. 苹果PD快充数据线的MFi认证查询方法
  12. C++核心准则边译边学-不必惊慌!
  13. 免费申请office365 A1 和 a1plus 带OneDrive 5T 网盘 office365学生版(转载)
  14. 如何解决服务器挖矿木马
  15. 【王道】操作系统OS第二章进程管理(二[1])
  16. STI解读A:STI测量方法
  17. SpringBoot JPA 种子项目
  18. java毕业设计——基于java+JSP+MySQL的电脑彩票销售管理系统设计与实现(毕业论文+程序源码)——彩票销售管理系统
  19. 【广州芯享家】服务器维护过程中,你需要了解的5个小常识
  20. twitter和新浪微博--比较

热门文章

  1. weex 在 iOS 上如何实现常见的网络缓存
  2. 利用 Docker 在不同宿主机做 CentOS 系统容器 | 原力计划
  3. 十大类疫情服务紧缺 阿里广发英雄帖抗疫小程序开发者最高可获50万元奖励
  4. 预告:Intel、Hulu、阿里、京东、携程等大数据实战直播
  5. ell服务器专用pe系统,GitHub - elltor/smpe-admin: 后端通用开发框架
  6. 上计算机课给新老师的一封信,给计算机老师的一封信 (精选可编辑)
  7. 二分法求数组最大最小_js-求数组的最大值和最小值
  8. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法
  9. 三、项目经理的角色【PMP 】
  10. Kafka 监控 Kafka Eagle 图形化版本