数据库的横向扩展
1. Mysql数据库横向扩展和纵向扩展的区别哪位大神有MySql架构之类的电子书籍,能发给我一份么跪谢
横向是在表宽度上做优化,将部分表进行折分
纵向是在表数据深度上做优化,将数据进行折分
2. 常用的关系型数据库有哪些
Nosql的全称是Not Only Sql,这个概念很早就有人提出。Nosql指的是非关系型数据库,而我们常用的都是关系型数据库。就像我们常用的mysql,oralce、sqlserver等一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的。但是,随着互联网的高速发展,传统的关系型数据库在应付超大规模,超大流量以及高并发的时候力不从心。而就在这个时候,Nosql应运而生。
上面说的是NOSQL 的定义.Nosql和关系型数据库的区别,这里我说明一比较重要的区别。
存储格式: 关系型数据库是表格式的,存储在表的行和列中。他们之间很容易关联协作存储,提取数据很方便。而Nosql数据库则与其相反,他是组合在一起。通常存储在数据集中,就像文档、键值对或者图结构。举个例子,例如在游戏里面玩家的背包数据,我们都知道一个游戏里面的道具是很多,而且不确定玩家什么时候获取什么道具,这个时候如果想在关系数据库里面存储数据,这个表怎么建立就是一个很大的问题,如果你把所有的道具ID 当做表头 ,那么后续每增加一个道具,就需要修改这张表。如果你的表结构是 :
用户ID|道具ID|道具数量|道具特殊属性
那么可以想象一下 这张表随着用户的增多会变的多么的庞大。所以这个时候我们就需要一个能直接像操作玩家对象一样的数据库,这里比较代表性的就是mongo ,通过这个我们就可以看出nosql 数据库更适合存储结构不确定的数据。
存储扩展:这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而Nosql数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。
上面的的例子已经说明了这个问题。在现代互联网时代大家都是希望能横线扩展服务。这样付出的代价是最小的。
对于上面关系型数据库和NOSQL 数据库的区别其实还有很多。我相信大家在用的都会感觉到。上面列出的只是我感觉区别最大的。
那么NOSQL 这么好用,是不是都可以用了呢,显示不是这样,NOSQL 对于聚合查询显示不是他的强项。这个时候就需要关系型数据库。我是这样建议,对于结构统一,应该存储于关系型数据库,对于结构不统一的可以存储到NOSQL数据库例如mongo 。但是这个不是绝对的,在实际的项目的开发过程中,需要根据的自己的业务,仔细揣摩一下,做好最合适的划分。
常见关系型数据库通常有SQL Server,Mysql,Oracle等。主流的Nosql数据库有Redis,Memcache,MongoDb。大多数的关系型数据库都是付费的并且价格昂贵,成本较大,而Nosql数据库通常都是开源的。在互联网行业用大多也是免费的MYSQL(这里偷笑一下)。
在实际的项目中大家的项目都是如何选择的呢?大家可以关注我,私信或者在评论区留言。
3. 如何对SQL Server数据库进行横向扩展
一般人们会选择纵向扩展(scale up)SQL Server数据库,而非横向扩展(scale out)。纵向扩展很容易:增加硬件、处理能力、内存、磁盘和提高网络速度。其原理就是仍然在一台服务器上运行数据库,但是增加了服务器的处理能力和资源。这种方法很昂贵,但是非常简单直接。
采用云技术
有时候,最简单的方法就是将问题交由其他人处理。微软的Windows Azure云服务包含一个基于云的SQL Server版本SQL Azure.这在技术上并非真正意义的横向扩展,因为它是一种无限纵向扩展方法。所以,转移到Azure并不需要对您的应用程序进行大改动。实际上,您只需要将应用程序迁移到SQL Azure,然后支付存储、处理和数据传输费用。这些都是收费服务,但是您不需要再担心扩展问题。
复制
SQL Server原生复制是一种支持横向扩展的解决方案,与数据库的创建和使用方式有关。您只需要在多台服务器上复制多个数据库副本,然后将不同的用户指向各台服务器。这种方法通常最适合支持地理位置分散的用户,如亚洲办公室的用户使用服务器1,而北美办公室的用户则使用服务器2.每一台服务器都拥有完整的数据副本,并且会复制伙伴服务器的所有修改。
这种方法不支持自动负载均衡,并且最适合用在用户固定只使用一部分数据的情况。换而言之,如果亚洲用户只需要编辑与他们办公室相关的数据--例如,主要是亚洲客户的信息,那么复制能够保证其他数据库副本也包含这些记录的副本。如果所有用户都需要编辑完整的数据集,那么复制就变得有一些复杂,因为SQL Server必须在支持用户的同时,编辑位于不同服务器的同一个数据。
SQL Server的合并复制能够处理这种冲突,但是您必须进行一些自定义合并编程,这意味着您的开发人员必须开发一些算法,确定用户并发访问数据时谁获取编辑权限。客户应用程序也需要增加编程;使它们不仅向数据库提交数据修改,也要循环检查这些修改是否被其他并发用户重写。用户也需要重新培训,因为客户端应用程序可能会提示:"您正在编程的数据已经发生变化。您需要重新检查,确定您的编辑是否仍然有效。"
联合数据库
另一个重要的横向扩展方法是联合。通过这种方法,您可以将数据库划分到多台服务器上。垂直分割将同一个表的不同行保存到不同的服务器上。同时,地理分区是最常用的方法:将所有亚洲数据记录保存在一台服务器上,而所有欧洲数据则保存在另一台服务器上。这种方法不同于整体复制:每一个位置的服务器都不具备完整的数据库,而只拥有该位置的数据。通过实现一种SQL Server分布式分区视图而形成完整的表,用户就可以浏览一个"联合"或组合的数据视图。水平分割则将表的字段保存在不同的服务器上,因此各台服务器一起协作构成组合的表。
这些数据库的创建并不简单,其中涉及一种整体操作。您需要掌握关于数据访问和使用的详细信息,才能够实现正确的部署。此外,您还需要一位SQL Server数据库架构师,他应该全面理解这些技术,分析您的业务情况,并且能够正确地创建这些组件。
在一些情况中,实现这种横向扩展对客户端应用程序的改动很小。对于本身在设计上大量使用视图和存储过程进行数据访问的应用程序,更是如此。因为这些元素只是是在后台抽象,在客户端上不会发生变化。但是,这些应用程序并不常见;通常,实现横向扩展都需要修改客户端程序,使客户端与后台结构分离。
横向扩展并不简单
毫无疑问,实现SQL Server横向扩展非常复杂--这也是Azure等云数据库系统流行的原因之一。此外,有一些第三方供应商能够帮助实现横向扩展技术,而不需要完全依赖SQL Server的原生特性。您需要自己下功夫了解这些方法,理解数据访问和使用方法,这样才能够选择最符合您要求的方法。
4. 大数据的存储
⼤数据的存储⽅式是结构化、半结构化和⾮结构化海量数据的存储和管理,轻型数据库⽆法满⾜对其存储以及复杂的数据挖掘和分析操作,通常使⽤分布式⽂件系统、No SQL 数据库、云数据库等。
结构化、半结构化和⾮结构化海量数据的存储和管理,轻型数据库⽆法满⾜对其存储以及复杂的数据挖掘和分析操作,通常使⽤分布式⽂件系统、No SQL 数据库、云数据库等。
1 分布式系统:分布式系统包含多个⾃主的处理单元,通过计算机⽹络互连来协作完成分配的任务,其分⽽治之的策略能够更好的处理⼤规模数据分析问题。
主要包含以下两类:
1)分布式⽂件系统:存储管理需要多种技术的协同⼯作,其中⽂件系统为其提供最底层存储能⼒的⽀持。分布式⽂件系统 HDFS 是⼀个⾼度容错性系统,被设计成适⽤于批量处理,能够提供⾼吞吐量的的数据访问。
2)分布式键值系统:分布式键值系统⽤于存储关系简单的半结构化数据。典型的分布式键值系统有 Amazon Dynamo,以及获得⼴泛应⽤和关注的对象存储技术(Object Storage)也可以视为键值系统,其存储和管理的是对象⽽不是数据块。
2 Nosql 数据库:关系数据库已经⽆法满⾜ Web2.0 的需求。主要表现为:⽆法满⾜海量数据的管理需求、⽆法满⾜数据⾼并发的需求、⾼可扩展性和⾼可⽤性的功能太低。No SQL 数据库的优势:可以⽀持超⼤规模数据存储,灵活的数据模型可以很好地⽀持 Web2.0 应⽤,具有强⼤的横向扩展能⼒等,典型的 No SQL 数据库包含以下⼏种:
3 云数据库:云数据库是基于云计算技术发展的⼀种共享基础架构的⽅法,是部署和虚拟化在云计算环境中的数据库。
5. 传统关系型数据库与MapRece的比较中,横向扩展的非线性和线性是怎样的含义
线性扩展的意思,简单的理解,就是:
获得的扩展能力和增加的资源成比例。
例如:原有2个tasktracker节点,每个可以运行20个task。现在计算能力不够了,新增加一个节点,资源相当于增加了50%,那么,你获得的扩展了的计算能力,也增加到原来的150%。这是MapRece的扩展能力。
对于传统关系型数据库来说,都是单节点的,例如原来用一个mysql来处理,当你觉得计算能力不够的时候,你没办法说我新增一台同样配置的机器,就把计算能力提高到原来的200%。一般需要更换原来的硬件,才能提高计算能力,那样就是不是横向扩展了。