㈠ 如何编写一个分布式数据库
某种程度上看来,数据库作为整个系统的核心,这句话其实并不夸张,数据库的选型关系到上层业务代码实现的方方面面,现在比较流行的架构方案是上层业务逻辑微服务化,并且结合分布式缓存,这套框架已经基本能做到上层业务的弹性扩展,但是最底层的数据存储还是很难去中心化(除非整个技术栈中去除关系型数据库(RDBMS), 全部采用 NoSQL)。所以,经常是 RDBMS 成为整个系统的瓶颈。
在长期的斗争中,大家总结出了很多方式来扩展最底层的关系型数据库:
1. 主从,一主多从,双写,通过队列暂存请求... 这些方案其实并没有解决问题,写入仍然是单点,而且对于 DBA 的挑战比较大,今天我们暂时就不讨论了。
2. 通过中间件 Sharding,常见的开源方案有: Cobar, TDDL, Vitess, Kingshard, MyCat 等,这些方案的思路是拦截 SQL 的请求通过 sharding key 和一定规则,将请求转发/广播到不同的 MySQL 实例上,从而实现水平扩展的效果,这个方案基本解决了单点写入的问题,对于业务来说整体的吞吐也上来了,看上去不错,这个方案是大多数业务遇到性能瓶颈的解决方案,但是缺点也是有的:
1)大多中间件都没有解决动态扩容的问题,多采用了静态的路由策略,扩容一般还处于人工 x2 的状态,对 DBA 要求比较高。
2)从一定程度上来说都放弃了事务,这是由于一条语句有可能会涉及到多个数据库实例,实现分布式 事务是一个比较难的事情,我们后面会详细的介绍。
3)对业务不透明,需要指定 sharding key, 心智负担较大
㈡ 什么是分布式数据库
精确的分布式数据库定义:分布式数据库是由一组数据组成的,这组数据分布在计算机网络中的不同的计算机上,网络中的每个节点具有独立处理的能力(称为场地自治),可以执行局部应用。同时,每个节点也能通过网络通信子系统执行全局应用。与之前的定义相比,更注重场地自治性以及自治场地之间的协作性。
分布式数据库系统:一个粗略的定义是“分布式数据库由一组数据组成,这些数据物理上分布在计算机网络的不同节点上(亦称场地)上,逻辑上是属于同一个系统。” 这里强调两点:
(1)分布性:数据库中的数据不是存储在同一场地,更确切的说,不存储在同一计算机的存储设备上,这就可以和集中式数据库相互区别。
(2)逻辑整体性:这些数据逻辑上是互相联系的,是一个整体(逻辑上如同集中数据库)。
㈢ 分布式系统的例子和这个例子的工作模式
分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。
分布式操作系统负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。
分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。
分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。
分布式数据库系统由分布于多个计算机结点上的若干个数据库系统组成,它提供有效的存取手段来操纵这些结点上的子数据库。分布式数据库在使用上可视为一个完整的数据库,而实际上它是分布在地理分散的各个结点上。当然,分布在各个结点上的子数据库在逻辑上是相关的。
---------------
分布式数据库系统是由若干个站集合而成。这些站又称为节点,它们在通讯网络中联接在一起,每个节点都是一个独立的数据库系统,它们都拥有各自的数据库、中央处理机、终端,以及各自的局部数据库管理系统。因此分布式数据库系统可以看作是一系列集中式数据库系统的联合。它们在逻辑上属于同一系统,但在物理结构上是分布式的。
分布式数据库系统已经成为信息处理学科的重要领域,正在迅速发展之中,原因基于以下几点:
1、它可以解决组织机构分散而数据需要相互联系的问题。比如银行系统,总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这就需要分布式的系统。
2、如果一个组织机构需要增加新的相对自主的组织单位来扩充机构,则分布式数据库系统可以在对当前机构影响最小的情况下进行扩充。
3、均衡负载的需要。数据的分解采用使局部应用达到最大,这使得各处理机之间的相互干扰降到最低。负载在各处理机之间分担,可以避免临界瓶颈。
4、当现有机构中已存在几个数据库系统,而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成分布式数据库系统。
5、相等规模的分布式数据库系统在出现故障的几率上不会比集中式数据库系统低,但由于其故障的影响仅限于局部数据应用,因此就整个系统来讲它的可靠性是比较高的。
特点
1、在分布式数据库系统里不强调集中控制概念,它具有一个以全局数据库管理员为基础的分层控制结构,但是每个局部数据库管理员都具有高度的自主权。
2、在分布式数据库系统中数据独立性概念也同样重要,然而增加了一个新的概念,就是分布式透明性。所谓分布式透明性就是在编写程序时好象数据没有被分布一样,因此把数据进行转移不会影响程序的正确性。但程序的执行速度会有所降低。
3、集中式数据库系统不同,数据冗余在分布式系统中被看作是所需要的特性,其原因在于:首先,如果在需要的节点复制数据,则可以提高局部的应用性。其次,当某节点发生故障时,可以操作其它节点上的复制数据,因此这可以增加系统的有效性。当然,在分布式系统中对最佳冗余度的评价是很复杂的。
分布式系统的类型,大致可以归为三类:
1、分布式数据,但只有一个总? 据库,没有局部数据库。
2、分层式处理,每一层都有自己的数据库。
3、充分分散的分布式网络,没有中央控制部分,各节点之间的联接方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式联接等。
㈣ 数据库有哪几种
常用数据库有:
1、关系型数据库
关系型数据库是由IBM的E.F. Codd于1970年发明的,它是一个表格数据库,其中定义了数据,因此可以以多种不同的方式对其进行重组和访问。关系数据库由一组表组成,其中的数据属于预定义的类别。每个表在一个列中至少有一个数据类别,并且每一行对于列中定义的类别都有一个特定的数据实例。
2、分布式数据库
分布式数据库是一种数据库,数据库存储在多个物理位置,处理在网络中的不同点之间分散或复制。分布式数据库可以是同构的,也可以是异构的。同构分布式数据库系统中的所有物理位置都具有相同的底层硬件,并运行相同的操作系统和数据库应用程序。异构分布式数据库中的硬件、操作系统或数据库应用程序在每个位置上可能是不同的。
3、云数据库
云数据库是针对虚拟化环境优化或构建的数据库。云数据库提供了一些好处,比如可以按每次使用支付存储容量和带宽的费用,还可以根据需要提供可伸缩性和高可用性。云数据库还为企业提供了在软件即服务部署中支持业务应用程序的机会。
4、NoSQL数据库
NoSQL数据库对于大型分布式数据集非常有用。NoSQL数据库对于关系数据库无法解决的大数据性能问题非常有效。当组织必须分析大量非结构化数据或存储在云中多个虚拟服务器上的数据时,它们是最有效的。
5、面向对象的数据库
使用面向对象编程语言创建的项通常存储在关系数据库中,但是面向对象数据库非常适合于这些项。面向对象的数据库是围绕对象(而不是操作)和数据(而不是逻辑)组织的。例如,关系数据库中的多媒体记录可以是可定义的数据对象,而不是字母数字值。
6、图形数据库
面向图形的数据库是一种NoSQL数据库,它使用图形理论存储、映射和查询关系。图数据库基本上是节点和边的集合,其中每个节点表示一个实体,每个边表示节点之间的连接。
㈤ 如何用SQL Server建立分布式数据库
很多组织机构慢慢的在不同的服务器和地点部署SQL Server数据库——为各种应用和目的——开始考虑通过SQL Server集群的方式来合并。
将SQL Server实例和数据库合并到一个中心的地点可以减低成本,尤其是维护和软硬件许可证。此外,在合并之后,可以减低所需机器的数量,这些机器就可以用于备用。
当寻找一个备用,比如高可用性的环境,企业常常决定部署Microsoft的集群架构。我常常被问到小的集群(由较少的节点组成)SQL Server实例和作为中心解决方案的大的集群哪一种更好。在我们比较了这两个集群架构之后,我让你们自己做决定。
什么是Microsoft集群服务器
MSCS是一个Windows Server企业版中的内建功能。这个软件支持两个或者更多服务器节点连接起来形成一个“集群”,来获得更高的可用性和对数据和应用更简便的管理。MSCS可以自动的检查到服务器或者应用的失效,并从中恢复。你也可以使用它来(手动)移动服务器之间的负载来平衡利用率以及无需停机时间来调度计划中的维护任务。
这种集群设计使用软件“心跳”来检测应用或者服务器的失效。在服务器失效的事件中,它会自动将资源(比如磁盘和IP地址)的所有权从失效的服务器转移到活动的服务器。注意还有方法可以保持心跳连接的更高的可用性,比如站点全面失效的情况下。
MSCS不要求在客户计算机上安装任何特殊软件,因此用户在灾难恢复的经历依赖于客户-服务器应用中客户一方的本质。客户的重新连接常常是透明的,因为MSCS在相同的IP地址上重启应用、文件共享等等。进一步,为了灾难恢复,集群的节点可以处于分离的、遥远的地点。
在集群服务器上的SQL Server
SQL Server 2000可以配置为最多4个节点的集群,而SQL Server 2005可以配置为最多8个节点的集群。当一个SQL Server实例被配置为集群之后,它的磁盘资源、IP地址和服务就形成了集群组来实现灾难恢复。
SQL Server 2000允许在一个集群上安装16个实例。根据在线帮助,“SQL Server 2005在一个服务器或者处理器上可以支持最多50个SQL Server实例,”但是,“只能使用25个硬盘驱动器符,因此如果你需要更多的实例,那么需要预先规划。”
注意SQL Server实例的灾难恢复阶段是指SQL Server服务开始所需要的时间,这可能从几秒钟到几分钟。如果你需要更高的可用性,考虑使用其他的方法,比如log shipping和数据库镜像。
单个的大的SQL Server集群还是小的集群
下面是大的、由更多的节点组成的集群的优点:
◆更高的可用新(更多的节点来灾难恢复)。
◆更多的负载均衡选择(更多的节点)。
◆更低廉的维护成本。
◆增长的敏捷性。多达4个或者8个节点,依赖于SQL版本。
◆增强的管理性和简化环境(需要管理的少了)。
◆更少的停机时间(灾难恢复更多的选择)。
◆灾难恢复性能不受集群中的节点数目影响。
下面是单个大的集群的缺点:
◆集群节点数目有限(如果需要第9个节点怎么办)。
◆在集群中SQL实例数目有限。
◆没有对失效的防护——如果磁盘阵列失效了,就不会发生灾难恢复。
◆使用灾难恢复集群,无法在数据库级别或者数据库对象级别,比如表,创建灾难恢复集群。
虚拟化和集群
虚拟机也可以参与到集群中,虚拟和物理机器可以集群在一起,不会发生问题。SQL Server实例可以在虚拟机上,但是性能可能会受用影响,这依赖于实例所消耗的资源。在虚拟机上安装SQL Server实例之前,你需要进行压力测试来验证它是否可以承受必要的负载。
在这种灵活的架构中,如果虚拟机和物理机器集群在一起,你可以在虚拟机和物理机器之间对SQL Server进行负载均衡。比如,使用虚拟机上的SQL Server实例开发应用。然后在你需要对开发实例进行压力测试的时候,将它灾难恢复到集群中更强的物理机器上。
集群服务器可以用于SQL Server的高可用性、灾难恢复、可扩展性和负载均衡。单个更大的、由更多的节点组成的集群往往比小的、只有少数节点的集群更好。大个集群允许更灵活环境,为了负载均衡和维护,实例可以从一个节点移动到另外的节点。
㈥ 分布式数据库的典型应用
最典型应用的银行领域为例: 将分散的数据库从逻辑上联系在一起,可以大大提高数据的管理效率。这就是总行和支行之间的关系:总行与全国各地的支行之间既有各自需要处理的数据,又有需要交换的数据。 将数据分散存储在各地的数据库中,可提高故障发生时的数据安全性。一旦上海支行的数据库出现故障,比如停机、损坏,也是仅仅限于上海支行,总行、广州等其他地区的支行数据库的数据都不会受到影响。 分布式架构具备良好的扩展性。比如建立一个新的海外支行时,只要将新建的数据库加入到原有的分布式数据库架构中就可以,以最小的代价在不影响原有支行、总行的情况下完成数据库的扩展。 以冗余方式进行数据的备份,以备在系统崩溃、数据丢失的情况下仍有备份数据可以进行恢复。
㈦ 如何编写一个分布式数据库
基于hadoop的分布式数据库有hbase。安装hbase除了要安装hadoop外,还要安装Zookeeper。
分布式hbase安装和分布式hadoop安装方法差不多,hbase要有master和regionserver,regionserver相当于slave,你可以在maser上面安装好hbase,然后把它拷贝到其它slave服务器,再修改一些配置.
㈧ 分布式数据库、分布式操作系统的通俗解释
通俗?呵呵分布式的意思就是物理上不在一起,是分开的,但宏观来说是在一起的只是通过网络连接形成以个体系就像网吧是个局域网,多个网吧之间不在一起但多个网吧连接在一起,他就形成了一个体系,广域网
㈨ 解析:怎样理解分布处理和分布式数据库
一个分布式数据库在用户面前为单个逻辑数据库,但实际上是由存储在多台计算机上的一组数据库组成。在几台计算机 上的数据库通过网络可同时修改和存取,每一数据库受它的局部的DBMS控制。分布式数据库中每一个数据库服务器合作地维护全局数据库的一致性。 在系统中的每一台计算机称为结点。如果一结点具有管理数据库 软件,该结点称为数据库服务器。如果一个结点为请求服务器的信息的一应用,该结点称为客户。在ORACLE客户,执行数据库应用,可存取数据信息和与用户交互。在服务器,执行ORACLE软件,处理对ORACLE数据库并发、共享数据存取。ORACLE允许上述两部分在同一台计算机上,但当客户部分和服务器部分是由网连接的不同计算机上时,更有效。 分布处理是由多台处理机分担单个任务的处理。在ORACLE数据库系统中分布处理的例子如: 客户和服务器是位于网络连接的不同计算机上。 单台计算机上有多个处理器,不同处理器分别执行客户应用。 SQL*NET是ORACLE网络接口,允许运行在网络工作站的ORACLE工具和服务器上,可存取、修改、共享和存储在其它服务器上的数据。SAQL*NET可被认为是网络通信的程序接口。SQL*NET利用通信协议和应用程序接口(API)为OARCLE提供一个分布式数据库和分布处理。 SQL*NET驱动器为在数据库服务器上运行的ORACLE进程与ORACLE工具的用户进程之间提供一个接口。 参与分布式数据库的每一服务器是分别地独立地管理数据库,好 像每一数据库不是网络化的数据库。每一个数据库独立地被管理,称为场地自治性。场地自治性有下列好处: ◆系统的结点可反映公司的逻辑组织。 ◆由局部数据库管理员控制局部数据,这样每一个数据库管理员责任域要 小一些,可更好管理。 ◆只要一个数据库和网络是可用,那么全局数据库可部分可用。不会因一个数据库的故 障而停止全部操作或引起性能瓶颈。 ◆故障恢复通常在单个结点上进行。 ◆每个局部数据库存在一个数据字典。 ◆结点可独立地升级软件。 可从分布式数据库的所有结点存取模式对象,因此正像非分布的局部的DBMS,必须提供一种机制,可在局部数据库中引用一个对象。分布式DBMS必须提供一种命名模式,以致分布式数据库中一个对象可在应用中唯一标识和引用。一般彩在层次结构的每一层实施唯一性。分布式DVMS简单地扩充层次命名模型,实施在网络上唯一数据库命名。因此一个对象的全局对象名保证在分布式数据库内是唯一。 ORACLE允许在SQL语句中使用佤对象名引用分布式数据库中的模式对象(表、视图和过程)。在ORACLE中,一个模式对象的全局名由三部分组成:包含对象的模式名、对象名、数据库名、其形式如: [email protected] 其中SCOTT为模式名,EMP为表名,@符号之后为数据库名. 一个远程查询为一查询,是从一个或多个远程表中选择信息,这些表驻留在同一个远程结点. 一个分布式查询可从两个或多个结点检索数据.一个分布式更新可修改两个或两个以上结点的数据. 一个远程事务为一个事务,包含一人或多个远程语句,它所引用的全部是在同一个远程结点上.一个分布式事务中一个事务,包含一个或多个语句修改分布式数据库的两个或多个不同结点的数据. 在分布式数据库中,事务控制必须在网络上直辖市,保证数据一致性.两阶段提交机制保证参与分布式事务的全部数据库服务器是全部提交或全部回滚事务中的语句. ORACLE分布式数据库系统结构可由ORACLE数据库管理员为终端用户和应用提供位置透明性,利用视图、同义词、过程可提供ORACLE分布式数据库系统中的位置透明性. ORACLE允许在SELECT(查询)、INSERT、UPDATE、DELETE、SELECT…FOR UPDATE和LOCK TABLE语句中引用远程数据。对于查询,包含有连接、聚合、子查询和SELECT …FOR UPDATE,可引用本地的、远程的表和视图。对于UPDATE、INSERT、DELETE和LOCK TABLE语句可引用本地的和远程的表。注意在引用LONG和LONG RAW列、序列、修改表和封锁表时,必须位于同一个结点。ORACLE不允许作远程DDL语句。 在单场地或分布式数据库中,所有事务都是用COMMIT或ROLLBACK语句中止。ORACLE提供两种机制实现分布式数据库中表重复的透明性:表快照提供异步的表重复;触发器实现同步的表的重复。在两种情况下,都实现了对表重复的透明性。