列存储相关概念和常见列式存储数据库(Hbase、德鲁依)

列存储相关概念和常见列式存储数据库(Hbase、德鲁依)TableofContents列式存储数据库ExamplesofColumnStoreDBMSsHbaseTableRowColumnColumnFamilyColumnQualifierCellTimestampDruid(德鲁依)Cassandra参考列式存储数据库列式数据库是以列相关存储架构进行数据存储的数据库,主要…

大家好,又见面了,我是你们的朋友全栈君。

Table of Contents

列式存储数据库

Examples of Column Store DBMSs

Hbase

Table

Row

Column

Column Family

Column Qualifier

Cell

Timestamp

Druid(德鲁依)

Cassandra

参考


列式存储数据

列式数据库是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合于大批量的数据处理,常用于联机事务型数据处理。

列存储数据库使用一个称为 keyspace 的概念。keyspace 有点像关系模型中的模式。keyspace 包含所有列族(有点像关系模型中的表),其中包含行,包含列。

像这样,一个 keyspace 包含多个列族:

列存储相关概念和常见列式存储数据库(Hbase、德鲁依)

列存储相关概念和常见列式存储数据库(Hbase、德鲁依)

一个列族包含三行,每一行包含他们自己的列。

如上图所示:

  • 列族由多行组成。
  • 每一行可以包含与其他行不同数量的列。而且这些列不必与其他行的列匹配(例如,它们可以有不同的列名、数据类型、数量等)。
  • 每行包含一列。它不像关系数据库那样跨所有行。每个列包含一个名称/值对,以及一个时间戳。

下面是每一行的结构:

列存储相关概念和常见列式存储数据库(Hbase、德鲁依)

  • Row Key:每一行都有一个惟一的键,这是该行的惟一标识符。
  • Column:每个列包含名称、值和时间戳。
  • Name:KV 对的 K
  • Value:KV 对的 V
  • Timestamp:这提供了插入数据的日期和时间。这可以用来确定数据的最新版本。

一些 DBMSs 扩展了列族概念,以提供额外的功能/存储能力。例如,Cassandra 有复合列的概念,它允许您将对象嵌套在列中。

 

特点/优点

  • 高效的压缩效率,节省磁盘空间和计算CPU和内存
  • 基于 CPU L2 缓存高效的数据迭代
  • 压缩算法:列式数据库由于其每一列都是分开储存的。所以很容易针对每一列的特征运用不同的压缩算法。常见的列式数据库压缩算法有Run Length Encoding , Data Dictionary , Delta Compression , BitMap Index , LZO , Null Compression 等等。根据不同的特征进行的压缩效率从10W:1 到10:1 不等。而且数据越大其压缩效率的提升越为明显。
  • 延迟物化:列式数据库由于其特殊的执行引擎,在数据中间过程运算的时候一般不需要解压数据而是以指针代替运算,直到最后需要输出完整的数据时。
  • 聚合查询:由于它们的结构,柱状数据库在聚合查询(如SUM、COUNT、AVG等)方面表现得特别好。
  • 可扩展性:列式存储数据库是可伸缩的。它们非常适合大规模并行处理(MPP),这涉及到将数据分散到一个大的机器集群中——通常是数千台机器。
  • 快速查询和写入:可以非常快地加载。可以在几秒钟内加载十亿行表。几乎可以立即开始查询和分析。

Examples of Column Store DBMSs

Hbase

在 HBase 中,数据存储在具有行和列的表中。这是一个与关系数据库(rdbms)重叠的术语,但这不是一个有用的类比。相反,将 HBase 表看作多维映射是合理的。

Table

HBase 表由多行组成。

Row

HBase 的行由一个 rowkey 和一个或多个 column 组成,其中的值与它们相关联。行在存储时按行键的字母顺序排序。因此,行键的设计非常重要。其目标是以相关行彼此相邻的方式存储数据。

一个常见的 rowkey 模式是一个网站域名。如果您的 rowkey 是域,您可能应该以相反的方式存储它们(org.apache.www, org.apache.mail, org.apache.jira)。通过这种方式,所有Apache域在表中彼此接近,而不是基于子域的第一个字母展开。

Column

HBase 中的列由一个列族和一个列限定符组成,它们由一个:(冒号)字符分隔。

Column Family

出于性能原因,列族在物理上共使用一组列及其值。每个列族都有一组存储属性,比如它的值是否应该缓存在内存中,它的数据是如何压缩的,或者它的 rowkey 是如何编码的,等等。表中的每一行都有相同的列族,尽管给定行可能不会在给定列族中存储任何内容。

Column Qualifier

列限定符被添加到列族中,以提供给定数据块的索引。给定一个列族内容,一个列限定符可能是content:html,另一个可能是content:pdf。虽然列族在表创建时是固定的,但是列限定符是可变的,而且行之间可能会有很大差异。即每一行列的数量是不一样的。

Cell

Cell 是行、列族和列限定符的组合,它包含一个值和一个时间戳,时间戳表示值的版本。

Timestamp

每个值旁边都有一个时间戳,它是给定版本的值的标识符。默认情况下,时间戳表示写入数据时在 RegionServer 上的时间,也可以在将数据放入计算单元时指定不同的时间戳值。

Druid(德鲁依)

德鲁依是一个高性能的实时分析数据库。用于大数据集的 OLAP 查询。Druid 通常用作支持实时摄取、快速查询性能和高正常运行时间的用例的数据库。因此,德鲁依通常被用于支持分析应用的 GUIs,或者作为需要快速聚合的高并发 APIs 的后端。德鲁依最擅长处理面向事件的数据。

Druid 的核心架构结合了数据仓库、时间序列数据库和日志搜索系统的思想。德鲁依的一些主要特点是:

  1. 列式存储:Druid 使用面向列的存储,这意味着它只需要加载特定查询所需的精确列。这极大地提高了只访问几列的查询的速度。此外,每个列的存储都针对其特定的数据类型进行了优化,该数据类型支持快速扫描和聚合。
  2. 可扩展分布式系统:德鲁依通常部署在数十到数百台服务器的集群中,可以提供每秒数百万条记录的吞吐率,上万亿条记录的保存率,以及亚秒到几秒的查询延迟。
  3. 大规模并行处理:德鲁依可以在整个集群中并行处理一个查询。
  4. 实时或批量摄取:德鲁依可以实时或者批量的获取数据。
  5. 自愈,自平衡,操作方便:作为操作员,要减小或扩展集群,只需添加或删除服务器,集群就会在后台自动地重新平衡自己,而不会有任何停机时间。如果德鲁依的服务器失败了,系统会自动绕过失败的直到这些服务器可以被替换。德鲁依被设计成24/7运行,不需要任何原因的停机计划,包括配置变化和软件更新。
  6. 云本地的、容错的架构,不会丢失数据:一旦德鲁依摄取了你的数据,副本就会安全的存储在后端存储器中(通常是云存储,HDFS,或者共享文件系统)。就算是德鲁依的服务器坏掉了,数据也会从后端存储中恢复。对于小部分服务器不可用的情况下,副本机制可以保证服务器恢复时,数据仍然可以被查询。
  7. 快速过滤索引:Druid 使用 CONCISE 或 Roaring 的压缩位图索引来创建索引,支持跨多列的快速过滤和搜索。
  8. 基于时间的分区:德鲁依首先按时间分区数据,并且可以根据其他字段进行分区。这意味着基于时间的查询将只访问与查询的时间范围匹配的分区。这将显著提高基于时间的数据的性能。
  9. 近似算法:德鲁伊包括近似计数-区分,近似排序,近似直方图和分位数的计算算法。这些算法提供有限的内存使用,通常比精确计算快得多。对于精度比速度更重要的情况,德鲁依也提供精确的计数-清晰和精确的排名。
  10. 自动生成摄取时间:德鲁依选择性地支持数据自动汇总在摄入的时候。这种汇总在一定程度上预先聚合了您的数据,可以节省大量成本并提高性能。

哪些情况使用德鲁依:

  • 插入率非常高,但是更新不太常见。
  • 大多数查询是聚合和报告查询(“group by”查询)。您还可以进行搜索和扫描查询。
  • 您的查询延迟目标是100ms到几秒。
  • 你的数据有一个时间组件(德鲁伊包括优化和设计选择具体相关的时间)。
  • 可能有多个表,但是每个查询只访问一个大型分布式表。查询可能会碰到多个较小的“查找”表。
  • 您有较高的基数数据列(例如 url、用户 id),需要对它们进行快速计数和排序。
  • 您希望从Kafka、HDFS、本地文件或Amazon S3之类的对象存储加载数据。

Cassandra

当您需要可伸缩性和高可用性而又不影响性能时,Apache Cassandra 数据库是正确的选择。在普通硬件或云基础设施上的线性可伸缩性和经过验证的容错能力使其成为关键任务数据的完美平台。Cassandra 对跨多个数据中心复制的支持是同类产品中最好的,它为用户提供了更低的延迟,并让您安心地知道可以在区域中断中幸存下来。

参考

https://searchdatabase.techtarget.com.cn/7-20958/

http://hbase.apache.org/book.html#datamodel

https://database.guide/what-is-a-column-store-database/

https://druid.apache.org/docs/latest/design/index.html

http://cassandra.apache.org/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159104.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mediumtext_mysql数据类型介绍(含text,longtext,mediumtext说明) | 学步园[通俗易懂]

    mediumtext_mysql数据类型介绍(含text,longtext,mediumtext说明) | 学步园[通俗易懂]由MySQL支持的列类型列在下面。下列代码字母用于描述中:M指出最大的显示尺寸。最大的合法的显示尺寸是255。D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。方括号(“[”和“]”)指出可选的类型修饰符的部分。注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。TINYINT[(M)][UNSIG…

    2022年5月5日
    597
  • Cinemachine(二)制作不会穿墙(会避开障碍物)的摄像头(Cinemachine Collider)

    Cinemachine(二)制作不会穿墙(会避开障碍物)的摄像头(Cinemachine Collider)在许多的第三人称游戏中,我们的摄像机往往保持着一定的偏移,跟随着我们的角色。但是常常会出现的一种情况就是,当我们的角色走进室内或者靠近墙边或障碍物的时候,如果这个偏移保持不变的话,我们的摄像机就可能会跑到墙体里,或者看向角色时被墙体或障碍物所挡住。因此这种情况下我们的相机往往需要一些特殊的处理,例如修改偏移量来拉近相机与角色的距离等,来防止上述情况的出现。在以往我们可能需要通过射线检测或者碰撞检测等,然后编写一大堆的代码做一堆复杂的判断来修改我们的摄像机的位置。视频链接:https://www.bi

    2022年5月8日
    94
  • 【中英】【吴恩达课后编程作业】Course 4 -卷积神经网络 – 第四周作业

    【中英】【吴恩达课后编程作业】Course 4 -卷积神经网络 – 第四周作业【中文】【吴恩达课后编程作业】Course4-卷积神经网络-第四周作业-人脸识别与神经风格转换

    2022年6月17日
    232
  • c++中对象和类的关系_类的对象只能访问该类的私有成员

    c++中对象和类的关系_类的对象只能访问该类的私有成员类以及类和对象的关系以及类的访问修饰符一.类的概念:二.类和对象的关系:三.类的组成:四.类的创建:五.类的访问修饰符:一.类的概念:类是对于某一类对象的一个统称,类是对象的抽象化,对象是类的实例。定义一个类时,相当于定义了一个数据类型的蓝图。但实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作,就是单纯的进行了一个定义。二.类和对象的关系:类就是对象的抽象化概念,一个类就是一个对象集合的总称,通俗的来讲就是对象需要什么这个类就提供什么

    2022年10月23日
    0
  • netdata mysql_Netdata介绍及安装部署

    netdata mysql_Netdata介绍及安装部署Netdata是一款Linux性能实时监测工具。Netdata是Linux系统实时性能监测工具,提供web界面的界面视角。它用可视化的手段,将被监测者最细微的细节,展现了出来。这样,你便可以清晰地了解你的系统和应用程序此时的状况。优美的界面:bootstrap框架下的控制界面自定义的控制界面:你可以使用简单的HTML代码去自定义控制界面(不需要使用javascript)极其的快速而高效:程序…

    2022年10月28日
    0
  • eclipse使用svn更新代码_eclipse安装svn

    eclipse使用svn更新代码_eclipse安装svn1.先去将本地的代码更新到最新,如果更新内容较少,可以点击资源同步,具体可以看一下博主:svn创建svn图文2.更新成最新的代码之后,点击创建补丁,点击第二个file文本框,选择一个文件夹存下一个文件。3.打开申请上线权限,。点击puth,填写./4.申请通过之后,复制review+版本号5.将复制的版本号放到comment下6.点击ok。…

    2022年10月24日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号