面向行与面向列

最近看到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后,再拿别的内容就快了~

好吧,只是表达一下自己的想法以及自己个人对面向列的了解,最好还是看一下上面我参考的那篇~

权当我在扯淡~欢迎批评指出~

知识不够用,打算再补一下数据库知识~-。-

时间: 2024-08-01 06:39:43

面向行与面向列的相关文章

行数据库VS列数据库

一.介绍 目前大数据存储有两种方案可供选择:行存储和列存储.业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全.可靠.完整性.从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局.在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储. 顾名思义,这两种数据库架构在存贮数据时的方式是大相径庭的.在行式数据库中,每一行中的每一块数据都是紧挨着另一块数据存放在硬盘中.一般

面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现) --转载

引言--面向接口所处的设计模式中的位置. 其实,我认为Java/C#比C++高级的其中一个原因是,它对面向接口编程的支持.不要误解,并不是说C++不支持面向接口编程,而是说C++的语法中没有这种天然的机制. 面向对象之于面向过程,面向接口之于面向实现.但基本上,面向接口和面向实现都基于面向对象的模式,也就是说面向接口并不能称为比面向对象的更高的一种编程模式.而是在面向对象中大的背景下的一种更加合理的软件设计模式,它增强了类与类之间,模块与模块的之间的低耦合性,是软件系统更容易维护.扩展. 不管是

第一课 矩阵的行图像与列图像(麻省理工公开课:线性代数)【转载】

转载自:http://blog.csdn.net/a352611/article/details/48602207 仅用于个人笔记. 目录(?)[-] 从方程组到矩阵 row picture 行图像 column picture 列图像 本系列笔记为方便日后自己查阅而写,更多的是个人见解,也算一种学习的复习与总结,望善始善终吧~ 1. 从方程组到矩阵  矩阵的诞生是为了用一种简洁的方式表达线性方程组 个人理解来说就是为了更好的描述和解决 Ax = b 从系统的角度来理解: A 就是我们的系统 x

行存储和列存储

传统的行式数据库将一个个完整的数据行存储在数据页中.这种方式在大数据量查询的时候会出现以下问题 1.在没有索引的情况下,会把一行全部查出来,查询会使用大量IO 2.虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间 但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的. 一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式. 一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只

Oracle 多行变一列的方法

多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat_defaults defaults WHERE defaults.vat_driver = 'VAT_ENT_RGSTRN' AND defaults.vat_driver_key1 = 'AMB19' AND defaults.vat_driver_key2 = 'DEU' AND vat_de

Oracle 多行转多列

Oracle 多行转多列,列值转为列名 前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了,decode才是核心 废话不多说,看图 需求示例图表: 存储过程,嘿嘿: 1 create or replace procedure NAG_QUESTIONERSULT_EXP( 2 V_QID in number, 3 C_Title out sys_r

如何获取ResultSet的行数和列数

当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数.我们知道它的列数可以通过resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口. 这个时候,有三个办法可以解决: 1.改用select count语句,然后直接从ResultSet里面获取结果: try { Statement statement = connectio

html5的行标签与列标签

html5的标签很多,这里不一一列举.下面只将常用的一些html5的行标签和列标签进行了分类总结,方便大家学习借鉴.注意:一些标签可在css样式中进行行标签与列标签的互相转换,这里所列举的标签没有进行任何样式的设置,所有列标签和行标签经本人亲测有效.块标签: <h1>一级标题 <h2>二级标题 <h3>三级标题 <h4>四级标题 <h5>五级标题 <h6>六级标题 <ul>无序列表 <ol>有序列表 <d

c语言:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表. 程序: #include<stdio.h> void mul(int n)//multiplication 乘法 { int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=%-2d  ", i, j, i*j); //其中%2d中的2表示