最近看到H5、H2、HBase的,以为有啥关联,后来知道H5->HTML5(很多人在吐槽这个缩写), H2 -> 一个内存数据库, HBase是一个分布式的、面向列的开源数据库。
-。-
原谅我着急的智商,以我对数据库的了(shui)解(ping),我之前根本不知道”基于行“与”面向列“这样的概念。。只知道SELECT\UPDATE\DELETE...
好吧,好好搜搜,找到这么一篇(H2与HBase)面向行or面向列的存储模型?
数据库的内部结构不敢多谈,因为不清楚。-。- 大体上是采用了B-Tree或其变种(B* Tree, LSM-Tree等)来组织数据方便查询也减少磁盘IO次数。
数据在磁盘上按块存放,这每一块里面的内容及格式决定了是”基于行“还是”面向列“的。
基于行:
数据库表的每一行,都是一条独立的数据,这样一行,如果存储在磁盘上的一块区域内,通过标记哪一列是什么值来存储。比如:
列1:12312列2:2222列3:333 (不要在意如何区分列等细节,总之放一块就行,因为我也不知道0.0)
面向列:
没有那么死板的表~列的数目可以随意(理论上)~
在磁盘上存储的时候,也是一块一块滴(要不呢。。)~但是这一块里面存的是同样类型的数据~
假如有两条数据: 数据为两个学生,有姓名,身高和年龄三个字段。
小明 172 14
小张 (木有) 20
那么,在面向列的数据库里面,(应该)是这样的:
key type value 等等
rowId1 姓名 小明
rowId1 年龄 14
rowId1 身高 172
rowId2 姓名 小张
rowId2 年龄 20
属于同一条数据的rowId都是一样的,用来关联~
查询效率我不太了解,但是应该可以猜到,面向列的可以利用分布式的优势来提高查询速度。
比如当数据量比较大的时候,可以通过rowId分为几组,分布到不同的机器上。当查询为”小明“时,多个机器都并行找~找到rowId后,再拿别的内容就快了~
好吧,只是表达一下自己的想法以及自己个人对面向列的了解,最好还是看一下上面我参考的那篇~
权当我在扯淡~欢迎批评指出~
知识不够用,打算再补一下数据库知识~-。-