数据库概览与选择

 

1 数据库市场介绍

DB-Engines 发布的2017 年 2月份的数据库排名前10的数据库如下,其中商业数据库4个,开源6个,关系型数据库7个,非关系型3个

 

2 如何选择数据库

A、看应用场景  —  OLTP/OLAP 

  OLTP(联机事务处理)
  事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的Transaction以及Execute SQL的数量 。
  典型应用:电子商务系统、银行、证券等,如eBay的业务数据库,就是很典型的OLTP数据库

 

  OLAP(联机分析处理)
  有的时候也叫DSS决策支持系统,就是我们说的数据仓库。在这样的系统中,语句的执行量不是考核标准,因为一条语句的执行时间可能会非常长,读取的数据也非常多。所以,在这样的系统中,考核的标准往往是磁盘子系统的吞吐量(带宽),如能达到多少MB/s的流量。
  典型应用:大数据分析。

 

B、看应用场景  —  SQL / NoSQL 

 

NoSQL与SQL的区别
  优点:高并发读写、海量数据存储、高可扩展性、高可用性
  缺点:缺乏事务一致性、缺乏读写实时性、不支持复杂查询

 

NoSQL数据库类型
  Key-value:通常用hash table来实现
  列式数据库:同一列数据存在一起
  文档型数据库:Key-Value对应的键值对,Value为结构化数据产品:MongoDB
  图结构数据库:以“图”为基本存储模型,产品:Neo4j,InfoGrid,InfiniteGraph

 

C、看数据模型

  关系数据库
  数据模型:各种关系
  例子:Oracle、Mysql
  优点:高性能、可扩展的OLTP,支持SQL,物化视图,支持事务,编程友好


  网格数据库(支持网格的数据库)
  数据模型:基于空间的架构
  例子:GigaSpaces, Coherence
  优点:适于事务处理的高性能和高扩展性

 

  对象数据库
  数据模型:对象
  例子:Objectivity, Gemstone
  优点:复杂对象模型,快速键值访问,键功能访问,以及图数据库的优点

 

  文档数据库
  数据模型:包含了key-value的文档集合 ,
  面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。
  每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。
  数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。

  产品:MongoDB、CouchDB、RavenDB

  有谁在使用:SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)

  1. 适用的场景
    1) 日志。企业环境下,每个应用程序都有不同的日志信息。Document-Oriented数据库并没有固定的模式,所以我们可以使用它储存不同的信息。
    2) 分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。

  2. 不适用场景
    在不同的文档上添加事务。Document-Oriented数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。

 

  图数据库
  数据模型:节点和关系,也可处理键值对
  图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。
  最常见的例子,就是社会网络中人与人之间的关系。关系型数据库用于存储关系型数据的效果并不好,
  其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。

  产品:Neo4J、Infinite Graph、OrientDB

  有谁在使用:Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J)、Twitter(FlockDB)、美国国防部和中情局(InfiniteGraph)

  1. 适用的场景
    1) 在一些关系性强的数据中
    2) 推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定

  2. 不适用场景
    不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。

 

  Key-Value数据库
  数据模型:键值对
  键值数据库就像在传统语言中使用的哈希表。你可以通过key来添加、查询或者删除数据,鉴于使用主键访问,所以会获得不错的性能及扩展性。

  产品:Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort

  有谁在使用:GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached)

  1. 适用的场景
    储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。

  2. 不适用场景
    1) 取代通过键查询,而是通过值来查询。Key-Value数据库中根本没有通过值查询的途径。
    2) 需要储存数据之间的关系。在Key-Value数据库中不能通过两个或以上的键来关联数据。
    3) 事务的支持。在Key-Value数据库中故障产生时不可以进行回滚。

 

  BigTable类型数据库(列式数据库)
  数据模型:列簇,每一行在理论上都是不同的
  列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个Person类,
  我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。

  产品:Cassandra、Hbase

  有谁在使用:Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase)

  1. 适用的场景
    1) 日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。
    2) 博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。

  2. 不适用场景
    1) 如果我们需要ACID事务。Vassandra就不支持事务。
    2) 原型设计。如果我们分析Cassandra的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。
  在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。

 

D、看成本(商业 VS 开源)

商业数据库:付费使用,功能更强大一点,支持好,维护成本相对低一点
开源数据库:免费使用,功能有所牺牲,维护支持的成本相对高一点

 

数据库参数对比

 

3 常见的数据库

A、Oracle

  基本情况:Oracle前身叫SDL,由Larry Ellison和另两个编程人员在1977年创办,Oracle公司是最早开发关系型数据库的厂商之一,目前是数据库市场占有率第一的厂商。
  优点:牛逼公司的牛逼产品,几十年技术积累,可靠、安全、性能高 ……
  缺点:对硬件的要求很高,价格比较昂贵,管理维护麻烦,操作复杂,需要技术含量较高
  适用场景:各行各业都有应用,全球500强中有三分之二的企业使用Oracle

 

B、Mysql

  基本情况:开源、传统关系型数据库、快速的、多线程、多用户和健壮的SQL数据库服务器,瑞典的MYSQL AB公司开发,2008年被Sun公司收购,2010年Oracle公司以74亿美元收购了Sun公司
  特点:优秀的开源产品,成熟,门槛低,有丰富的资料可以查阅,体积小,开放源码,可运行在Windows平台和大多数的Linux平台上,快速,轻量级,易于扩展,免费,跨平台
  适用场景:广泛的应用在Internet上的中小型网站中
LAMP(Linux+Apache+Mysql+Php)

 

C、Microsoft SQL Server

  基本情况:微软开发的大型关系型数据库,1987年,微软与IBM合作开发完成OS/2,IBM在其销售的OS/2 Extended Edition系统中绑定了OS/2 Database Manager,而微软产品线尚缺数据库产品,于是,微软将目光投向Sybase,同Sybase签订了合作协议,使用Sybase技术开发基于OS/2系统的关系型数据库,1989年年,微软发不了SQL Server 1.0版。后来,微软与Sybase分道扬镳后,在其6.05和7.0版本中重写了核心数据库系统。
  优点:牛逼公司的产品,安全性和可用性高,性能快……
  缺点:只能在微软的Windows平台运行,开放性差……
  适用场景:主机操作系统为Windows,主要用于web网站的建设,承载中小型web后台数据

 

D、MongoDB

  基本情况:MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的 。2007年10月,MongoDB由10gen团队发展,2009年首度推出;2012年5月,MongoDB 2.1开发分支发布,该版本采用了全新架构;目前,已经发展到3.4版了。
  优点:NoSQL数据库的优点,高扩展性等…
  缺点:NoSQL数据库的缺点,不支持复杂查询
  适用场景:适合存大尺寸、低价值的数据,高伸缩性的场景,不适合高度事务性的系统,如银行或会计系统等

 

E、Redis

  基本情况:2008年,意大利一家创业公司Merzia推出一款基于MySQL的网站实时统计系统LLOOGG,然而产品上线没多久,该公司的创始人Salvatore Sanfilippo就对MySQL的性能非常不满意,于是亲自操刀开发一款为LLOOGG量身定制的数据库,也就是Redis的雏形。 LLOOGG.com是一个访客信息追踪网站,网站可以通过 JavaScript 脚本,将访客的 IP 地址,所属国家,浏览器信息,被访问页面的地址等数据传送给LLOOGG.com。然后LLOOGG.com会将这些浏览数据通过web页面实时地展示给用户,并储存起最新的5至10000条浏览记录以便进行查阅。如下图所示 :

                             
随着LLOOGG.com的用户越来越多,LLOOGG为每个网站维护的浏览记录列表变得越来越多,执行的插入和弹出操作也越来越多,由于当时使用的数据库是MySQL,过度频繁的磁盘I/O操作严重影响着系统的性能,这使得Salvatore Sanfilippo萌生出开发一款列表结构的内存型数据库的想法。
  优点:高速读写,拥有非常丰富的数据结构,且这些数据结构的常见操作均是原子性的
  缺点:耗内存,持久化
  适用场景:常用作缓存,配合其他数据库一起使用

 

posted @ 2017-03-21 20:00  我是疯子杨  阅读(575)  评论(0编辑  收藏  举报