经典案例
数据产生
我们打开一个全新APP应用时,按下注册按钮后,一条数据就产生了,并且向后端服务器飞奔而去。
数据流动
数据持久化
以寿命&性能更加友好的方式写入硬盘中
潜在问题
存储&数据库简介
存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件。
系统特点
- 性能敏感,后端软件的底座
- 存储系统软件架构,容易受硬件影响
- 存储系统代码,既简单又复杂
数据从应用到存储介质步骤:
- 将数据从主存储器中传输到存储介质中。
- 选择特定的媒介,并将数据写入媒介中。
- 存储介质记录数据,对存储位置进行标记。
- 当需要从存储介质中读取数据时,将数据从存储介质读取到主存储器中。
缓存:贯穿整个存储体系
拷贝:很昂贵,应该尽量减少
硬件设备五花八门。需要有抽象统一的接入层。
RAID
RAID(Redundant Array of Independent Disks)是一种磁盘阵列技术,通过将多个独立的磁盘组合在一起,形成一个具有冗余能力的磁盘阵列。这种技术可以增加数据存储的可靠性和性能。
RAID技术是由美国加州大学伯克利分校的David Patterson教授等人于1988年提出的。根据不同的冗余方式和磁盘组合方式,RAID可以分为不同的等级,包括RAID 0、RAID 1、RAID 2、RAID 3、RAID 4、RAID 5、RAID 6、RAID 7等。
其中,常用的RAID等级包括:
- RAID 0:条带化(Striping),将数据分成多个部分并分布在多个磁盘上,可以增加读写速度,但冗余能力较低。
- RAID 1:镜像(Mirroring),将数据同时写入两个或多个磁盘,可以增加数据可靠性,但磁盘利用率较低。
- RAID 5:分布式奇偶校验(Distributed Parity),将数据分布在多个磁盘上,同时使用一个额外的磁盘保存奇偶校验信息,可以增加冗余能力和读写性能,但性能受到校验磁盘的限制。
- RAID 6:双重分布式奇偶校验(Dual Distributed Parity),与RAID 5类似,但使用两个额外的磁盘保存奇偶校验信息,可以增加冗余能力,但性能受到两个校验磁盘的限制。
除了这些常用的RAID等级,还有其他等级和变种,可以根据不同的应用场景和需求进行选择和组合。
关系型数据库
关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等概念和方法来处理数据的存储、检索、更新等操作。其主要特点包括:数据以表格形式存储,每行表示一个数据实体,每列表示一个数据属性,没有重复的数据,可以大大减少数据的冗余。此外,关系型数据库还支持事务处理,保证数据的一致性和完整性。
关系型数据库的典型应用场景包括:金融系统、人事管理、商品销售、各类计费系统等。其主流产品包括Oracle、DB2、SQL Server、Sybase、MySQL等。
关系型数据库可以通过二维表来描述实体之间的关系,每张表都包含一些行和列,其中行表示数据的记录,列表示数据的属性。每张表都有一个唯一的主键用来唯一标识表中的每一个记录。关系型数据库通过各种SQL语句来查询和处理数据。
此外,关系型数据库还可以使用SQL语言进行各种操作,包括插入、删除、更新数据,以及查询数据等。SQL语言是一种强大的关系型数据库查询语言,可以用来处理各种复杂的数据操作。
非关系型数据库
非关系型数据库(NoSQL)是指那些非关系型的数据存储系统,这些系统通常使用键值对、文档、宽列存储、图结构等方式来存储数据,不遵循传统的SQL关系型数据库的ACID原则。
随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
常见的NoSQL数据库包括:MongoDB、Cassandra、CouchDB、Redis、Riak、Memcached等。这些数据库通常具有以下特点:
- 弹性可扩展:NoSQL数据库的扩展性非常出色,可以轻松地通过添加更多的机器来扩展系统的容量。
- 高可用性:NoSQL数据库通常具有高可用性,可以在多台机器之间进行数据复制和故障恢复。
- 面向数据:NoSQL数据库的设计更多地面向数据,这意味着它们可以轻松地存储和检索大量的数据。
- 灵活性:NoSQL数据库的灵活性非常出色,可以轻松地处理各种复杂的数据模型。
- 实时性:NoSQL数据库的实时性也非常出色,可以满足各种实时应用的需求。
然而,NoSQL数据库也有其自身的局限性,例如可能不支持SQL查询、可能存在性能问题等。因此,在实际应用中,需要根据具体的需求和场景来选择合适的数据库类型。
数据库与经典存储的区别
- 结构化数据管理
- 事务能力:
-
- A 事务内的操作,要么全做,要么不做
- C 事务执行前后,数据状态是一致的
- I 可以隔离多个并发事务,避免影响
- D 事务一旦提交成功,数据保证持久性
- 复杂查询能力:灵活简洁
- 数据库的使用方式:sql 语言