五大问题: 1.数据库怎么保证数据不丢? 写入磁盘 2.数据库怎么处理多人同时修改的问题? 对操作的方法加锁 3.为什么用数据库,除了数据库还能存到别的存储系统吗?主存 4.数据库只能处理结构化数据吗? 还能处理非结构化数据,例如文字信息 5.有哪些操作数据库的方式,要用什么编程语言?增删改查,要用sql语句 为了保证单机存储系统做到高性能/高性价比/高可靠性,引入了RAID(Redundant Array of Inexpensive Disks),因为有一个事实: 1.单块大容量磁盘的价格>多块小容量磁盘 2.单块磁盘的写入性能<多块磁盘的并发写入性能 3.单块磁盘的容错能力有限,不够安全
目前存在: 1.RAID0:主要是注重速度,高并发条带化存入数据; 2.RAID1:对数据进行备份,提高容错率,但是空间利用率只有百分之五十; 3.RAID0+1:主要结合两方面的优点
关系型数据库中存储的数据是有关系的,按照二维表格的形式来操作数据,并且具有强大的ACID属性。 A:原子性,事务内的操作要么全做,要么全不做 C: 一致性,数据提交之后,数据的状态是一致的,简单的理解就是数据的提交不存在bug I:隔离性,可能存在多个用户对数据库进行操作,因此可能同时存在多个事务,所以要对事务进行隔离,不让多个事务之间产生影响(这也取决与隔离级别) D:持久性,对数据库的某一个事务进行提交之后,数据应是永久性存储在数据库中的,不会失效。 数据库分为单机数据库和分布式数据库,单机数据库分为两大数据结构:Index Node与Direction Entry。Index Node类似于索引节点;Direction Entry类似于改进后的目录项。 单机数据库又分为关系型数据库与非关系型数据库。关系型数据库适合存储结构化的数据,采用表格存储
非关系型数据库主要是以键值对的形式存储信息。比较有名的是MongoDB、Redis、Elasticsearch,对数据操作没有一个统一的准则
Elasticsearch的特点:
1.面向文档存储
2.文档可序列化成JSON,支持嵌套
3.存在【index】,index=文档的集合
4.存储和构造索引能力依赖Lucence引擎
5.实现了大量搜索数据结构&算法
6.逐渐支持SQL
mongoDB的特点(比较灵活、可以存任何数据):
1,面向文档存储
2.可序列化为JSON,支持嵌套
3.存在collection,没有表的概念
4.构造索引依靠wiredTiger(纯c写的)
5.4.0之后开始支持事务
6.常用SDK交互,逐渐支持SQL
redis的特点:
五大数据结构(hash,string,set,zset,list)
c语言实现,超高性能
主要基于内存,但支持AOF/RDB持久化
常用语言提供的SDK进行交互
分布式数据库主要是利用网络来实现对数据库节点的操作,可以解决单机数据库的容量问题、弹性问题、解决性价比问题。
1.容量问题
单点系统的容量有限
引入存储池(动态扩容,数据库不用担心)
2.解决弹性问题
扩容与缩容不方便
存储池可以解决这个问题,感知负载利用网络进行分配节点
3.解决性价比问题
缺啥扩啥(也是用存储池)