海量存储系列之一
2011年11月20日 21:08
海量存储系列之序言
那么 在走进海量存储与检索的世界之前,我们先看一看目前似乎觉得最落伍的数据库系统。丑话先说。。我也没在这个领域沉浸几年,所以其实里面很多的概念也是有可 能模糊的,所以在这里写出来,一是希望我能把以前的积累再次重新的梳理一次,查缺补漏。二也是在这世界留下点记录。。表明我曾经来到过这世界,学到过这些 东西。。
之所以从这里开始,一部分的原因是我本身是从这里开始接触存储这个领域的,另外一部分原因是因为,从我的私心来说,我认为数据库是生产力工具的开始,也将是生产力工具最终的归宿。
一个数据库,我们可以抽象的认为由下面的一个逻辑结构组成,刨除意义不大的视图,存储过程,外键限制等之后,我们就剩下了下面的这张图:
从API来说,也就是SQL,结构化查询语言,这个东东我们后面再去细说,先来看看这个关系代数模型。
之所以要从这里开始,主要的原因是因为,这是最受到关注的一个部分,自大从一开始做分布式数据层开始,被人问得最多的问题就是:1. 切分以后如何做join。2.如何进行分布式事务。。
可惜,现在我也没有一个方法能做到100%让您满意。。因为,没有银弹,只有取舍。
取舍的原则,也就是要根据,1) 你能做什么。2)你需要做什么。3)你能放弃什么。来决定上层系统的整体架构。传统的ACID的关系代数模型,在新的环境中,很难复用。但,原理没有变,做法上可以做微调
不知道各位在想起关系代数的时候,会想到什么?
我给大家一些解释(当然我没仔细看过:)
不爱看上面解释的童鞋们呢,也不用纠结,给大家一些简单的例子。
1. select * from tab where user = ?
这就是最简单的关系代数的例子,我们对他进行抽象来说,其实就是将大量数据中的一小批数据,按照某个要求查出来的过程。
2. select ename,dname from emp,deptwhere emp.deptno=dept.deptno and emp.deptno=30
这是另外一个例子,本质来说就是个∩的操作。
3. select count(*) from tab.
这是关系代数的第二个主要的用处,就是进行统计和计算,这类的函数有个专用的名字,叫做aggragate function.
恩,基本上有这个概念就可以了。
那么这里请联想,你所接触到的什么地方会有碰到有这样的一些计算呢?
数据库?对。不过不是废话么。。
还有就是hadoop的平台也会用到,hive pig.
那么,我们对这类关系代数进行一下简单的概念上的小结。
也就是用于处理数据的一类方法的抽象,最主要的作用是,按照某个条件选出一批数据,然后再进行一些简单的统计计算的功能。如是而已:)
那么,下面就有个疑问了,下层的数据库或存储,是如何进行这类的计算的呢?
那么请看下一个章节。
我们一起探寻一下,处理这类关系代数计算的方法有哪些