精华内容
下载资源
问答
  • 列式数据库查询原理
    千次阅读
    2020-09-27 14:50:05

    转载自:https://blog.csdn.net/nieson2012/article/details/79551337

    列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法。

    传统的行存储和列存储的区别

    1、数据是按行存储的
    2、没有索引的查询使用大量I/O
    3、建立索引和物化视图需要花费大量时间和资源
    4、面对查询的需求,数据库必须被大量膨胀才能满足性能需求

    1、数据按列存储–每一列单独存放
    2、数据即是索引
    3、只访问查询涉及的列–大量降低系统IO
    4、每一列由一个线索来处理–查询的并发处理
    5、数据类型一致,数据特征相似–高效压缩

    列式数据库

    什么是列式数据库?可能大家也才到了,既然有列式数据库,那么肯定就有行式的喽!确实是这样的。也许大多数人并不了解数据库储存模型(storage model)和数据库的数据模型(data model),不过对上层是使用者也没多大关系。不过我们现在讲的列式和行式就是指数据库的storage model,而他们支持同样的data schema,即对data model感知不到storage model的实现区别。
    一个数据库的data model约定可以进行上层数据操作,而storage model决定这些操作的性能。比如,No Sql数据库使用的是data model是key-value,而储存模型有map结构实现,也可以由tree结构实现。而对于sql数据库,其数据模型是一张二维表,而至于怎么存储这张二维表,很容易就可以想到可以按行存储和按列储存。按行存储就是我们现在常见操作型数据库,而是最大众的数据库,比如MySql、Oracle、……等等你所知道大部分数据库。而按列储存的数据库现在也是很有名,比如Hive、Vertica、Druid、Infobright等。
    为什么要行式数据库又要列式数据库?

    先让让我们想象关于二维表我们有哪些操作?—— select、update、delete和insert。这些操作都会需要找到相应的位置,所以这些操作的基础都是search。
    而基本的算法都是即从时间考虑也是从空间考虑的。我们开始具体举个例子。

    在数据库储存作为实际的一堆储存在磁盘上的文件,在设计不得不考虑磁盘的特性。一般的磁盘特性,其实所有的储存都有一个特性就是对于locality良好的存取性能是随机存取的好几倍。我们现在把一块想像成一组固定大小的块,如图: disk logic model 而文件的内容实际会被分开按照磁盘逻辑块来储存,数据库主要任务就是怎么组织这些逻辑块来取得更好的读取性能和便捷性。

    在不考虑索引的情况下,所有的磁盘读取都是顺序读取,这意味了要查找一个东西,都需要扫描全表或者部分表。很直观的道理,读取的性能就是取决于扫描的范围。范围越大,速度当然越慢。
    我们先假设我们有一堆如下的数据:
    RowId EmpId Lastname Firstname Salary
    001 10 Smith Joe 40000
    002 12 Jones Mary 50000
    003 11 Johnson Cathy 44000
    004 22 Jones Bob 55000
    行式储存模型

    好现在我们开始让磁盘里塞,假设我们的磁盘块只能容下5个字段(抽象的,假设我们的这些字段的大小都一样),因为我们是按找行优先的,所以结果就如下:
    这里写图片描述

    于是当我们要找Jones的所有信息的工资时候,我们会依次从第一块磁盘块直到扫描到最后(为什么要扫到最后,因为是在找全部叫Jones的信息,所以不扫都最后都不能确定是否会遗漏)。一共需要扫4块,然后取出其第二块和第四块信息,找出其工资的信息。

    其实基于行式储存,对于where语句处理都需要处理全表。对于磁盘的不停seek,速度就可想而知。当然一般数据库为了应对这种全数据扫描,找到了建立索引的方法。而索引就是对某个或者某些字段的组合的信息,即取出数据的部分信息,以减少每次扫描从全表到部分信息的扫描的过渡。

    这种查询方式很适合于一次取出一个行数据,而对于日常应用系统来说这种方式是非常合适的,因为我们设计应用的时候都是针对一个事务,而我们会把一个事务所有属性存储成一行,使用的时候也是有很大的概率涉及到整行的信息,很利于做缓存。还比如我们经常使用的那些经典sql 语句:

    select * from user where id = 1001;
    select id, user_name, email, address, gender, ... from user where id = 1001;
    
    1
    2
    

    !!还敢不敢列出些更多的字段!!
    列式储存模型

    而列储存就是下图这种按列优先储存。为了方便我们每块只储存了一个一列,没有存满。
    这里写图片描述
    这下我们再考虑上面的查找所有Jones的工资,这下我们只扫描第三个磁盘块,找出Jones都再那些行,然后根据查出来的行号,直接去第五块磁盘(这块对应的式salary列)找出第二、四行的数据,然后输出。一共2次seek。大大小于row-oriented的4次。

    这种查询方式的前提就是你就需要这列数据就行了,其前提假设就是查询基本不会使用这个行的其他列数据。显然这种假设对于日常操作系统的围绕着一个主题进行的活动是不合适旳。但是却在分析型数据大显身手。

    列式的另一大优势是压缩。因为列的天然凝聚性(比如上面的两个Jones就可以压缩成一个)大大强与行,所以列式储存可以有很高的压缩比,这个进一步使使用的磁盘的数量减少,因为使用的磁盘块少,进一步减少了需要扫描的次数。这方面很利于加快查找速度,但是因为解压缩也是耗时耗内存的过程,所以压缩的控制也是需要一个定平衡点。
    优劣总结

    从上面的例子可以明显看出列式数据库在分析需求(获取特点——每次查询几个维度,通常是)时候,不仅搜索时间效率占优势,其空间效率也是很明显的。特别是针对动辄按T计算的数据量来说,在分布式环境中能进行压缩处理能节省宝贵的内部带宽,从而提高整个计算任务性能。

    更多相关内容
  • 列式数据库存储原理 据库存储原理 存储原理 列式数据库存储原理 列式数据库存储原理
  • 列式数据库存储原理.pdf
  • 一分钟搞懂列式与行式数据库

    万次阅读 2018-12-25 17:32:16
    本文对行式数据库与列式数据库进行比较,并且讲解如何根据业务场景需要选择对应的数据库系统。 定义 列式存储(Column-based)是相对于传统关系型数据库的行式存储(Row-based)来说的。简单来说两者的区别就是如何...

    本文对行式数据库与列式数据库进行比较,并且讲解如何根据业务场景需要选择对应的数据库系统。

    定义

    列式存储(Column-based)是相对于传统关系型数据库的行式存储(Row-based)来说的。简单来说两者的区别就是如何组织表。

    将表放入存储系统中有两种方法,而我们绝大部分是采用行存储的。行存储法是将各行放入连续的物理位置,这很像传统的记录和文件系统。列存储法是将数据按照列存储到数据库中,与行存储类似,下图是两种存储方法的图形化解释。

    两种存储方法的图形化解释

    应用行式存储的数据库系统称为行式数据库,同理应用列式存储的数据库系统称为列式数据库。随着列式数据库的发展,传统的行式数据库加入了列式存储的支持,形成具有两种存储方式的数据库系统。

    传统的关系型数据库,如Oracle、DB2、MySQL、SQL SERVER等采用行式存储法,当然传统的关系型数据库也在不断发展中。随着Oracle 12c推出了in memory组件,使得Oracle数据库具有了双模式数据存放方式,从而能够实现对混合类型应用的支持:传统的以行形式保存的数据满足OLTP应用;列形式保存的数据满足以查询为主的OLAP应用。

    新兴的Hbase、HP Vertica、EMC Greenplum等分布式数据库采用列式存储,当然这些数据库也有对行式存储的支持比如HP Vertica。

    随着传统关系型数据库与新兴的分布式数据库不断的发展,列式存储与行式存储会不断融合,数据库系统会呈现双模式数据存放方式,这也是商业竞争的需要。

    区别

    列式与行式数据库的区别

    为啥列存储可以大幅降低系统的I/O呢?

    列式存储的主要优点之一就是可以大幅降低系统的I/O,尤其是在海量数据查询时,I/O向来是系统的主要瓶颈之一。通过下面这张图,相信大家能够彻底明白这一点。

    列式存储的主要优点之一就是可以大幅降低系统的I/O

    应用场景

    在比较了行式数据库与列式数据库之后,我们更关心的是如何根据业务场景需要选择对应的数据库系统。

    行式更适合OLTP,比如传统的基于增删改查操作的应用。列式更适合OLAP,非常适合于在数据仓库领域发挥作用,比如数据分析、海量存储和商业智能;涉及不经常更新的数据。

    由于设计上的不同,列式数据库在并行查询处理和压缩上更有优势。而且数据是以列为单元存储,完全不用考虑数据建模或者说建模更简单了。要查询计算哪些列上的数据,直接读取列就行。

    最后我们需要务实的指出,没有万能的数据库,列式数据库也并非万能,只不过给DBA提供了更多的选择,DBA需根据自己的应用场景自行选择。

    展开全文
  • 列式数据库是以列相关存储架构进行数据存储的数据库,我们常见熟悉的关系型数据库是行式存储。 应用场景:批量处理、超大规模即时查询 二、为什么列式存储性能这么高 2.1 行式存储查询的劣势 2.2 列式...

    目录

    一、列式存储

     二、为什么列式存储性能这么高

    2.1 行式存储查询的劣势

    2.2 列式存储查询的优势(顺序读)

    2.3 列式存储的问题

    专栏链接:IT老齐架构300讲笔记专栏


    一、列式存储

    列式数据库是以列相关存储架构进行数据存储的数据库,我们常见熟悉的关系型数据库是行式存储。

    应用场景:批量处理、超大规模即时查询

     

     二、为什么列式存储性能这么高

    2.1 行式存储查询的劣势

    2.2 列式存储查询的优势(顺序读)

     

    2.3 列式存储的问题

    展开全文
  • 列式数据库~clickhouse 底层存储原理

    千次阅读 2018-08-15 14:43:00
    简介:今天介绍列式数据库的一些基本原理 一 数据目录 Data目录 数据存储目录,数据按照part分成多个文件夹,每个文件夹下存储相应数据和对应的元信息文件 Metadata 表定义语句,存储所有表的建表语句 二 基本原理...

    简介:今天介绍列式数据库的一些基本原理

    一  数据目录

          Data目录 数据存储目录,数据按照part分成多个文件夹,每个文件夹下存储相应数据和对应的元信息文件

          Metadata 表定义语句,存储所有表的建表语句

    二  基本原理

         记录方式:每隔8192行数据,是1个block,主键会每隔8192,取一行主键列的数据,同时记录这是第几个block 

         查找过程:如果有索引,就通过索引定位到是哪个block,然后找到这个block对应的mrk文件,mrk文件里记录的是某个block的数据集,在整列bin文件的哪个物理偏移位,加载数据到内存,之后并行化过滤

         构成图如下

         

              主键本身也符合最左原则,下面是查找图,所以查询时最好利用好主键条件

              

     

    转载于:https://www.cnblogs.com/danhuangpai/p/9481325.html

    展开全文
  • 列式存储(Column-based)是相对于传统关系型数据库的行式存储(Row-based)来说的。简单来说两者的区别就是如何组织表。 将表放入存储系统中有两种方法,而我们绝大部分是采用行存储的。行存储法是将各行放入连续的...
  • 数据库原理及应用教程(第4版|微课版)陈志泊 第五章简答题答案
  • 从零开始讲解大数据列式存储NoSQL数据库Kudu,基于Kudu构建高性能随机读写访问的数据存储系统,原理从入门到深入,搞定面试 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...
  • ClickHouse 是 Yandex(俄罗斯最大的搜索引擎)开源的一个...ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 我们首先理清一些基础概念: OLTP:是传统的关系型数据库,主要操作增删改查,
  • 数据库中的行式存储和列式存储

    千次阅读 2021-03-28 21:13:29
    我们常用的传统关系型数据库(MySQL、Oracle、PostgreSQL 、DB2和 SQL Server)都是采用行式存储,而最新兴起的分布式数据库很多采用列式存储,例如:Druid、Kudu、Clickhouse等。 本文将详细介绍行式存储
  • 关系数据库基本原理关系数据库基本原理
  • 式数据库列式数据区别

    千次阅读 2017-07-17 11:28:49
    式数据库列式数据区别
  • 数据库系统原理复习指导
  • 数据库系统原理——概述

    千次阅读 2020-08-04 18:11:52
    广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库 数据库是由表、关系、操作组成 二. 为什么需要数据库 几乎所有的应用软件的后台都需要数据库 数据存储数据占用空间小,容易持久保存 数据库的...
  • 《高级数据库技术》课件第1章 数据库系统原理、编程与设计
  • 数据库原理及应用

    千次阅读 2022-02-14 12:36:27
    1.1 数据库系统概述 1.1.1 数据库的四个基本概念 1 数据(Data) 数据是数据库中存储的基本对象 数据的定义:描述事物的符号记录 数据的种类:文本、图形、图像、音频、视频、学生的档案记录、货物...
  • 04735数据库系统原理(知识点整合)

    千次阅读 2021-07-21 14:46:18
    文章目录填空1.文档存储的存储格式可以多样化,适合存储系统日志等__数据。...数据库的生命期可分为两个阶段,分别是数据库__、 数据库实现与操作阶段。分析与设计阶段7.1986年10月美国ANSI公布最早的SQL标准;1
  • 数据库系统原理简答题-汇总.doc.pdf数据库系统原理简答题-汇总.doc.pdf数据库系统原理简答题-汇总.doc.pdf数据库系统原理简答题-汇总.doc.pdf数据库系统原理简答题-汇总.doc.pdf数据库系统原理简答题-汇总.doc.pdf...
  • 第1章 数据库系统概述n1.1 数据与数据管理技术n1.1.1 数据库系统的基本概念n1.1.2 数据管理技术的发展n1.2 数据库系统的特点及组成n1.2.1 数据库系统的特点n1.2.2 数据库系统的组成n1.3 数据库系统结构n...
  • 一、硬件升级 二、数据库设计 三、索引优化策略 四、查询优化
  • 数据库底层原理

    千次阅读 2019-04-24 21:44:47
    看到一篇很不错的数据库文章,拿过来...你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少【译者注:百度为您找到相关结果约1,850,000个…】,而且找到的那些文章都很短。现在如果你查找最近时髦...
  • 分布式数据库查询机制

    千次阅读 2020-04-04 10:20:18
    分布式查询处理的步骤:查询分析→查询分解→查询本地化→全局查询优化→局部优化 分布式查询处理的代价QC估算: 通信代价T估算:T = Σ传输次数(每次传输延迟时间+每次传输数据量/数据传输速率)=Σ传输次数(C0+...
  • 数据库原理模拟试卷四(答案).pdf数据库原理模拟试卷四(答案).pdf数据库原理模拟试卷四(答案).pdf数据库原理模拟试卷四(答案).pdf数据库原理模拟试卷四(答案).pdf数据库原理模拟试卷四(答案).pdf数据库原理模拟试卷四...
  • 数据库原理期末速成,有MySQL实操,原理 例题
  • SQL查询语言的重要性不言而喻,故而整理SQL查询语言的知识点,意在系统地理解知识,不那么杂乱。
  • 导语内容提要本书共19章,全面地讲述了数据库技术的基本原理和应用。主要内容包括:数据库概述、信息与数据模型、关系代数与关系数据库理论、数据库设计方法、MySQL的安装与使用、MySQL存储引擎与数据库操作管理、...
  • 数据库原理复习笔记(实用)

    万次阅读 多人点赞 2018-12-20 16:36:59
    这是大三上学期复习数据库时自己整理的,有些地方可能有误,大家可以参考参考,欢迎讨论哦 最后有一些习题

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,039
精华内容 28,415
关键字:

列式数据库查询原理