数据库分类和负载均衡方案

最近我在研究数据库方面的知识,包括数据库发展历史、分类、使用场景、大数据时代的数据库等等。网上收集了很多资料,整理出来,供感兴趣的同学参考。

一、数据库发展史和数据库分类

为啥我会把发展史和分类放在一起介绍呢?因为数据库发展过程中就已经把数据库分类了。?。
数据库的研究始于20世纪60年代中期,从诞生到现在,在不到半个世纪的时间里,无论从理论上、技术实践上、商业领域应用上都有了很成熟的发展。从我个人理解,数据库发展就分如下3阶段:

第一阶段 文件库

计算机刚刚兴起的年代,是没有专门存储数据的库的,基本上所有的数据信息都是以文件的形式存取,也就是文件库。最大的缺点显而易见:没规范、不通用。但也并不是一无是处,优点就是灵活、自定义?。
之前我做过一个项目。这个项目就是做一个自定义操作系统OS。这个系统很轻量,类Linux系统,甚至没有图形界面。作为一个操作系统,数据库肯定得是标配啊。但是,但是我们这个系统是专设备定制的。设备上所用内存64M,空间不够用啊。在轻量级的数据库移植过来也最少4M以上的内存。怎么办?文件存储啊。我们团队就用一个文件实现了类似数据库的功能。基本结构就是这个样子:

第二阶段 关系型数据库

关系型数据库具有的优势直到现在也是无可替代的,还在我上大学的时候,接触的数据库就是关系型数据库。关系型数据库擅长小量数据的读写存储、擅长复杂的SQL操作、支持事务机制等等,所以到现在出现了很多的关系型数据库,比如MySQL、SQL Server、Oracle、DB2、SyBase、Informix、PostgreSQL以及Access数据等等,各有优缺点。但他们总体上的优点如下:
1、易于维护:都是使用表结构,格式一致;
2、统一操作:SQL语言通用,可用于一个表以及多个表之间非常复杂的查询;
缺点:
也是相对于技术的进步,关系型数据库不能满足大数据时代的一些业务场景:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

第三阶段 非关系型数据库

但随着大数据时代的到来和互联网的兴起,传统的RDBMS在一些业务上开始出现问题。首先,对数据库存储的容量要求越来越高,单机无法满足需求,很多时候需要用集群来解决问题,而RDBMS由于要支持join,union等操作,一般不支持分布式集群。其次,在大数据大行其道的今天,很多的数据都“频繁读和增加,不频繁修改”,而RDBMS对所有操作一视同仁,这就带来了优化的空间。另外,互联网时代业务的不确定性导致数据库的存储模式也需要频繁变更,不自由的存储模式增大了运维的复杂性和扩展的难度。

非关系型数据库又称为NoSql。NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。这类数据库主要有这些特点:非关系型的、分布式的、开源的、水平可扩展的。最初的目的是为了大规模web 应用。NoSQL 的拥护者们提倡运用非关系型的数据存储,通常的应用如下特点:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。

常见NoSql有以大致分为4种类型:

存储类型代表数据库特点
列存储BigTable、HBase、Cassandra、Amazon SimpleDB、HadoopDB按列存储,适用于数据压缩,对一个或者几个字段进行查询的效率较高
文档存储MongoDB、CouchDB、Perservere、Terrastore、RavenDB保证海量数据存储的同时,具有良好的查询性能。用类似json格式进行存储
key-value存储Redis、SimpleDB具有较高的并发读写性能,通过key迅速找到value
图数存储Neo4J、InfoGrid图形关系的最佳存储模式
xml存储BerkereyDB XML高效存储xml数据,并支持xml的内部查询语法
对象存储db4o,versant类似面向对象的语法操作数据库,通过对象的方式存取数据

二、常见数据库介绍

每种数据库都是前辈们用了几年甚至十几年搞出来,所以我不可能段时间内就能消化得很透测,也不可能短短几句话就说的透测。下面的数据库介绍更接近于简介,甚至入门都算不上。实际工作中我们也不会面面俱到,把每种数据库都了解的很透测,更重要的是对数据库有一个全局观(便于做业务前期的技术选型),然后具体到某一个数据库深入进去。

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
缺点就是不开源,收费,一般人用不起?。

Mysql / MariaDB

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,后来被 Oracle收购,现在属于Oracle 旗下产品。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

MariaDB base on Mysql,是基于Mysql的一个分支,所以把它和Mysql放在一起谈。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 过去一年中,大型互联网用户以及Linux发行商纷纷抛弃MySQL,转投MariaDB阵营。MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品。所以说在使用上基本同Mysql,但青出于蓝而胜于蓝,目前MariaDB在很多方面更优于Mysql。
自centos7之后,centos已经不在提供Mysql的下载源管理,而是全面支持MariaDB。

SQLserver

SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS)。我上大学时数据库教程就是SQL Server2000,暴露了我的年龄啊。。后来是SQL Server 2005、SQL Server 2008,现在是SQL Server 2017。对这个数据库没什么好印象,装在电脑上各种蓝屏。。。不知道原因在系统还是数据库。
不关心其优点如何,SQL Server 只能windows上运行,仅这一条,就注定了它的命运。。

PostgreSQL

PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL。PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。
它的发音问题导致大家宁愿简称它为PG。哈哈。

它的优点是什么呢?PostgreSQL标榜自己是世界上最先进的开源数据库。PostgreSQL的一些粉丝说它能与Oracle相媲美,而且没有那么昂贵的价格和傲慢的客服。PostgreSQL是完全由社区驱动的开源项目。它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版。

之前我带着做过一个基于openfire服务器的即时通讯项目。openfire服务器就预置了两个数据库,mysql和PG。当时负责服务器端的同事跟我说PostgreSQL在事务隔离和集群支持上比MySQL更胜一筹。所以我们选择了PG。

OceanBase

前面提到的几个都是国外的数据库。其实国内也有很多自研的数据库,“made in china”,比如达梦数据库、openbase、金仓数据库、OceanBase等。这里我最想聊的就是阿里巴巴的OceanBase。

OceanBase是阿里集团研发的可扩展的关系数据库,实现了数千亿条记录、数百TB数据上的跨行跨表事务,截止到2012年8月,支持了收藏夹、直通车报表、天猫评价等OLTP和OLAP在线业务,线上数据量已经超过一千亿条。

在这里我最想深挖的一个问题是:阿里这个大的一个商业公司,面对市面上那么多成熟的数据库,为何还要自己搞一个出来?对此问题先发个参考链接:https://baijiahao.baidu.com/s?id=1617083085195972124&wfr=spider&for=pc
其实这本质原因和前一段时间阿里重磅发布其 OpenJDK 发行版 Alibaba Dragonwell一样:无论是开源的数据库还是开源的jdk,当在业务上不能完全满足一个企业要求时,企业就会对其进行修改和定制化,修修改改多了就得面临重构,重构的结果就是oceanbase。这里不得不感慨一下:大公司就是牛气,有钱有技术,开源的东西不好用了干脆就自己搞一个出来。
希望不久的将来,我们做一个web项目的基础是:
“国产中间件+国产数据库+国产操作系统+国产服务器(内置国产cpu)”

Mongedb

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。

Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
优势

  1. 非常丰富的数据结构;
  2. Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断;
  3. 数据存在内存中,读写非常的高速,可以达到10w/s的频率。

适用场景
适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。更具体的可参照这篇《Redis 的 5 个常见使用场景》译文。

levelDB

LevelDB 是由谷歌重量级工程师(Jeff Dean 和 Sanjay Ghemawat)开发的开源项目,它是能处理十亿级别规模 key-value 型数据持久性存储的程序库,开发语言是C++。除了持久性存储,LevelDB 还有一个特点是 —— 写性能远高于读性能(当然读性能也不差)。
对于它的使用,我之前研究过区块链领域的比特币的源码,内部数据库就用的是leveldDB。

Hbase

HBase 是 Apache Hadoop 中的一个子项目,属于 bigtable 的开源版本,所实现的语言为Java(故依赖 Java SDK)。HBase 依托于 Hadoop 的 HDFS(分布式文件系统)作为最基本存储基础单元。

优势

  1. 存储容量大,一个表可以容纳上亿行,上百万列;
  2. 可通过版本进行检索,能搜到所需的历史版本数据;
  3. 负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce);

适用场景

  1. 更适用于Java项目,bigtable类型的数据存储;
  2. 对数据有版本查询需求;
  3. 应对超大数据量要求扩展简单的需求。

三、数据库高可用负载均衡方案

未完待续。。。。。
先下楼打球了?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海棠花败

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值