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(键)挂钩,这种情景下键值数据库是个很好的选择。 - 不适用场景:
- 取代通过键查询,而是通过值来查询。Key-Value 数据库中根本没有通过值查询的途径。
- 需要储存数据之间的关系。在 Key-Value 数据库中不能通过两个或以上的键来关联数据。
- 事务的支持。在 Key-Value 数据库中故障产生时不可以进行回滚。
2.面向文档(Document-Oriented)数据库
- 描述:
面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用 XML、JSON 或者 JSONB 等多种形式存储。 - 代表:
MongoDB、CouchDB、RavenDB - 适用场景:
- 日志。企业环境下,每个应用程序都有不同的日志信息。Document-Oriented 数据库并没有固定的模式,所以我们可以使用它储存不同的信息。
- 分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。
- 不适用场景:
- 在不同的文档上添加事务。Document-Oriented 数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。
3.列存储(Wide Column Store/Column-Family)数据库
- 描述:
列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个 Person 类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。 - 代表:
Cassandra、HBase - 适用场景:
- 日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。
- 博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。
- 不适用场景:
- 如果我们需要 ACID 事务。Vassandra 就不支持事务。
- 原型设计。如果我们分析Cassandra 的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。
4.图(Graph-Oriented)数据库
- 描述:
图数据库允许我们将数据以图的方式储存。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve Jobs、Apple 和 Next,则会有两个“Founded by”的边将 Apple 和 Next 连接到 Steve Jobs。 - 代表:
Neo4J、Infinite Graph、OrientDB - 适用场景:
- 在一些关系性强的数据中
- 推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定
- 不适用场景:
- 不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。
数据仓库
- 企业建立数据仓库存储/归档所有历史数据,以及他们认为需要放在数据库中的数据,通常,非规范化的数据进入数据仓库,多维度为OLAP和商业智能(BI)解决方案提供快速检索。
- 数据仓库也用于新的或增强的业务战略回溯测试,此外,数据仓库中的数据是呈指数增长而非线性增长的。
基于列的关系数据库优势
- 基于列的关系数据库具有很大的优势,因为它天生就是多维的,每一列都是自我索引的(B tree)。
- 典型的基于列的数据库有Google的Big Table,Sybase IQ,Vertica和基于MySQL构建的KickFire。
- 平均而言,这些基于列的数据库比传统的基于行的关系数据库(如Oracle,SQL Server,Sybase ASE,TeraData,DB2和MySQL)在数据检索速度上要快60到100倍,但在基于行级进行数据更新时它们的速度较慢,到目前为止,Sybase IQ似乎是这一领域的领头羊,号称世界上最大的数据仓库(超过1P字节)就是用的Sybase IQ。
- 总体而言,基于行的关系数据(SQL Server,Oracle,Informix,DB2/UDB,MySQL,Sybase ASE等)适合OLTP应用,而基于列的关系数据库(Sybase IQ,KickFire,Vertica等)更适合OLAP/DSS和数据仓库应用。
- 注意:那些时间序列数据库如OneTick,kdb+和Vhayu都不能算是关系数据库,它们的存储结构是基于文件的,每一列的数据都使用一个单独的文件存储,基本上算是基于列的数据库,基于列的数据库也可用于回溯测试。此外,基于行的数据仓库(立方体)中的数据是呈指数级增长,但基于列的数据仓库中的数据是呈线性增长的。
- 传统上,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
报表展示工具
- JasperReports,一个优秀的Java报表工具,始于2001,现在JasperSoft公司持续开发和支持该工具。该工具类似于商业软件Crystal Report,支持PDF、HTML、XLS、CSV和XML文件输出格式,现在是Java开发者最常用的报表工具。
- OpenReports,提供基于web的灵活报表解决方案,通过浏览器自动生成动态PDF,XLS,HTMLCSV 和Chart报表,它是用Java开发的,使用JasperReports 作为报表引擎,利用到的开源技术有Hibernate,Veloctiy,Webwork。
- JFreeReport,现在是Pentaho的一部分,它是一个优秀的用来生成报表的Java类库。它为Java应用程序提供一个灵活的打印 功能并支持输出到打印机和PDF, Excel, HTML和XHTML, PlainText, XML和CSV文件中。
Eclipse BIRT,是Eclipse下面的一个企业智能和报表 工具,能为J2EE的WEB应用程序创建漂亮醒目的PDF或者HTML格式的报表,它提供了核心的报表功能。 - 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 美团云