1.关系型数据库 Relational Database
mysql、oracle、sqlserver
关系型数据库的特点:
1.1 存储方式:表格
1.2 存储结构:先根据字段建立表---再用进行数据存储,好处是:提前定义好了表的字段和类型,所以表的可靠性和稳定性都很高,缺点是:一旦有数据存入后,想修改表结构很困难。
1.3 扩展能力:由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力。
1.4 查询方式:结构化查询语言(即SQL)来对数据库进行查询。
1.5 规范性:ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。
1.6 事务性:关系型数据库强调ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))
原子性:原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
一致性:指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
如A给B转账,不论转账的事务操作是否成功,其两者的存款总额不变(这是业务逻辑的一致性,至于数据库关系约束的完整性就更好理解了)。
隔离性:所谓的隔离性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
持久性:持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
1.7 读写性能:关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的非常厉害。
1.8 授权方式:关系型数据库常见的有 Oracle,SQLServer,DB2,Mysql,除了Mysql大多数的关系型数据库如果要使用都需要支付一笔价格高昂的费用,即使是免费的Mysql性能也受到了诸多的限制
2.非关系型数据库
2.1 redis
Redis是一个key-value存储系统,key为字符串类型,只能通过key对value进行操作,支持的数据类型包括string、list、set、zset(有序集合)和hash。Redis支持主从同步,数据可以从主服务器向任意数量的从服务器上同步。
Redis事务允许一组命令在单一步骤中执行。事务有两个属性:在一个事务中的所有命令作为单个独立的操作顺序执行;Redis事务是原子的,原子意味着要么所有的命令都执行,要么都不执行。Redis 事务由指令 MULTI 发起的,之后传递需要在事务中和整个事务中,最后由 EXEC 命令执行所有命令的列表。
Redis分区,是将数据分割成多个 Redis 实例,使每个实例将只包含键子集的过程.它允许更大的数据库,使用多台计算机的内存总和,它允许按比例在多内核和多个计算机计算,以及网络带宽向多台计算机和网络适配器。劣势:涉及多个键时,Redis事务无法使用;数据处理比较复杂;加和删除的容量可能会很复杂。
分区类型:范围分区;散列分区
Redis 数据库可以配置安全保护的,所以任何客户端在连接执行命令时需要进行身份验证。
2.2 MongodDB
2.3 Hbase
2.4 Neo4j