一个分布式数据库在用户面前为单个逻辑数据库,但实际上是由存储在多台计算机上的一组数据库组成
在几台计算机上的数据库通过网络可同时修改和存取,每一数据库受它的局部的DBMS控制
分布式数据库中每一个数据库服务器合作地维护全局数据库的一致性
在系统中的每一台计算机称为结点
如果一结点具有管理数据库软件,该结点称为数据库服务器
如果一个结点为请求服务器的信息的一应用,该结点称为客户
在ORACLE客户,执行数据库应用,可存取数据信息和与用户交互
在服务器,执行ORACLE软件,处理对ORACLE数据库并发、共享数据存取
ORACLE允许上述两部分在同一台计算机上,但当客户部分和服务器部分是由网连接的不同计算机上时,更有效
分布处理是由多台处理机分担单个任务的处理
在ORACLE数据库系统中分布处理的例子如:客户和服务器是位于网络连接的不同计算机上
单台计算机上有多个处理器,不同处理器分别执行客户应用
SQLNET是ORACLE网络接口,允许运行在网络工作站的ORACLE工具和服务器上,可存取、修改、共享和存储在其它服务器上的数据
SAQLNET可被认为是网络通信的程序接口
SQLNET利用通信协议和应用程序接口(API)为OARCLE提供一个分布式数据库和分布处理
SQLNET驱动器为在数据库服务器上运行的ORACLE进程与ORACLE工具的用户进程之间提供一个接口
参与分布式数据库的每一服务器是分别地独立地管理数据库,好像每一数据库不是网络化的数据库
每一个数据库独立地被管理,称为场地自治性
场地自治性有下列好处:◆系统的结点可反映公司的逻辑组织
◆由局部数据库管理员控制局部数据,这样每一个数据库管理员责任域要小一些,可更好管理
◆只要一个数据库和网络是可用,那么全局数据库可部分可用
不会因一个数据库的故障而停止全部 *** 作或引起性能瓶颈
◆故障恢复通常在单个结点上进行
◆每个局部数据库存在一个数据字典
◆结点可独立地升级软件
可从分布式数据库的所有结点存取模式对象,因此正像非分布的局部的DBMS,必须提供一种机制,可在局部数据库中引用一个对象
分布式DBMS必须提供一种命名模式,以致分布式数据库中一个对象可在应用中唯一标识和引用
一般彩在层次结构的每一层实施唯一性
分布式DVMS简单地扩充层次命名模型,实施在网络上唯一数据库命名
因此一个对象的全局对象名保证在分布式数据库内是唯一
ORACLE允许在SQL语句中使用佤对象名引用分布式数据库中的模式对象(表、视图和过程)
在ORACLE中,一个模式对象的全局名由三部分组成:包含对象的模式名、对象名、数据库名、其形式如:SCOTT
EMP@SALES
DIVISION3
ACME
COM其中SCOTT为模式名,EMP为表名,@符号之后为数据库名
一个远程查询为一查询,是从一个或多个远程表中选择信息,这些表驻留在同一个远程结点
一个分布式查询可从两个或多个结点检索数据
一个分布式更新可修改两个或两个以上结点的数据
一个远程事务为一个事务,包含一人或多个远程语句,它所引用的全部是在同一个远程结点上
一个分布式事务中一个事务,包含一个或多个语句修改分布式数据库的两个或多个不同结点的数据
在分布式数据库中,事务控制必须在网络上直辖市,保证数据一致性
两阶段提交机制保证参与分布式事务的全部数据库服务器是全部提交或全部回滚事务中的语句
ORACLE分布式数据库系统结构可由ORACLE数据库管理员为终端用户和应用提供位置透明性,利用视图、同义词、过程可提供ORACLE分布式数据库系统中的位置透明性
ORACLE允许在SELECT(查询)、INSERT、UPDATE、DELETE、SELECTFORUPDATE和LOCKTABLE语句中引用远程数据
对于查询,包含有连接、聚合、子查询和SELECTFORUPDATE,可引用本地的、远程的表和视图
对于UPDATE、INSERT、DELETE和LOCKTABLE语句可引用本地的和远程的表
注意在引用LONG和LONGRAW列、序列、修改表和封锁表时,必须位于同一个结点
ORACLE不允许作远程DDL语句
在单场地或分布式数据库中,所有事务都是用COMMIT或ROLLBACK语句中止
ORACLE提供两种机制实现分布式数据库中表重复的透明性:表快照提供异步的表重复;触发器实现同步的表的重复
在两种情况下,都实现了对表重复的透明性
在说HBase之前,我想再唠叨几句。做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到底有多少,说不定今天你的用户还少,明天系统用户就变多了,结果您的系统应付不过来了了,不干了,这岂不是咱哥几个的悲哀,说时髦点就叫“杯具啊”。\x0d\\x0d\其实说白了,这些就是事先没有认清楚互联网应用什么才是最重要的。从系统架构的角度来说,互联网应用更加看重系统性能以及伸缩性,而传统企业级应用都是比较看重数据完整性和数据安全性。那么我们就来说说互联网应用伸缩性这事儿对于伸缩性这事儿,哥们儿我也写了几篇博文,想看的兄弟可以参考我以前的博文,对于web server,app server的伸缩性,我在这里先不说了,因为这部分的伸缩性相对来说比较容易一点,我主要来回顾一些一个慢慢变大的互联网应用如何应对数据库这一层的伸缩。\x0d\\x0d\首先刚开始,人不多,压力也不大,搞一台数据库服务器就搞定了,此时所有的东东都塞进一个Server里,包括web server,app server,db server,但是随着人越来越多,系统压力越来越多,这个时候可能你把web server,app server和db server分离了,好歹这样可以应付一阵子,但是随着用户量的不断增加,你会发现,数据库这哥们不行了,速度老慢了,有时候还会宕掉,所以这个时候,你得给数据库这哥们找几个伴,这个时候Master-Salve就出现了,这个时候有一个Master Server专门负责接收写 *** 作,另外的几个Salve Server专门进行读取,这样Master这哥们终于不抱怨了,总算读写分离了,压力总算轻点了,这个时候其实主要是对读取 *** 作进行了水平扩张,通过增加多个Salve来克服查询时CPU瓶颈。一般这样下来,你的系统可以应付一定的压力,但是随着用户数量的增多,压力的不断增加,你会发现Master server这哥们的写压力还是变的太大,没办法,这个时候怎么办呢?你就得切分啊,俗话说“只有切分了,才会有伸缩性嘛”,所以啊,这个时候只能分库了,这也是我们常说的数据库“垂直切分”,比如将一些不关联的数据存放到不同的库中,分开部署,这样终于可以带走一部分的读取和写入压力了,Master又可以轻松一点了,但是随着数据的不断增多,你的数据库表中的数据又变的非常的大,这样查询效率非常低,这个时候就需要进行“水平分区”了,比如通过将User表中的数据按照10W来划分,这样每张表不会超过10W了。\x0d\\x0d\综上所述,一般一个流行的web站点都会经历一个从单台DB,到主从复制,到垂直分区再到水平分区的痛苦的过程。其实数据库切分这事儿,看起来原理貌似很简单,如果真正做起来,我想凡是sharding过数据库的哥们儿都深受其苦啊。对于数据库伸缩的文章,哥们儿可以看看后面的参考资料介绍。\x0d\\x0d\好了,从上面的那一堆废话中,我们也发现数据库存储水平扩张scale out是多么痛苦的一件事情,不过幸好技术在进步,业界的其它弟兄也在努力,09年这一年出现了非常多的NoSQL数据库,更准确的应该说是No relation数据库,这些数据库多数都会对非结构化的数据提供透明的水平扩张能力,大大减轻了哥们儿设计时候的压力。下面我就拿Hbase这分布式列存储系统来说说。\x0d\\x0d\一 Hbase是个啥东东? \x0d\在说Hase是个啥家伙之前,首先我们来看看两个概念,面向行存储和面向列存储。面向行存储,我相信大伙儿应该都清楚,我们熟悉的RDBMS就是此种类型的,面向行存储的数据库主要适合于事务性要求严格场合,或者说面向行存储的存储系统适合OLTP,但是根据CAP理论,传统的RDBMS,为了实现强一致性,通过严格的ACID事务来进行同步,这就造成了系统的可用性和伸缩性方面大大折扣,而目前的很多NoSQL产品,包括Hbase,它们都是一种最终一致性的系统,它们为了高的可用性牺牲了一部分的一致性。好像,我上面说了面向列存储,那么到底什么是面向列存储呢?Hbase,Casandra,Bigtable都属于面向列存储的分布式存储系统。看到这里,如果您不明白Hbase是个啥东东,不要紧,我再总结一下下:\x0d\\x0d\Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写 *** 作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。\x0d\\x0d\二 Hbase数据模型 \x0d\HBase,Cassandra的数据模型非常类似,他们的思想都是来源于Google的Bigtable,因此这三者的数据模型非常类似,唯一不同的就是Cassandra具有Super cloumn family的概念,而Hbase目前我没发现。好了,废话少说,我们来看看Hbase的数据模型到底是个啥东东。\x0d\\x0d\在Hbase里面有以下两个主要的概念,Row key,Column Family,我们首先来看看Column family,Column family中文又名“列族”,Column family是在系统启动之前预先定义好的,每一个Column Family都可以根据“限定符”有多个column下面我们来举个例子就会非常的清晰了。\x0d\\x0d\假如系统中有一个User表,如果按照传统的RDBMS的话,User表中的列是固定的,比如schema 定义了name,age,sex等属性,User的属性是不能动态增加的。但是如果采用列存储系统,比如Hbase,那么我们可以定义User表,然后定义info 列族,User的数据可以分为:info:name = zhangsan,info:age=30,info:sex=male等,如果后来你又想增加另外的属性,这样很方便只需要info:newProperty就可以了。\x0d\\x0d\也许前面的这个例子还不够清晰,我们再举个例子来解释一下,熟悉SNS的朋友,应该都知道有好友Feed,一般设计Feed,我们都是按照“某人在某时做了标题为某某的事情”,但是同时一般我们也会预留一下关键字,比如有时候feed也许需要url,feed需要image属性等,这样来说,feed本身的属性是不确定的,因此如果采用传统的关系数据库将非常麻烦,况且关系数据库会造成一些为null的单元浪费,而列存储就不会出现这个问题,在Hbase里,如果每一个column 单元没有值,那么是占用空间的。下面我们通过两张图来形象的表示这种关系:\x0d\\x0d\上图是传统的RDBMS设计的Feed表,我们可以看出feed有多少列是固定的,不能增加,并且为null的列浪费了空间。但是我们再看看下图,下图为Hbase,Cassandra,Bigtable的数据模型图,从下图可以看出,Feed表的列可以动态的增加,并且为空的列是不存储的,这就大大节约了空间,关键是Feed这东西随着系统的运行,各种各样的Feed会出现,我们事先没办法预测有多少种Feed,那么我们也就没有办法确定Feed表有多少列,因此Hbase,Cassandra,Bigtable的基于列存储的数据模型就非常适合此场景。说到这里,采用Hbase的这种方式,还有一个非常重要的好处就是Feed会自动切分,当Feed表中的数据超过某一个阀值以后,Hbase会自动为我们切分数据,这样的话,查询就具有了伸缩性,而再加上Hbase的弱事务性的特性,对Hbase的写入 *** 作也将变得非常快。\x0d\\x0d\上面说了Column family,那么我之前说的Row key是啥东东,其实你可以理解row key为RDBMS中的某一个行的主键,但是因为Hbase不支持条件查询以及Order by等查询,因此Row key的设计就要根据你系统的查询需求来设计了额。我还拿刚才那个Feed的列子来说,我们一般是查询某个人最新的一些Feed,因此我们Feed的Row key可以有以下三个部分构成,这样以来当我们要查询某个人的最进的Feed就可以指定Start Rowkey为,End Rowkey为来查询了,同时因为Hbase中的记录是按照rowkey来排序的,这样就使得查询变得非常快。\x0d\\x0d\三 Hbase的优缺点 \x0d\1 列的可以动态增加,并且列为空就不存储数据,节省存储空间\x0d\\x0d\2 Hbase自动切分数据,使得数据存储自动具有水平scalability\x0d\\x0d\3 Hbase可以提供高并发读写 *** 作的支持\x0d\\x0d\Hbase的缺点:\x0d\\x0d\1 不能支持条件查询,只支持按照Row key来查询\x0d\\x0d\2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉\x0d\\x0d\四补充\x0d\1数据类型,HBase只有简单的字符类型,所有的类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型和存储方式。\x0d\2数据 *** 作:HBase只有很简单的插入、查询、删除、清空等 *** 作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接 *** 作。 \x0d\3存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件时分离的。而传统的关系型数据库是基于表格结构和行模式保存的 \x0d\4数据维护,HBase的更新 *** 作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改\x0d\5可伸缩性,Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能这个取决于怎么搭建网络结构;程序服务器和数据库服务器·可以是同一台;也可以分成二台;
通常网络搭建结构,取决于程序本身的定位和需求;
至于服务器,网络有上很多这样的租凭服务,系统可以根据你的要求(如,linux,debian,windows等)自由安装,只是服务器的网速及硬盘大小就会有不同,价格也自然不同;
要看你做些什么,如果是做服务器,用Windows2003SERVER好,如果只是一般的家用,XP就行了。
附上Windows2003对于WindowsXP性能上的优势:
一般来说,windows2003是用在服务器上的 *** 作系统,而xp这是用在客户端较为常用的 *** 作系统。xp是98得接班,2003是2000下一代,这种说法不专业,因为2003在不启动服务器角色的情况下就是xp,下面是具体的差别:
1、看你是什么用户了。如果你是一般的用户,玩电脑的水平不是很高,碰到什么问题一般得请别人来帮你解决的话,在技术上,建议你使用XP或是请别人来帮你安装windows2003。因为windows2003出于安全方面的考虑非常多,很多东西默认是不打开的,在使用中,如果你水平很低的话,可能会发晕。
2、windows2003的设计是专用于服务器的,不过,经过少量的参数调整,能非常好的用于个人娱乐平台。但是要注意的是,如果你有什么老的硬件,特别是4、5年之前出品的东西,一定要搞清楚是否兼容。如果你的机器是新购不到一年的,基本上不会出现什么兼容问题。多数情况下,硬件驱动使用win2k或是winxp下的就好。另外要注意的是,除非特别说明驱动适用于windows2003,否则一定不要加装主板驱动和硬盘驱动。另:如果windows2003本身能正常认识你的硬件,而且能使你的硬件正常使用,最好不要另装驱动,或先镜像备份后再去试。
3、在图象/**采集、制作上,windows2003似乎有先天不足(或是开发商还没有跟上),很多扫描仪、数码摄像机在windows2003上是无法正常使用的。本人的一台紫光扫描仪和松下的摄像机就不可以。反之,在XP下能很好的使用。
4、XP的多用户管理功能是很差的,差到还不足与windows2000server相比,在XP中,无法对一个磁盘、一个目录的访问、读写权进行特别设定,而windows2003就做得非常好。因此,如果你想使用多用户系统、想存放别人不能访问的东西,windows2003是一个非常好的选择,而且对于技术稍好的朋友会发现,在受限帐户下使用windows2003,9999%的病毒、木马、恶意程序对你的机器都不会起作用。(XP也可以使用受限帐户,但是没有windows2003管理功能强)。不过,有一点XP要比windows2003强,那就是XP的多个用户本地同时登录(开始-》注销-》切换用户)至今的win中,也只有XP有这个功能(至于远程登录本人没功夫去试了,呵呵)。
5、专业电脑技术人员或想真正学电脑技术的朋友来说,windows2003是非常好的选择。因为它是真正的Server,很多编程环境、很多数据库管理只有在Server环境下才能真正使用。特别是网络环境、IIS等,由于XP有同时9用户并发联接限制,windows2003明显比XP要强大。
6、对于多数游戏来说,windows2003和XP下没有什么不同。对于某些老软件,windows2003下设定以兼容方式运行时本人发现,XP下不能使用的,windows2003反而能使用(如开天辟地背单词等)也是有的。当前流行的游戏很少发现windows2003下不能用的,而且在正常设定windows2003参数下(主要指打开显卡加速、声卡加速、DX全部功能,优化后台与优化前台程序设定等),windows2003不比XP下差。
7、系统安全性上,应该说对于对电脑熟的朋友,windows2003安全性远高于XP,对于电脑不熟的朋友,XP与windows2003下都不安全,呵呵,打开系统自带的防火墙或加装天网吧,这样好一些(建议不使用系统自带防火墙,那玩意儿功能太差了点,用天网,功能强,使用简单)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)