Nosql笔记(一)——关系型数据库回顾
在平常的商业应用中,我们所使用的大多都是关系型数据库,诸如SQL Server、 MY SQL、 Oracle等。
关于关系型数据库中的关键技术:
- 存储引擎
根据存储类型可以把关系型数据库分为行式数据库、列式数据库、内存数据库。
行式数据库就如现在比较常用的Oracle数据库、MySQL数据库等。他们的存储按行存储的,顾被称为行式数据库,亦被称为对象-关系型数据库。列式数据库是在最近发展比较迅速的一类数据库,譬如MongoDB、Cassandra。它们在以列来存储数据,其索引和数据存放在一起,可以压缩数据,能直接读取到某一列的数据,便于做分布式存储。如果我们把数据放到内存中直接操作的数据库叫做内存数据库。
- 索引设计
所谓索引,就是一种结构,它存在的目的就是为了提升数据库的查询速度,现在市场上比较流行的数据库中的索引都是使用的B+数索引(如下图),或者是它的变种来实现。如果要查询某一行记录,在没有索引的情况下,则需要对全变进行扫描,当数据量较大的时候,则需要耗费很大的内存资源,而且还需要很长的时间,严重影响执行效率,在建立索引后,则可以通过关键字(索引)实现快速的定位和查询,大大的提升了效率。
- SQL优化器
SQL优化器是数据库厂商的核心竞争力。它的出现就是为了提升SQL的执行效率。例如我在做级联查询时,内联查询时,我们可以写出很多种SQL,但是你不能保证每次写的SQL都是最高效率的,这时,SQL优化器会优化你的SQL,然后在执行。
- 事务管理与并发控制
对于关系型数据库,为了保证数据的一致性,我们需要对其进行事务控制。举个简单的例子,张三在对李四进行转账操作,金额为100元,在数据库中,首先我们会从张三的账户上扣掉100元,然后再往李四的账户上加上100元,这两步操作必须保证一致,即要么都成功,要么都失败——这就是事务控制。
那么什么是并发控制呢?如果两个人同时操作一个数据,这时就涉及到并发的问题,到底是谁先操作呢?在大部分数据库中都就有“加锁”的功能,譬如Oracle中的“表级锁”、“行级锁”,即在对数据进行修改时将整个表加锁或者是整行加锁,等修改完后再释放锁,以实现对数据的并发控制,避免脏读和误操作。
- 容灾与恢复技术
例如,通过数据的备份进行数据校验、恢复数据等。(不是很了解,欢迎补充)
那么关系型数据库有哪些弱点呢?
- 很难进行分布式部署,I/O瓶颈显著。依赖于强大的服务器,需要花更大代价才可以突
破性能极限。
假设现有一个很大的数据库,A表的部分数据存储在一台服务器上,B表的部分数据存储在另一台服务器上,现在要对两张表做内联查询,其效率可想而知……
- 难以处理非结构化数据。
譬如说,我想做一个做在线调查的网站,不同的调查表有不同的结构,所以在预先设计时无法确认列,这样不便于做索引,当调查表多了,则其效率会明显降低。
以上还有很多漏掉的地方,譬如ACDI等其他原理性的东西,欢迎补充。下期内容:NoSQL简介。