我所学的数据库中有关系型数据库sqlite,SQLServer和MySQL,NoSql数据库Redis和MongoDB
关系型数据库
关系型数据库是建立在关系模型基础上的数据库,借助于集合袋鼠等数据概念和方法来处理数据库中的数据。
特点如下:
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
主要讲MySQL,Mysql是最流行的关系型数据库,在web应用方面试最好的RDBMS应用软件之一,MySQL是一种关联数据库管理系统,关联数据库将数据库保存在不同的表中,而不是将所有的数据放在一个大仓库内,这样就增加了速度并提升了灵活性。
mysql的优势:
- MySQL是开源的,不需要支付额外的费用
- MySQL支持大型的数据库。可以处理拥有千万条记录的大型数据库
- MySQL使用标准的sql数据语言形式
- MySQL可以允许于多个系统上,并且支持多种语言
- MySQL是可以定制的,采用了GPL协议,可修改源码来开发自己的MySQL系统
Nosql数据库
即“不仅仅是SQL”在现在的计算机系统上每天网络上都会产生庞大的数据量
这些数据有很大一部分是由关系型数据库管理系统来处理,通过实践证明,关系型模型是非常适合于客户服务器编程,远远超出预期的收益,今天它是结构化数据存储在网络和商务应用的主导技术。
Nosql是一项全新的数据库革命性运动,早期就有人提出,Nosql的拥护者们提供运用非关系型数据库的存储结构,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
Nosql用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可进行横向扩展
优点:
- 高扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点:- 没有标准化- 有限的查询功能(到目前为止)- 最终一致是不直观的程序
CAP理论的核心是: 一个分布式系统不可能很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个
redis 键值型数据库
redis是完全开源免费的,遵从BSD协议,是一个高性能的Key-Value数据库。Redis与其他key-value缓存产品有以下特点:
- redis支持数据的持久化,可以将内存中数据保存在磁盘中,重启的时候可以再次加载进行使用
- redis不仅仅支持简单的key-value类型的数据,同时还提供list,hash,set,zset等数据结构的存储。
- redis支持数据的备份,即master-slave模式的数据备份
优势:
- 性能极高-redis能读的速度是110000次/s,写的速度是81000/s
- 丰富的数据类型
- 原子-redis的所有操作都是有原子性的,意思就是要么成功执行要么失败完全不执行,单个操作是原子性的,多个操作也支持事务,即原子性,通过UTML和EXEC指令包起来
- 丰富的特性,redis还支持片publish/subpublish,通知,key过期等等特性。
MongoDB
MongoDB是一个基于分布式文件存储的数据库。有c++语言编写,旨在为web应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中功能最丰富,最像关系型数据库的。
主要特点:
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任务属性的索引来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性
- 如果负载的增加(需要更多的存储空间和更强的处理能力),他可以分布在计算机网络中的其他节点上就是所谓的分片。
- mongoDB支持丰富的查询表达式。查询指令使用json形式的标记,可轻易查询文档中内嵌的对象及数组
- MongoDB使用updata()命令可以实现替换完成的文档(数据)或者一些指定的数据字段
- MongoDB中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce, Map函数是调用emit(key,value)遍历集合中所有的记录,将key与value传给reduce函数进行处理
- map函数和reduce函数使用JavaScript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件
- MongoDB允许在服务端执行脚本。可以用JavaScript编写某个函数,直接在服务端执行,也可以把函数存储在服务端,下次直接调用即可