最近在研究ES的同时,有如下问题
- 数据存储发展历史
- 关系型和非关系型对比
- 非关系型数据库是否支持事物
下面对以上问题进行展开
数据存储发展历史
TimeLine
数据管理是数据库的核心任务,分类、组织、编码、储存、检索和维护
- 人工管理阶段
- 没有对数据进行管理的软件系统
- 没有文件的概念
- 一组数据对应于一个程序,数据是面向应用的
- 数据不保存
- 文件系统阶段
- 数据需要长期保存在外存上供反复使用
- 程序之间有了一定的独立性
- 文件的形式已经多样化
- 数据的存取基本上以记录为单位
- 数据库系统阶段
- 采用复杂的结构化的数据模型
- 较高的数据独立性
- 最低的冗余度
- 数据控制功能
数据模型是数据库系统的核心
- 第一代: 层次和网状数据库管理系统
- 第二代: 关系数据库管理系统(RDBMS)
- 第三代:
- 面向对象的方法和技术,例如建立对象关系(OR)模型和建立对象关系数据库(ORDB)
- 数据库技术与多学科技术的有机结合: 例如分布式数据库、并行数据库、演绎数据库、知识库、多媒体库、移动数据库等
- 面向专门应用领域的数据库技术: 例如工程数据库、统计数据库、科学数据库、空间数据库、地理数据库、Web数据库
关系和非关系型对比
| 对比 | Relational | Non-Relational |
|---|---|---|
| 定义 | 采用了关系模型来组织数据的数据库 | 非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统 |
| 优点 | 容易理解 | 仅需要根据id取出相应的value就可以完成查询 |
| 使用方便 | 适用于SNS(Social Networking Services),数据结构巨大变动 | |
| 易于维护 | 非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合 | |
| 问题 | 硬盘I/O瓶颈 | 只适合存储一些较为简单的数据 |
| 海量数据效率低下 | 不适合持久存储海量数据 | |
| web的结构中难以横向扩展,需要停机和数据迁移 | 不适合较复杂查询的数据 | |
| 格式化的数据结构,多表关联查询性能欠佳 | ||
| 事务 | 必须具备ACID特性 | 不支持 |
| 成本 | 相比较高且复杂 | 简单易部署,较低 |
| 查询速度 | 较慢 | 数据存储于缓存之中,而且不需要经过SQL层的解析,较快 |
| 存储数据的格式 | 只支持基础类型 | key,value形式、文档形式、图片形式等等,基础类型以及对象或者是集合等各种格式 |
| 扩展性 | 扩展很艰难 | 数据之间没有耦合性,所以非常容易水平扩展 |
| 持久存储 | 海量数据的持久存储,还是需要关系型数据库 | 不适用于持久存储 |
| 数据一致性 | 强一致性 | 数据最终一致性,有可能有中间态的数据 |
| 主流系统 | Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP | 面向高性能并发读写的key-value数据库:主流代表为Redis, Amazon DynamoDB, Memcached,Microsoft Azure Cosmos DB和Hazelcast |
| 面向海量数据访问的面向文档数据库:主流代表为MongoDB,Amazon DynamoDB,Couchbase,Microsoft Azure Cosmos DB和CouchDB | ||
| 面向搜索数据内容的搜索引擎:主流代表为Elasticsearch,Splunk,Solr,MarkLogic和Sphinx | ||
| 面向可扩展性的分布式数据库:主流代表为Cassandra,HBase,Microsoft Azure Cosmos DB,Datastax Enterprise和Accumulo |
非关系型数据库是否支持事物
可扩展系统是可以支持高性能分布式原子事务的
- 在公平性、隔离性和吞吐量(FIT)三者之间进行取舍,一个支持分布式原子事务的可扩展数据库至少可以实现上述三个属性中的两个
- 公平性: 任何事务的执行都不会因为其它事务被故意延迟
- 隔离性: 确保相互冲突的事务可以看到其它事务的写入操作
FIT三者之间的取舍可以产生三种支持分布式原子事务的方案:
- 保证公平性和隔离性(FI),牺牲吞吐量
- 保证公平性和吞吐量(FT),牺牲隔离性
- 保证隔离性和吞吐量(IT),牺牲公平性
放弃隔离性或者放弃公平性都可以构建出具备高分布式事务吞吐量的可扩展系统
参考: