海量存储系列之三

http://aliapp.blog.51cto.com/blog/8192229/1325427上一篇html

首先是回答上次的问题。224805577.jpg面试

假设有这么一组数据,性别有4种,user_id是一对多的关系,若是我想查询数据库

select*fromtabwhereuser_idin(?,?,?,?)and性别=’不明’app

如何进行索引构建可以得到比较好的效果呢?ide

我我的认为,应该创建的是以user_id做为前导列,性别做为辅助列的索引,在大量单值查询时会有优点。设计

理由以下htm

1.假定总数据量为N,user_id的区分度为N/10000而性别的区分度为N/4blog

那么若是以user_id做为前导列,性别做为后列,那么查询的复杂度为O(logN+log(N/10000))。也就是说,第一次二分查找以后,下一次是在第一次的二分查找的基础上再去查找。而若是以性别做为前导,user_id做为后列,那么复杂度为索引

O(logN+log(N/4));事务

效率略差。

而后进入本次正题。上次介绍了关系模型,那么此次咱们来介绍一下事务。

在一切以前,我想先给本身解嘲一下。。事务我本身也没有办法彻底融汇贯通,由于每个小的选择,都会致使效果的彻底不一样,因此有错请在后面一块儿探讨。

那么咱们在这里,主要以单机事务做为入手点,而后阐述一下多机事务相关的知识点。我在这里只是想作一个引导,让你们可以对整个的知识体系有一个基本的认识,对于细节问题,会给出一些资料,而不会直接去进行讲解,由于篇幅所限.

通常来讲,咱们一提起事务,就会想到数据库,确实,事务是数据库的最重要的一个属性。但这彷佛不是事务的本源,那么,让咱们从更深层次去对事务进行一次思考吧:

事务,本质来讲就是一组由一我的(或机器)发起的连续的逻辑操做,共同的完成一件事情,在完成整个事情以前,其全部的改动,都不该该对其余人可见和影响。而在事务结束以后,其一切的改动,都必须“所有”“马上”对其余的人(或机器)可见。

而后,人们为了描述这一运做,使用了四个词汇,这也是不少面试的同窗们折戟沉沙之处。J不过这个之前我也不会,后来发现,理解了之后,确实有点用,因此这里也费一些笔墨吧。

原子性(Atomicity):也就是说,一组操做,要不就都成功,要不就都失败。不存在中间状态。

一致性(Consistency):一致性,也就是说,这个事务在提交或回滚的时候,对其余人(或机器)来讲,数据的状态是同一的,不会出现中间的状态。最理想的状态下,就是说,数据提交后,全部的更改马上同时生效,惋惜,在计算机领域,这个作不到。。由于cpu运算,磁盘写入,内存写入,都是要时间的,内部必定是个顺序化的过程,因此不可能作到绝对的马上同时生效。

因此一致性通常来讲指代的是逻辑上的同时生效,好比,我要改A,B两行数据,那么,最简单的一致性保证就是,对A,B加锁,改A,B,而后对A,B解锁。

这样下一我的读到的必定是A,B的最新值啦。

(但这块有不少种解释,通常来讲这是个最不明确的词汇)。

隔离性(Isolation):隔离,这是面试最容易挂的一个问题,其实我认为不怪咱们,而是由于自己这个隔离性,是依托锁来进行设计的。

咱们所知道的锁,主要有如下几种,1.读写锁,2.排他锁

那么这四种级别其实就和这两种锁的实现有关,之因此要定义四个级别,其实缘由也是由于,锁的范围越大,并行效率越低。而范围越小,那么并行的效率就越高。

读未提交:其实就是什么锁也没有,因此数据的中间状态,是可能被其余人读到的。

读已提交:就是读写锁实现,读锁在查询以后会被释放掉,因此这样其余人可能会更改那些被释放了读锁的数据,这样当前事务再去读取的时候,就可能读取到被别人修改过的数据了,因此一我的在事务中读取到的某个数据,可能下次读取就变成别的数据啦。这就是不可重复读的意思。。

可重复读:也是个读写锁实现,读锁会阻塞其余人(或机器)的写,因而,只要是事务中读取到得数据,都被加了锁,其余人没办法改他们,因而就实现了可重复读咯。

最后是序列化,就是全部都顺序,一个大锁所有锁住J

持久性(Durability):持久性就是,事务执行后,就丢不了了,就算是整个中国被淹了,机器都没了,数据也不该该丢掉(不过基本作不到这个,也就是一个机器挂了不会丢数据而已。。)全部机房没了那数据也就没了。。

对于这块,给你们一些参考资料:

http://zh.wikipedia.org/wiki/%E4%BA%8B%E5%8B%99%E9%9A%94%E9%9B%A2

http://www.cnblogs.com/wangiqngpei557/archive/2011/11/19/2255132.html

这些讲的不错,浅显易懂是个人最爱.

好啦,为了保证我写的东西不会被”qing”这个大怪兽再次吃掉。。我先发这些。

在下一个章节,咱们继续在事务这个领域徜徉,给你们介绍一下,在单机上面,事务是如何进行的。

http://aliapp.blog.51cto.com/blog/8192229/1325407下一篇单机事务

相关文章
相关标签/搜索