mysql的纵向扩展方案_SQL Server横向扩展方案-SODA

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有个了解:attachimg.gif

attachment.aspx?attachmentid=434

image.gif20120904105321.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的具体的设计和使用有个详细的讲解,这个我们以后会以视频的方式给出,也会有一些文章发布,但是文字的表述能力确实有限,如果大家企业中需要,我们可以提供专门的培训讲解。

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

我们下篇文章继续讲述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql8.0.11启动不了_8.0.11版本Mysql遇到MySQL 服务无法启动的解决方法

转:https://blog.csdn.net/iyayaqiqi/article/details/80536110系统环境:win10(1803),64位MySQL版本:8.0.11免安装版MySQL下载地址:https://dev.mysql.com/downloads/mysql,在下载页面往下拉,选择自己的操作…

python爬虫数据可视化软件_python爬虫及数据可视化分析

1.前言本篇文章主要介绍python爬虫及对爬取的数据进行可视化分析,本次介绍所用的网站是(https://www.duanwenxue.com/jingdian/zheli/)2.数据爬取2.1定位到爬取数据打开我们要爬取的网页,右键选择检查,在窗口中单击左上角箭头,即可…

java趣事_【趣事】Java程序员最年轻,C++程序员最年老

原标题:【趣事】Java程序员最年轻,C程序员最年老说起我们对编程世界现有的刻板印象,你一定听说过类似于没有人喜欢用Java编码或者使用C 都是老人家,等等这样的话。为了分析这些刻板印象背后的真相,Trestle Technology的…

koa2 mysql 中间件_Koa2 和 Express 中间件对比

koa2 中间件koa2的中间件是通过 async await 实现的,中间件执行顺序是“洋葱圈”模型。中间件之间通过next函数联系,当一个中间件调用 next() 后,会将控制权交给下一个中间件, 直到下一个中间件不再执行 next() 后, 将会沿路折返,将控制权依次交换给前一…

qt 飞扬青云_Qt编写带频谱的音乐播放器

之前有个项目需要将音频文件的频谱显示出来,想了很多办法,后面发现fmod这个好东西,还是跨平台的,就一个头文件一个库文件就行,简单小巧功能强大,人家做的真牛逼。为了不卡住界面,采用了多线程处…

java什么是工作流程_springmvc工作流程是什么

springmvc工作流程是什么:1、springmvc工作原理图2、springmvc工作流程1、 用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。2、DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知&#…

java se入门_java SE 入门之运算符(第三篇)

在 java 中主要有以上运算符,分为 赋值运算符 ,算术运算符、关系运算符(比较运算符),逻辑运算符和三目运算符(三元运算符).我们一起来学习下吧!一、赋值运算符赋值运算符主要有五个、分别是 (赋值)、(加上一个在赋值)、-(减去一个在赋值)、*…

java7最后战线_我的世界最后战线2.0整合包

我的世界1.7.2最后战线The end battle line正式V2修复版是我的世界最后战线2.0整合包。游戏信息地图名字: The End Battle Line「正式版」地图分类: 其他地图类型: 存档地图版本: 后期Anvil格式(1.3)游戏介绍>>前言<<经过了半学期加整整大半个暑假的努力&#xff0…

java敏感异常是什么_java中的异常是什么?

Throwable(所有error和exception的父类:超类)Java将错误变成对象交给异常处理机制Error(仅靠程序本身无法恢复的严重错误)一般是环境的问题&#xff0c;JVM的问题&#xff0c;并非程序的问题&#xff1b;最典型的就是虚拟机中运行的程序过多&#xff0c;造成的虚拟机内存溢出&a…

java为什么不推荐使用stack_栈和队列的面试题Java实现,Stack类继承于Vector这两个类都不推荐使用...

在 thinking in java中看到过说Stack类继承于Vector&#xff0c;而这两个类都不推荐使用了&#xff0c;但是在做一到OJ题时&#xff0c;我用LinkedList来模拟栈和直接用Stack&#xff0c;发现在进行入栈出栈操作时Stack的速度竟然还快一点然而需要多线程的时候有Collections.sy…

reducebykeyandwindow java_Spark Streaming笔记整理(三):DS的transformation与output操作

[TOC]DStream的各种transformationTransformation Meaningmap(func) 对DStream中的各个元素进行func函数操作&#xff0c;然后返回一个新的DStream.flatMap(func) 与map方法类似&#xff0c;只不过各个输入项可以被输出为零个或多个输出项filter(func) 过滤出所有函数func返回值…

php学好要多久,零基础php自学要多久

万事开头难&#xff0c;自学编程也是一样&#xff0c;只要能入门&#xff0c;在学起来就容易多了&#xff0c;那么零基础自学编程多久才可以入门呢&#xff0c;如何才能找到自学编程的门道呢&#xff1f; (推荐学习&#xff1a;PHP视频教程)零基础自学编程也可以&#xff0c;关…

php laravel 优点,Laravel 特点有哪些?

Laravel特点&#xff1a;1、“artisan”命令行工具&#xff0c;可以自动化完成手动的工作&#xff1b;2、“migration”管理数据库和版本控制&#xff1b;3、测试功能也很强大&#xff1b;4、适合应用各种开发模式TDD、DDD和BDD&#xff1b;5、支持Composer包管理工具。Laravel…

php+代码行数常量,php统计文件中的代码行数

函数介绍&#xff1a;file_get_contents()把整个文件读入一个字符串中。explode() 函数使用一个字符串分割另一个字符串&#xff0c;并返回由字符串组成的数组。count() 函数返回数组中元素的数目。在线视频教程分享&#xff1a;php视频教程示例如下&#xff1a;public functio…

PhP加载时显示动画,在ajax请求完之前的loading加载的动画效果实现

这篇文章给大家介绍的内容是关于在ajax请求完之前的loading加载的动画效果实现&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。很多时候我们需要引入框架来开发项目&#xff0c;这时我们可能会遇到页面还没加载完源码出来了的…

mybatis连接oracle12乱码,使用mybatis链接oracle数据库出现账号密码错误解决

使用mybatis链接oracle数据库步骤最近oracle老师布置下来了作业&#xff0c;要求使用传统的java代码链接oracle数据库做一个小程序&#xff0c;因为我已经很熟练的掌握了ssm框架的开发&#xff0c;以前用的是mysql&#xff0c;现在就尝试尝试oracle来练练手。问题一 oracle 的j…

linux关闭gvim命令,Linux 下 8 种退出 vim 编辑器的方法

Vim被称为一个非常强大的文本编辑器&#xff0c;但同样以其陡峭的学习曲线而闻名。 如果您经常使用命令行&#xff0c;那么至少应该学习一些基本功能。 如果你没有花时间去学习它&#xff0c;即使像退出Vim这样简单的事情也很困难。Vim是一套独立的软件&#xff0c;它有自己的一…

编译 linux 3,linux内核的编译(3)

linux内核的编译(3)2008-02-23 07:17:46来源&#xff1a;互联网 阅读 ()无论什麽档名)&#xff0c;然後将你做的 zImage 拷贝进去&#xff0c;(例如&#xff0c;如果你用” /vmlinuz ″的话&#xff0c;就像这样″ cp zImage /vmlinuz ”)。接著重新执行 lilo — 在较新的系统上…

linux 端口限速技术,linux下如何实现对每个IP进行限制带宽??

linux下如何实现对每个IP进行限制带宽&#xff1f;&#xff1f;(2011-09-01 01:03:54)标签&#xff1a;杂谈linux下如何实现对每个IP进行限制带宽&#xff1f;&#xff1f;redhatlinux服务器&#xff0c;最近发现单位的网内BT下载、迅雷下载太多&#xff0c;严重影响正常上网&a…

Linux做施压机的最大线程数,关于性能测试的几个要点

几个定义性能测试(Performance Test)通常收集所有和测试有关的所有性能&#xff0c;通常被不同人在不同场合下进行使用。测试软件在系统中的运行性能&#xff0c;度量系统与预定义目标的差距。关注点&#xff1a;how much和how fast负载测试(Load Test)负载测试是一种性能测试&…