广告
返回顶部
首页 > 资讯 > 数据库 >第3篇:分布式数据库存储
  • 688
分享到

第3篇:分布式数据库存储

第3篇:分布式数据库存储 2018-05-01 16:05:58 688人浏览 无得
摘要

一、分布式数据库存储 在前面的章节;GreenPlum数据库是分布式架构数据库;表的数据分布在segment节点。那么表的数据根据什么策略来分布的? GreenPlum数据库性能依赖于跨数据节点均匀分布 GreenPlum数据库查询响应时

一、分布式数据库存储

在前面的章节;GreenPlum数据库是分布式架构数据库;表的数据分布在segment节点。那么表的数据根据什么策略来分布的?

GreenPlum数据库性能依赖于跨数据节点均匀分布

  1. GreenPlum数据库查询响应时间由所有数据节点完成时间来度量。系统只能跟最慢数据节点完成时间来决定。如果数据存储倾斜。一个数据节点比其他节点需要花更多的时间来处理数据,数据存储倾斜只会存在哈希分布的情况。
  2. 在GreenPlum数据库中;表关联查询最常见。若两个或者多个表关联的字段非分布键或者采用随机分布。在其他分布式架构这表之间的关系不是亲和表。要执行连接,匹配的行必须位于同一节点上。 如果数据未在同一连接列上分发,则其中一个表所需的行将动态重新分发到其他节点。 有些情况下,执行广播动作,每个节点将其各个行发送到所有其他节点上,而不是每个节点重新哈希数据并根据哈希值将行发送到适当的节点的重新分配。
  3. 是不是还有一种复制表?在GreenPlum6.0以上的版本支持复制表。正好避免2中的广播或者重分布动作。

二、分布策略

在GreenPlum数据库在创建表时可以指定分布策略:哈希分布(DISTRIBUTED BY)、随机分布(DISTRIBUTED RANDOMLY)、复制分布(DISTRIBUTED REPLICATED)。

  • 哈希分布:需要指定分布键。会根据分布键的哈希值分配到对应的segment数据节点。相近的值会分配到同一个数据节点。
  • 随机分布:随机分布无需指定分布键。这样无法保证表中字段的唯一性。因为同个值可能会分布在不同的数据节点。
  • 复制分布:在GreenPlum6.0以上的版本支持复制表;Greenplum数据库会将每个表行分发到每个节点实例。 复制表的数据均匀分布,因为每个节点具有相同的行。

如何选择分布策略呢?我们现在来分析

2.1、单表查询情况

结果验证:好像没区别

 2.2、表关联查询

现在我们创建一个表t_lottu;也插入10000条记录

lottu=# truncate table t_lottu;
TRUNCATE TABLE
lottu=# insert into t_lottu select generate_series(1,10000),"lottu";
INSERT 0 10000

随机策略:通过t_random_01与表t_lottu关联

 哈希策略:

 通过上两图比较:可以判断哈希策略略好;我这环境只有2个segment节点。效果不明显。我们可以明显可以看到在随机策略查询计划里面那有Redistribute Motion。 这个在后面讲解查询计划。这个叫数据重分布。后须讲解

为什么随机策略会Redistribute Motion?

在哈希策略中;同样的分布键的值肯定会分布到同一个segment节点。所以上面表t_hash_01和表t_lottu的分布键都是id字段。所就可以在每个Segment节点关联后,Segment节点把结果发送到Master节点,再由Master节点汇总,将最终的结果返还客户端。而随机分布则不能保证同样分布键的数据分布在同一个Segment节点上,这样在表关联的时候,就需要将数据发送到所有Segment节点去做运算,这样网络传输和大量数据运算都需要较长的时间,性能非常低下。所以在关联的时候不建议使用随机策略。

这里有一个问题了;是不是哈希策略查询计划就不会出现Redistribute Motion/Broadcast Motion(广播)。答案是错误的。若分布键跟关联的字段不一致的情况。就会出现。分布键跟关联的字段是否一致?在其它分布式架构叫表的亲和度。

2.3、数据分布倾斜的问题

既然不建议使用随机策略;那我们都是用哈希策略不就好了吗?

哈希策略是同样的分布键的值肯定会分布到同一个segment节点。有可能造成数据分布倾斜的问题。在随机策略不会出现这种情况。

数据分布倾斜的问题;待定。

-- 重新分布表数据

2.4、数据复制分布

在GreenPlum6.0版本中支持复制表。作用消除多表关联中Redistribute Motion/Broadcast Motion带来的性能消耗。也可用于单表的负载均衡

在用于单表查询;可以看出只需查询一个节点即可。

 用于多表关联消除多表关联中Redistribute Motion/Broadcast Motion带来的性能消耗 

 三、数据是如何存储

创建表的DDL语句还可以通过with子句来定义表的存储类型

where storage_parameter is:
   APPENDONLY={TRUE|FALSE}
   BLOCKSIZE={8192-2097152}
   ORIENTATION={COLUMN|ROW}
   COMPRESSTYPE={ZLIB|QUICKLZ|RLE_TYPE|NONE}
   COMPRESSLEVEL={0-9}
   CHECKSUM={TRUE|FALSE}
   FILLFACTOR={10-100}
   OIDS[=TRUE|FALSE]
where column_constraint is:

在前面有说到

参考:https://GitHub.com/diGoal/blog/blob/master/201708/20170818_02.md

Greenplum数据库可以使用追加优化(append-optimized,AO)的存储个事来批量装载和读取数据,并且能提供HEAP表上的性能优势。 追加优化的存储为数据保护、压缩和行/列方向提供了校验和。行式或者列式追加优化的表都可以被压缩。
在创建表指定 APPENDONLY = TRUE为AO表。若不指定或者APPENDONLY = FALSE为堆表。

3.1、堆表

堆表是postgresql数据库原生存储格式,GreenPlum默认的存储格式。堆表存储在OLTP类型负载下表现最好,这种环境中数据会在初始载入后被频繁地修改。 UPDATE和DELETE操作要求存储行级版本信息来确保可靠的数据库事务处理。 堆表最适合于较小的表,例如维度表,它们在初始载入数据后会经常被更新。

多适合用于OLTP系统。但GreenPlum常定位是用于OLAP系统。为了更适合OLAP系统。GreenPlum提供来AO表

应用场景:

堆表是万油金;只是有些场景其他存储方式更加适合。更能提升性能。

3.2、AO表

AO表在4.3版本之前取意为(APPEND-ONLY,AO)。根据其意义只能追加,在4.3版本之后取意为(append-optimized,AO)追加优化。支持update/delete。跟堆表一样。但实现原理不一样。删除更新数据时,通过另一个BITMAP文件来标记被删除的行,通过bit以及偏移对齐来判定AO表上的某一行是否被删除。

追加优化表存储在数据仓库环境中的非规范表表现最好。 非规范表通常是系统中最大的表。 事实表通常成批地被载入并且被只读查询访问。 将大型的事实表改为追加优化存储模型可以消除每行中的更新可见性信息负担,这可以为每一行节约大概20字节。 这可以得到一种更加简洁并且更容易优化的页面结构。 追加优化表的存储模型是为批量数据装载优化的,因此不推荐单行的INSERT语句

AO支持压缩以及列存

应用场景:

  • 使用列存、压缩数据使用AO表。
  • 数据批量写入使用AO表

3.3、行存和列存

ORIENTATION=COLUMN可以指定创建列存的AO表。列存的表只能是AO表。

  • 行存:以行形式存储表中。一行数据存在一个数据文件中。适用于具有许多迭代事务的OLTP类型的工作负载以及一次需要多列的单行,因此检索是高效的
  • 列存:以列为形式组织存储,每列对应一个或一批文件。而且压缩比例比较高。适合于在少量列上计算数据聚集的数据仓库负载,或者是用于需要对单列定期更新但不修改其他列数据的情况

若一个宽表。在读取某一个列数据;行存需要把匹配的列的所在的行数据块都要扫描一遍。整好列存可以避免。但是带来的问题是一个表对应多个数据文件。

行存与列存的选择以及转换方法

类型

创建选项

适用场景

堆表

默认/APPENDONLY = FALSE

适合OLTP系统,适合单条记录插入,适合小表

AO表

APPENDONLY = TRUE

适合OLAP系统,同时支持压缩。适合批量记录插入

行存

ORIENTATION=ROW

适合小量数据、多列查询

列存

ORIENTATION=COLUMN

适合OLAP系统、宽表

备注:以上为本人理解;若有不对的地方;烦请指出。谢谢!

您可能感兴趣的文档:

--结束END--

本文标题: 第3篇:分布式数据库存储

本文链接: https://www.lsjlt.com/news/2908.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 第3篇:分布式数据库存储
    一、分布式数据库存储 在前面的章节;GreenPlum数据库是分布式架构数据库;表的数据分布在segment节点。那么表的数据根据什么策略来分布的? GreenPlum数据库性能依赖于跨数据节点均匀分布 GreenPlum数据库查询响应时...
    99+
    2018-05-01
    第3篇:分布式数据库存储
  • SpringBoot分布式文件存储数据库mongod
    目录1、mongodb服务2、创建springboot项目3、添加mongodb依赖4、application.yml配置5、实体类6、通过MongoRepository实现增删改查...
    99+
    2023-02-02
    SpringBoot mongod SpringBoot分布式文件存储数据库
  • 数据类型与分布式存储
    数据类型与分布式存储================================================================================概述:==========...
    99+
    2022-10-18
  • 面向海量数据,一篇文章认识Ceph分布式存储系统
      Ceph是什么它是一个软件定义的开源分布式对象存储解决方案,面向PB级的海量数据存储平台。最初由Inktank于2012年开发,该公司在2014年被红帽收购。随着近几年大数据的发展,因为在性能、可靠性和可扩展性方面具有优秀表现,Ceph...
    99+
    2023-06-04
  • 分布式存储数据保护方式是什么
    分布式存储数据保护方式包括:1. 冗余备份:将数据分布在多个节点上,以确保数据的可靠性和可用性。如果某个节点出现故障,数据可以从其他...
    99+
    2023-05-30
    分布式存储数据保护 分布式存储
  • 分布式存储如何保证数据安全
    分布式存储系统通常使用多个存储节点来存储数据,因此在保证数据安全方面有以下几个关键因素:1. 数据冗余:分布式存储系统会将数据复制到...
    99+
    2023-09-20
    分布式存储
  • 分布式数据存储系统的三要素
    目录前言什么是分布式数据存储系统?分布式数据存储系统三要素顾客:生产和消费数据导购:确定数据位置货架:存储数据知识扩展:业界主流的分布式数据存储系统有哪些?总结前言 CAP 理论指出...
    99+
    2022-11-12
  • 如何解决亿级用户的分布式数据库数据存储问题
    这篇文章给大家介绍如何解决亿级用户的分布式数据库数据存储问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、MySQL复制1.MySQL的主从复制MySQL的主从复制,就是将MySQ...
    99+
    2022-10-19
  • ASP分布式存储框架:解决数据存储难题的利器?
    在现代互联网时代,数据存储是一个极其重要的话题。随着数据量的爆炸式增长,传统的单机存储已经无法满足需求。此时,分布式存储技术应运而生,而ASP分布式存储框架则是其中的佼佼者。 ASP分布式存储框架是一种开源的分布式存储框架,它提供了高可靠...
    99+
    2023-10-10
    分布式 存储 框架
  • CrateDB分布式数据库
    今日在portianer后台,查询应用模板时,偶尔看到一个名为CrateDB的数据,顺手查了一下。其中就一一篇标题名为“比Postgre快10倍的开源数据库CrateDB”的文章,第一个感觉,就是口气好大哈。在不了解的情况下,也不敢妄自菲薄...
    99+
    2017-12-07
    CrateDB分布式数据库
  • redis分布式数据库
    一、key pattern 查询相应的key1)redis允许模糊查询key  有3个通配符 、、[]: 通配任意多个字符: 通配单个字符[]: 通配括号内的某1个字符2)randomkey:返回随机ke...
    99+
    2022-10-18
  • MySQL中怎么实现海量数据分布式存储
    这篇文章将为大家详细讲解有关MySQL中怎么实现海量数据分布式存储,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、分布式应用的概念和优势分布式数据库是指利...
    99+
    2022-10-18
  • MySQL数据库提升篇-----存储过程和函数
    day06 MySQL数据库存储过程和函数一、存储过程和函数的概述:    数据库的存储过程和存储函数是指在数据库中定义的一些sql语句的集合,直接调用这些存储过程的...
    99+
    2022-10-18
  • 阿里云存5G数据库未来数据存储的新篇章
    在5G时代,数据的存储需求将呈爆炸性增长,传统的存储技术已经难以满足需求。这时,阿里云推出了5G数据库,旨在提供高效、安全、稳定的数据存储服务。本文将详细介绍5G数据库的优势以及其在未来的应用前景。 一、5G数据库的背景及挑战随着5G技术的...
    99+
    2023-11-05
    新篇章 阿里 数据存储
  • TiDB 分布式数据库(一)
    ## TiDB :A Distributed SQL Database# github :https://github.com/pingcap/tidb# doc : https://github.com/...
    99+
    2022-10-18
  • TiDB 分布式数据库(二)
    ## TiDB :A Distributed SQL Database# github :https://github.com/pingcap/tidb# doc : https://github.com/...
    99+
    2022-10-18
  • ASP 函数如何实现分布式存储?
    随着互联网的发展,数据量越来越大,传统的单机存储已经无法满足需求。分布式存储成为了一种趋势,它可以通过多个节点来存储数据,提高了数据的可靠性和可扩展性。ASP 函数可以通过一些技巧来实现分布式存储,本文将介绍 ASP 函数如何实现分布式存...
    99+
    2023-06-01
    函数 存储 分布式
  • 数据库中分布式数据库有哪些
    小编给大家分享一下数据库中分布式数据库有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!分布式数据库有:1、物联网方向,时序数...
    99+
    2022-10-18
  • Android持久化存储(3)SQLite数据库的使用
    1.什么是SQlite SQLite是由C语言编写的一款轻型数据库,因占用资源小,处理速度快,功能齐全,特别适用于移动设备,最重要的是开源,任何...
    99+
    2022-06-06
    存储 sqlite数据库 SQLite Android
  • 分布式数据库-TiDB:安装
    TiDB 具备如下特性: 高度兼容 MySQL 大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。 水平弹性扩展 通过简单地增加新节点即...
    99+
    2016-02-29
    分布式数据库-TiDB:安装
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作