数据库选型

1. Oracle
2.MYSQL
3. MongoDB
4. Redis
5.HBase
6. Elasticsearch
7.Hive
8.Hadoop
9.ssdb
10.pika
11.sqllite
12.Memcache
13.Sybase提供ASE内存数据库

数据库分类一:

1.内存关系数据库
TimesTen/Altibase
2.传统事物处理
Oracle/DB2/SqlServer
3.数据仓库/MMP
DB2 DPF/GreenPlum/GBase
Vertica
Teradata(商业)
Greenplum (开源)
4.内存KV数据库
Memcache/redis
5.内存数据分析
DB2 BLU/HANA
6.海量数据管理
HBase/MongoDB/SquoiaDB
7.流计算/内存计算
Stream/Storm/Spark

NoSQL数据库分类二:

1.键值(Key-Value)数据库
  • 描述:
    键值数据库就像在传统语言中使用的哈希表。你可以通过 key 来添加、查询或者删除数据,鉴于使用主键访问,所以会获得不错的性能及扩展性。
  • 代表:
    Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort
  • 适用场景:
    储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和 ID(键)挂钩,这种情景下键值数据库是个很好的选择。
  • 不适用场景:
  1. 取代通过键查询,而是通过值来查询。Key-Value 数据库中根本没有通过值查询的途径。
  2. 需要储存数据之间的关系。在 Key-Value 数据库中不能通过两个或以上的键来关联数据。
  3. 事务的支持。在 Key-Value 数据库中故障产生时不可以进行回滚。
2.面向文档(Document-Oriented)数据库
  • 描述:
    面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用 XML、JSON 或者 JSONB 等多种形式存储。
  • 代表:
    MongoDB、CouchDB、RavenDB
  • 适用场景:
  1. 日志。企业环境下,每个应用程序都有不同的日志信息。Document-Oriented 数据库并没有固定的模式,所以我们可以使用它储存不同的信息。
  2. 分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。
  • 不适用场景:
  1. 在不同的文档上添加事务。Document-Oriented 数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。
3.列存储(Wide Column Store/Column-Family)数据库
  • 描述:
    列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个 Person 类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
  • 代表:
    Cassandra、HBase
  • 适用场景:
  1. 日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。
  2. 博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。
  • 不适用场景:
  1. 如果我们需要 ACID 事务。Vassandra 就不支持事务。
  2. 原型设计。如果我们分析Cassandra 的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。
4.图(Graph-Oriented)数据库
  • 描述:
    图数据库允许我们将数据以图的方式储存。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve Jobs、Apple 和 Next,则会有两个“Founded by”的边将 Apple 和 Next 连接到 Steve Jobs。
  • 代表:
    Neo4J、Infinite Graph、OrientDB
  • 适用场景:
  1. 在一些关系性强的数据中
  2. 推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定
  • 不适用场景:
  1. 不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。

数据仓库

  1. 企业建立数据仓库存储/归档所有历史数据,以及他们认为需要放在数据库中的数据,通常,非规范化的数据进入数据仓库,多维度为OLAP和商业智能(BI)解决方案提供快速检索。
  2. 数据仓库也用于新的或增强的业务战略回溯测试,此外,数据仓库中的数据是呈指数增长而非线性增长的。

基于列的关系数据库优势

  1. 基于列的关系数据库具有很大的优势,因为它天生就是多维的,每一列都是自我索引的(B tree)。
  2. 典型的基于列的数据库有Google的Big Table,Sybase IQ,Vertica和基于MySQL构建的KickFire。
  3. 平均而言,这些基于列的数据库比传统的基于行的关系数据库(如Oracle,SQL Server,Sybase ASE,TeraData,DB2和MySQL)在数据检索速度上要快60到100倍,但在基于行级进行数据更新时它们的速度较慢,到目前为止,Sybase IQ似乎是这一领域的领头羊,号称世界上最大的数据仓库(超过1P字节)就是用的Sybase IQ。
  4. 总体而言,基于行的关系数据(SQL Server,Oracle,Informix,DB2/UDB,MySQL,Sybase ASE等)适合OLTP应用,而基于列的关系数据库(Sybase IQ,KickFire,Vertica等)更适合OLAP/DSS和数据仓库应用。
  5. 注意:那些时间序列数据库如OneTick,kdb+和Vhayu都不能算是关系数据库,它们的存储结构是基于文件的,每一列的数据都使用一个单独的文件存储,基本上算是基于列的数据库,基于列的数据库也可用于回溯测试。此外,基于行的数据仓库(立方体)中的数据是呈指数级增长,但基于列的数据仓库中的数据是呈线性增长的。
  6. 传统上,Oracle在数据仓库领域处于领先的优势,但现在在基于列的关系数据库(如Sybase IQ,Vertica和KickFire)面前已经失去优势,Google正在使用的Big Table也是一种基于列的数据库/存储系统。

Hadoop+Hive

这样的组合:PG(TB级数据)、GP(百TB级数据)、Hadoop(PB级以上数据)的组合。

sql查询引擎

Impala
Presto
Drill
Shark —>Spark sql

OLAP服务器

Mondrian

报表展示工具
  1. JasperReports,一个优秀的Java报表工具,始于2001,现在JasperSoft公司持续开发和支持该工具。该工具类似于商业软件Crystal Report,支持PDF、HTML、XLS、CSV和XML文件输出格式,现在是Java开发者最常用的报表工具。
  2. OpenReports,提供基于web的灵活报表解决方案,通过浏览器自动生成动态PDF,XLS,HTMLCSV 和Chart报表,它是用Java开发的,使用JasperReports 作为报表引擎,利用到的开源技术有Hibernate,Veloctiy,Webwork。
  3. JFreeReport,现在是Pentaho的一部分,它是一个优秀的用来生成报表的Java类库。它为Java应用程序提供一个灵活的打印 功能并支持输出到打印机和PDF, Excel, HTML和XHTML, PlainText, XML和CSV文件中。
    Eclipse BIRT,是Eclipse下面的一个企业智能和报表 工具,能为J2EE的WEB应用程序创建漂亮醒目的PDF或者HTML格式的报表,它提供了核心的报表功能。
  4. Jpivot(一般与Mondrian配合使用)
BI可视化分析工具(BI一般都集成了OLAP服务器和报表展示工具)

SpotView
FineBI(国内)
Z-Suite(国内)
SmartBI(国内)
Power-BI(国内)
QuickBI(国内阿里)
QlikView
SpagoBI(集成了Mondrain和JProvit)
Pentaho
Tableau
Openi
Openi是轻量级的。Openi的技术文档非常少,而且完全不支持中文,所以暂不采用。SpagoBI和Pentaho使用的开源技术很类似,技术都比较强大,属于重量级的开发工具。但是SpagoBI中文支持不太好。Pentaho的中文文档多,国际化做的比较好。所以选用Pentaho作为研究的开源数据仓库工具。

其他公司的选型方案

唯品会 Hadoop+Hive + Presto
阿里 oracle —> Greenplum —> Hadoop+Hive —>飞天

存储引擎

  • 1.1 Hash Table
    1.1.1 dbm (database manager)
  • 1.2 btree
    1.2.1 berkerlydb
  • 1.3 LSM
    1.3.1 LevelDB,
    1.3.2 RocksDB,
    1.3.3GoLevelDB,
    1.3.4gorocksdb,
    1.3.5 levigo,
    1.3.6 mongo-rocks,
  • 1.4 LSH
    1.4.1 bitcask
  • 1.5 FractalTre
    1.5.1 PerconaFT
  • 1.6 dbm系列
    1.6.1 QDBM (Quick DataBase Manager)
    1.6.2 ndbm (New Database Manager)
    1.6.3 SDBM (Substitute Database Manager)
    1.6.4 GDBM (GNU Database Manager)
    1.6.5 tdb (Trivial Database)
    1.6.6 CDB
    1.6.7 TinyCDB
  • 1.7 双类型
    1.7.1 Wiredtiger (btree, LSM)
    1.7.2 Tokyo Cabinet and Kyoto Cabinet (B+tree,hash table)
    1.7.3 RaptorDB key value store (B+ 树 或者 MurMur 哈希索引)
  • 1.8 SQL引擎类
    1.8.1 InnoDB
  • 1.9 document类
    1.9.1 RaptorDB document store

2 嵌入式

2.1 SQLite
2.2 UnQLite

3 单机存储

  • 3.1 单值KV存储
    3.1.1 Memcache
    3.1.2 nmdb
    3.1.3 Memcachedb
    3.1.4 Kyoto Tycoon
    3.1.5 ThruDB
  • 3.2 结构化KV存储
    3.2.1 Redis
    3.2.2 ssdb
    3.2.3 ssdb-rocks
    3.3.4 ardb
    3.2.5 (reborndb)QDB
    3.2.6 Pika
    3.2.7 LedisDB
  • 3.3 文档型
    3.3.1 SisoDB
  • 3.4 SQL
    3.4.1 MySQL
    3.4.2 innostore

4 单机存储的proxy集群方案

  • 4.1 KV/Redis类
    4.1.1 Twenproxy
    4.1.2 Reborndb
    4.1.3 Codis
    4.1.4 Netflix Dynomite
    4.1.5 dbcached
  • 4.2 SQL类
    4.2.1 Mycat
    4.2.2 MySQL Fabric
    4.2.3 TDDL
    4.2.4 Cobar
    4.2.5 Atlas
    4.2.6 Heisenberg
    4.2.7 Vitess

5 KV存储

5.1 riak
5.2 beandb
5.3 Project Voldemort
5.4 Scalaris
5.5 Aeospike
5.6 Tair
5.7 dynomite

6 文档型存储

6.1 MongoDB
6.2 CouchDB
6.3 Membase / Couchbase
6.4 SequoiaDB
6.5 RavenDB
6.6 OrientDB
6.7 RethinkDB

7 列式存储

7.1 HBase
7.2 Cassandra
7.3 Accumulo
7.4 Hypertable
7.5 Scylla

8 NewSQL

8.1 Actordb
8.2 Cockroachdb
8.3 FoundationDB
8.4 Oceanbase
8.5 SnappyData
8.6 TiDB

9 图数据库

9.1 Neo4j
9.2 Infinite Graph

10 File存储

10.1 Ceph
10.2 FastDFS
10.3 HDFS
10.4 MogileFs
10.5 MooseFS
10.6 TFS
10.7 GlusterFS
10.8 kosmosfs

11 In-Memory 存储

11.1 Redis cluster
11.2 Mysql cluster
11.3 Gemfire/Gemde
11.4 VoltDB

12 私有存储

  • 12.1 Amazon
    12.1.1 Amazon Dynamo
  • 12.2 Google
    12.2.1 BigTable
    12.2.2 F1
    12.2.3 Spanner
    12.2.4 Megastore
  • 12.3 Baidu
    12.3.1 Baidu Mola
    12.3.2 Baidu BDRP
    12.3.3 Baidu DDBS
  • 12.4 腾讯
    12.4.1 腾讯CKV
    12.4.2 QuorumKV
  • 12.6 京东
    12.6.1 京东JIMDB
  • 12.7 滴滴
    12.7.1 滴滴Rockstable
  • 12.8 美团
    12.8.1 Cellar
  • 12.9 360
    12.9.1 360 Bada
    1.9.2 HustStore

13 云产品

  • 13.1 Amazon DynamoDB
    13.2 AWS Aurora
  • 2.3 Google云
  • 2.4 阿里云
  • 2.5 美团云

参考文献:

  1. 三大主流开源 NoSQL 数据库的 PK 两大主流传统 SQL 数据库
  2. 如何选择数据库
  3. key / value 数据库的选型
  4. 数据仓库方案选型
  5. 为什么是PostgreSQL?
  6. 存储系统的分类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容