NoSQL入门学习

来源:互联网 发布:linux jdk版本降级 编辑:程序博客网 时间:2024/06/04 16:21

前段时间简单学习了一下NoSQL的基础入门,对面向列的数据库(columnar database)尤其有兴趣,稍作整理,如下。

普通的关系型数据库(RDBMS)都是以行为单位来存储数据的,擅长进行以行为单位的读入处理,最简单最常见的就是特定条件数据的获取。某一个体(一条记录)的一行数据,会记录和该个体的各项属性值,因此,关系型数据库也被成为面向行的数据库(MySQL, Oracle等);但是,面向列的数据库是以列为单位来存储数据的,擅长以(竖)列为单位读入数据。值得一提的是这里说的“面向行”、“面向列”并不仅仅是想象中的一个二维表格,一个横向,一个纵向。如图

    

这里的行和列是对于存储上来说,上面两个表中的数据,都得由数据库把这个二维表存储到一系列一维的“字节”中,再由操作系统写到内存或硬盘中。


行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,依次类推。

1,张三,男,252,李四,女,263,王五,女,25

列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。

<pre name="code" class="html">
1,2,3张三,李四,王五男,女,女25,26,25

尽管这样看起来可能第一堆数据还能直观的表现出一些意义,但是第二堆数据就显得杂乱五脏了;不过没有关系,这样的一堆不是给我们看的,只要我们的硬盘能识别就OK~ 列式数据库数据的存储是按照列进行的,每一列单独存放,数据即是索引,因此也就很明显在单独查询某一列做筛选时,只访问查询涉及的列,大大降低了系统的I/O,列式数据库便可以更迅速的查询数据,优势也凸显出来。

行式数据库数据按记录存储,如果要查询一条记录的某一个属性值,需要先读取整条记录的数据,没有索引的查询更会耗费大玲的I/O,建索引或聚合表需要花费大量的时间和资源,真遇到这样的需求,数据库必须被大量膨胀才能满足性能要求。


0 0