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,一经查实,立即删除!

相关文章

python的功能名称_ML获取功能选择后的功能名称SelectPercentile,python

我已经为这件事挣扎了一段时间了。我的目标是获取一个文本特征,并从中找出5-10个最好的单词来帮助我分类。因此,我正在运行一个TfIdfVectorizer,现在选择~90最佳。然而,当我缩小了特性数量之后,我无法看到实际选择了哪…

python编程竞赛规则_用python实行羽毛球比赛规则。

羽毛球比赛规则:1、21分制,三局两胜为佳2、每球得分制3、每回合中取胜的一方的一分4、双方均为20分时,领先对方2分一方获胜5、双方均为29分时,先到达30分一方获胜6、一局比赛中获胜方在下一局率先开球代码如下:from ra…

使用python下载文件的简单示例_Python

简单的FTP下载 ,不加任何异常判断。import osfrom ftplib import FTPftp_addr 10.10.0.1fFTP(ftp_addr)f.login(anonymous)f.cwd("apk_download/")remote_file 20141223140651.apkf.retrbinary("RETR %s" % remote_file, open(remote_file, &…

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,在下载页面往下拉,选择自己的操作…

mysql 建立索引的例子_mysql建立合适的索引的例子

在mysql数据库中,其实建索引也是一门学问,一个表中,索引并不是越多越好,而是适合你的业务才最重要。那么建立索引的时候,我们应该从以下几点去考量。1. 索引字段越小越好,像varchar(10)肯定比text类型的效果…

mysql有没有类似merge_有关于Mysql的MERGE表类型

有关于Mysql的MERGE表类型他将多个表在逻辑上当作一个表来查询。他建立后有两个文件,.frm 表结构定义.mrg union表的名字清单两个基本表:CREATE TABLE TEST_MERGE_1(ID INT(5) NOT NULL,VALUE VARCHAR(100) NOT NULL,PRIMARY KEY(ID))CREATE TABLE TEST_MERGE_2(ID …

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

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

mysql同表字段前4位复制_MySQL不同表之前的字段复制

有时候,我们需要复制某个字段一整列的数据到另外一个新的字段中,这很简单,SQL可以这么写:UPDATE tb_1 SET content_target content_source;大概写法如下:Update {your_table} set {source_field} {object_field} WHE…

php mysql购物车实现原理_PHP实现购物车的思路和源码分析

这里主要是记录下自己的购物车的思路,具体功能实现,但是尚未在实际项目中用到,不对之处欢迎指正项目中需要添加购物车。目录说明buy.php 点击购买之后的操作car.php 购物车,显示购买的东西conn.php 数据库连接参数delete.php 删除…

java 文件目录_Java——文件及目录File操作

packagefile;importjava.io.File;/*** 删除文件和目录**/public classDeleteFileUtil {/*** 删除文件,可以是文件或文件夹**paramfileName* 要删除的文件名*return删除成功返回true,否则返回false*/public static booleandelete(String fileName) {File …

java 对象池 实现_Java对象池技术的原理及其实现

看到一片有关于java 对象基础知识,故转载一下,同时学习一下。摘 要 本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式。还指出了使用对象池技术时所应注意的问题。关键词 对象池;对象池技术;Java…

java heap 参数_java heap space解决方法和JVM参数设置

因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误。在网上一查可能是JAVA的堆栈设置太小的原因。跟据网上的答案大致有这两种解决方法:1、设置环境变量set JAVA_OPTS -Xms32m -Xmx512…

java 进程崩溃_java程序崩溃自启脚本

java程序崩溃自启脚本教程1.将java程序崩溃自启脚本下载下来,放入项目的同级目录,将proc_name"xxx.jar" 更改成对应的名称2.chmod 777 文件 给于权限3.将想要jar程序停止 执行./test.sh 如果出现-bash: ./practice1.sh: /bin/bash^M: bad interpreter: No such file…

java程序流程控制_java程序流程控制

顺序结构分支结构(条件结构)循环结构控制循环结构顺序结构:如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行下一条语句,直到程序的最后。if语句:基本语法:if(表达式){方法体}else if(表达式){方…

java调用c视频接口_JAVA本地调用(JNI- java调用c)

记录一下工作内容,对术语了解不多,暂且这样记着吧。java调用c一、写jni的步骤如下:1.创建java类,定义接口函数,使用native修饰;2.将java类编译成class;3.将class编译成*.h头文件;4.在…

java 随机 数字 字母组合_java生成随机数字和字母组合

import java.util.Random;public String getCharAndNumr(int length){String val "";Random random new Random();for(int i 0; i < length; i){String charOrNum random.nextInt(2) % 2 0 ? "char" : "num"; // 输出字母还是数字if(&q…

java 声明抽象方法_java – 类必须声明为abstract或实现抽象方法错误

这是我的代码,假设在按下按钮时更改一些文本&#xff1a; –public class MyActivity extends ActionBarActivity {TextView txtview;Button butto;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.…

java socket 线程池_java socket编程的一个例子(线程池)

服务器程序EchoServer.java&#xff1b;import java.io.*;import java.net.*;import java.util.concurrent.*;public class EchoServer {private int port10000;private ServerSocket serverSocket;private ExecutorService executor;//线程池private final int pool_size4;pri…

java是值传递还是引用传递_Java 到底是值传递还是引用传递?

点赞、收藏还挺多&#xff0c;求一波关注------------------------------------------------------------没人邀请&#xff0c;自己强行回答一波。关于这个问题&#xff0c;引发过很多广泛的讨论&#xff0c;看来很多程序员对于这个问题的理解都不尽相同&#xff0c;甚至很多人…

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

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