精华内容
下载资源
问答
  • 要了解数据库的本质,我觉得先从逻辑视角和物理视角来区分一些概念比较好,比如DBMS从逻辑视角来看, 可以分为 1)Relative Database Management System 2)Non-Relative Database Management System 而从物理...
    转载自:
    论坛一位大神
    

    要了解列式数据库的本质,我觉得先从逻辑视角和物理视角来区分一些概念比较好,比如DBMS从逻辑视角来看, 可以分为

    1)Relative Database Management System
    2)Non-Relative Database Management System

    而从物理(存储的)视角来看,则可以分为:
    1)Row Based Storage DBMS
    2)Column Based Storage DBMS

    当然, 无论无论是逻辑视角还是物理视角, 它们都是不冲突的, 比如我们可以将逻辑上的RDBMS和物理上的Row Based Storage DBMS相结合, 那就成为我们平常使用最多的一种数据库产品类型,比如Mysql, Oracle等产品都属于这个范畴, 而如果我们将逻辑上的RDBMS和物理上的Column Based Storage DBMS相结合, 那就成为我们今天要探索的一类数据库产品,即基于列式的关系型数据库。

     


    上图是摘录自infobright的一份文档, 该图形象的描述了物理上两种不同的存储方式与关系型表之间的关系。可以看到,在通常的基于行存储的RDBMS中, 数据是按照行数据为基础单元进行存储的, 而在基于列式的DBMS中, 数据则是按照一列一列的数据为单元进行存储, 那么,

    1)这两种不同的存储方式会造就什么样的差异那?
    2)为什么通常认为基于行存储的RDBMS更适合OLTP类型的应用场景, 而基于列式的RDBMS则更适合OLAP类型的应用场景那?

    不妨让我们来简单分析一下…

    1 - 基于行存储的RDBMS行为分析

    因为数据在这种类型的RDBMS中是按照行存储的,那么数据在写入的时候可以按照一行一行顺序写入,对于磁盘来讲, 这种行为与其物理结构造就的行为是比较契合的。在OLTP类型的应用中, 这种行为是合适的, 虽然基于行的存储在数据读取的时候会存在一定的“缺陷”(很多时候, 并非每一行中每一列的值都需要读取出来),但在OLTP类型的应用中, 通过索引啦之类的机制,可以基本搞定。

    所以, 不严谨点儿讲, “基于行存储的RDBMS适合OLTP类型的应用场景”这句话还算恰当。
    2 - 基于列式的RDBMS行为分析

    在基于列式的RDBMS中, 数据现在是按照一列一列为单元进行存储的,那么要进行一行一行的数据写入的时候, 可能就需要“跳跃式”的将每一行每一列的值写入到不同的区块,显然,对于磁盘结构来说,这中存储方式对数据的写入是不够友好的,性能指定好不到哪儿去(当然,是与基于行存储的DBMS相比)。但是,反过来看, 对数据写入的支持或许不好,那对数据的读取那?很简单就可以看出来,如果我每次都对一列,一列的数据感兴趣,我完全可以快速的读取每一列的所有值,那么, 这种特性对读取的列上所有的值进行统计分析就比较赞了。至于说“基于列式的RDBMS则更适合OLAP类型的应用场景”, 我们不妨以数据仓库这种特定场景为基础进行一简单的“分析”(CRM之类也可以)。

    对于数据仓库来讲, 大部分情况下,它会从各个数据源汇总数据,然后进行分析和反馈, 所谓数据挖掘,商业智能(BI),决策支持之类,大都是数据仓库的职责范围吧!很显然, 要完成这些, 在数据仓库所从事的数据处理操作基本上就是数据的读取占大头儿啦,只有读取之后才能进行分析和统计嘛, 而统计大多也是针对同一指标的数据进行,哎呀, 想到没, 基于列的存储好像很适合哦! Bingo,I Think u got it. 基于列式的数据库很适合海量的数据查询和统计,也很显然比较适合DW这种部门和相应的应用来使用。

    DW会将各个数据源汇总过来的数据做抽取,清洗,转换, 加载之类的工作,然后放入Star Schema或者Snowflake Schema建模的新存储模型中,然后供后端的其它分层和应用使用,此后,大多数操作类型都将是数据读取类型。
    3 - 列式数据库相关关键技术

    1)Compression

    每一列数据从逻辑上来讲其值都归属于同一指标, 很多情况下, 值的离散范围也有一定的规律,如果能干根据这一规律选取合适的压缩算法,显然能够节省很大的存储空间,甚至比原始数据都要小, 大多数列式数据库都可以达到10:1 到40:1, 50:1不等的压缩率。

    列数据库中主要的压缩方法有以下几类:
    1) 消零或空格符法(Null Suppression)
    2) 词典编码算法 (Dictionary Encoding)
    3) 行程编码算法 (Run-length Encoding)
    4) 位向量算法 (Bit-Vector Encoding)
    5) Lempel-Ziv算法 (Lempel-Ziv Encoding)

    2)Late Materialization

    这一技术主要式为了解决如何在没有索引的情况下实现最大程度的数据过滤与减少不必要的IO和内存消耗

    3)Block Iteration

    4)Invisible join

    5)column-wise query processing

    对提高查询性能十分关键
     



    展开全文
  • 数据库和行式数据库区别

    千次阅读 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计算的数据量来说,在分布式环境中能进行压缩处理能节省宝贵的内部带宽,从而提高整个计算任务性能。

    展开全文
  • 数据库简介

    千次阅读 2020-06-26 21:13:35
    什么是数据库数据存储区也称为面向的DBMS或数据库管理系统。存储DBMS将数据存储在而不是行中。关系数据库管理系统(RDBMS)将行中的数据和数据属性存储为标题。基于行的DBMS和基于的DBMS都...

    什么是列式数据库?

    列数据存储区也称为面向列的DBMS或列式数据库管理系统。列存储DBMS将数据存储在列而不是行中。关系数据库管理系统(RDBMS)将行中的数据和数据属性存储为列标题。基于行的DBMS和基于列的DBMS都使用SQL作为查询语言,但是面向列的DBMS可能会提供更好的查询性能。假设您需要根据ID列出表中的所有名称;而不是遍历所有行,您可以只访问表的单个列。

    以下是列数据存储DBMS的一些关键特性。

    1. 列存储DBMS使用的键空间类似于RDBMS中的数据库架构。
    2. 列存储DBMS具有称为列族的概念。列族就像RDBMS上的表,键空间包含数据库中的所有列族。
    3. 列族包含多个行,每行都有一个唯一的键,称为行键,这是该行的唯一标识符。
    4. 列存储数据库中的每一列都有一个“名称”,“值”和“时间戳记”字段。
    5. 每行可以包含不同数量的列,所有行都不必具有相同的列。
    6. 每列可以包含多行,所有行都不必具有相同的数据类型或大小。

    键空间(Keyspace)

    列存储DBMS使用的键空间类似于RDBMS中的数据库架构。键空间包含所有列族,键空间名称可以是CMS数据库,用于存储用户配置文件、文档和文档元数据。

     

      

    列族(Column Family)

    列族就像RDBMS中的表,一个键空间可以有多个列族。例如,键空间可以具有以下列列族AuthorProfile,MemberProfile,Article,Blog和Question。

     

    行键(Row key)

    列族包含多个行。下面是列族行的示例,行中的第一项是单值行键,它是标识行的唯一键。

     

    列(Column)

    每行可以有多列。列数据存储中的一列包含实际值。列存储数据库中的数据存储在带有时间戳的键/值对中,每行可以具有不同数量的列。

     

    AuthorProfile

    以下是具有三行的AuthorProfile列族,每行具有不同数量和类型的列。从数据中可以看到,每行都有唯一的行键。

     

     

    列族的三行是Mahesh,David和Allen。第一行包含三列:性别,专业知识和等级。第二行有两列,性别和书本。第三行包含三列:城市,图书和等级。

     

    列式存储的主要优点

    列存储数据库的主要优点包括更快的加载,搜索和聚合。列存储数据库具有可伸缩性,可以在几秒钟内读取数十亿条记录。列存储数据库在数据压缩和分区方面也比传统的行存储更有效。

     

    流行的列式数据库

    一些流行的面向列的DBMS包括Bigtable,Cassandra,HBase,Druid,Hypertable,MariaDB,Azure SQL Data warehouse,Google BigQuery,IBM Db2,MemSQL,SQL Server和SAP HANA。

     

    Google BigTable

    Google Bigtable是PB级的列存储数据库,一个完全托管的NoSQL数据库服务,支持大型分析和业务操作的工作负载。主要功能包括:

    1. 低延迟,可大规模扩展的NoSQL
    2. 保证数据一致的情况下,实现10毫秒以下延迟
    3. 通过复制提供高可用、更高的持久性和弹性以解决区域数据故障
    4. 适用于互联网广告技术,金融科技和物联网等应用
    5. 面向机器学习应用的存储引擎
    6. 与开源大数据工具轻松集成

    Apache Cassandra

    Apache Cassandra NoSQL数据库在不降低性能的前提下,提供很强的扩展性和高可用。线性可扩展,以及在商用硬件或云基础架构上经过验证的容错能力使它成为关键数据处理的理想平台。Cassandra对跨多个数据中心的复制提供了一流的支持,为您的用户提供了更低的延迟,并且帮助您的客户在区域数据中心故障的情况下保持数据可用,让用户安心无忧。

    Apache HBase

    Apache HBase是开源、分布式和可扩展的NoSQL大数据存储平台,它可以在几秒钟内访问数十亿行大数据。主要功能包括:

    1. 线性扩展和模块化
    2. 严格一致的读写
    3. 表的自动分片,并且可配置
    4. 支持RegionServer之间的自动故障转移
    5. 方便的基类,可以在Apache HBase表中备份Hadoop MapReduce作业
    6. 易于使用的Java API用于客户端访问
    7. 用于实时查询的块缓存和布隆过滤器
    8. 通过服务器端过滤器支持谓词下推
    9. Thrift网关和REST-ful Web服务支持XML、Protobuf和二进制数据编码
    10. 可扩展的基于jruby的(JIRB)shell

    注:以上内容由google翻译,重新调整和排版而成,有不妥之处,可参考原文: https://www.c-sharpcorner.com/article/what-is-a-column-store-database/

    展开全文
  • HBase 列数据库 or 列簇数据库

    千次阅读 2017-12-29 13:51:27
    HBase 列数据库 or 列簇数据库

    最近在看HBase的,对HBase的物理存储方式有一些疑惑,HBase应该叫“列数据库” 还是 “列簇数据库” ?

    想了一个小题目来理解HBase的物理存储方式,欢迎大家来讨论


    请问数据在Hbase中的物理存储方式是什么 ?为什么 ?


    展开全文
  • 什么是式存储数据库

    万次阅读 多人点赞 2018-03-14 10:52:46
    存储不同于传统的关系型数据库,其数据在表中是按行存储的,方式所带来的重要好处之一就是,由于查询中的选择规则是通过来定义的,因此整个数据库是自动索引化的。按存储每个字段的数据聚集存储,在查询只...
  • Table of Contents 式存储数据库 Examples of Column StoreDBMSs Hbase Table Row Column Column Family ...式存储数据库 ...数据库是以相关存储架构进行数据存储的数据库,主要...
  • 数据库中动态的几种设计思路

    万次阅读 2020-11-02 22:16:02
    在需求开发的时候,可能会碰到一种场景...一、使用数据库DDL进行动态创建。 优点, 1:使用简单,sql管理即可实现。 缺点,显而易见, 1:不同情况都会动态增加字段,表容易爆炸 2:在已存在数据的表中修改字...
  • 行式数据库数据库区别

    千次阅读 2018-12-01 18:35:56
    数据库: 1.数据是按存储的,每一单独存放 2.数据既是索引 3.只访问查询涉及的,大量降低系统io 4.每一有一个线索来处理,支持查询的高并发 5.数据类型一致,数据特征相似,高效的压缩...
  • 此文从收费的列数据库与互联网自行开发的列数据库进行了对比。 我经常听到的列式数据库不外乎: hbase hive sybase IQ/SAPIQ GreenPlum 没想到,还有很多的,学习,一直需要在路上~ 见链接:...
  • 数据库存储原理 据库存储原理 存储原理 数据库存储原理 数据库存储原理
  • 数据库 insert 增加

    千次阅读 2019-08-09 17:28:40
    一些出现的问题 1.insert 增加
  • 一款直接时空处理分析的开源数据库---geomesa,可用于交通轨迹数据存储分析等相关领域,在分布式列数据库的基础上进行扩展,目前支持Accumulo, HBase, Cassandra, and Kafka等作为底层存储。 地址链接: ...
  • 一分钟搞懂式与行式数据库

    万次阅读 多人点赞 2017-03-30 17:32:39
    行式与式的区别和应用场景。
  • 数据库式与行式数据库区别

    千次阅读 2018-03-19 17:31:28
    定义 式存储(Column-based)是相对于传统关系型数据库的行式存储(Row-based)来说的。简单来说两者的区别就是如何组织表。 将表放入存储系统中有两种方法,而我们绝大部分是采用行存储的。行存储法是将各行放入...
  • 数据库总结(特点)

    千次阅读 2014-02-10 11:38:47
    简单罗列了一些选择行数据库还是列数据库的权衡依据。当然,如果能够把数据全放在内存中,那么使用内存数据库性能会更好。 在只需要根据某几列来聚合数据的时候按列的数据组织方式更有效。因为这样只需要读取一...
  •  说到非关系型数据库,就要简单的介绍一下关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,我们平常使用的数据库,像MySQL,Oracle,S...
  • HBase 是式存储数据库

    千次阅读 2019-01-11 17:32:00
    在介绍 HBase 是不是式存储数据库之前,我们先来了解一下什么是行式数据库数据库。 行式数据库数据库 在维基百科里面,对行式数据库数据库的定义为:数据库是以相关存储架构进行数据...
  • 数据库之行转转行方法

    万次阅读 2018-06-04 23:51:28
    --创建纵表CREATE TABLE TABLE_A ( NAME VARCHAR2(20), SUBJECT VARCHAR2(20), SCORE NUMBER(22,0));
  • clickhouse 式存储数据库介绍

    千次阅读 2019-01-30 19:36:04
    ClickHouse是一个开源的数据库(DBMS),主要用于在线分析处理查询(OLAP),于2016年开源,采用C++开发。凭借优秀的性能,市场反应非常热烈。 什么是数据库? 相对行式数据库,像M...
  • https://www.zhihu.com/question/29380943 作者:李伟 链接:...商业转载请联系作者获得授权,非商业转载请注明出处。...存储的数据库更适合OLAP 行存储的数据库
  • 浅析数据库的特点

    千次阅读 2014-01-03 16:02:28
    最早的商业数据库是在1995年发布的Sybase IQ,但是一直到1999年左右才慢慢稳定到能够投入生产环境。现在的大多数分析型数据库都是在2003-2005年从Postgresql分支出来的。这篇文章解释介绍数据库的几大特点。...
  • # 创建会话 def create_key_space(keyspacename,ster): session = ster.connect() return session # 连接会话(获取指定keyspace的会话连接) def connect_key_space(keyspacename,ster): session = ster.connect...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,084,540
精华内容 433,816
关键字:

列数据库