对于那些考虑使用Citus的人来说,如果您的用例看起来很合适,我们通常愿意花一些时间与您一起帮助您了解Citus数据库及其可以提供的性能类型。我们通常与我们的一位工程师进行大约两个小时的配对,以完成此操作。我们将讨论架构,加载一些数据并运行一些查询。如果最后有时间,将相同的数据和查询加载到单节点Postgres中并查看我们如何进行比较总是很有趣。在看了多年之后,我仍然很高兴看到单节点数据库的性能提高了10到20倍,在高达100倍的情况下也是如此。

最好的部分是,它不需要对数据管道进行大量的重新架构。它所要做的只是一些数据建模以及与Citus的并行化。

第一步是分片

我们之前已经讨论过这一点,但是获得这些性能提升的首要关键是Citus将您的数据隐藏在更小的,更易于管理的部分。这些碎片(是标准Postgres表)分布在多个物理节点上。这意味着您可以从系统中获得更多的集体能力。当您定位单个分片时,它非常简单:查询被重新路由到基础数据,一旦获得结果,它就会返回它们。

用MapReduce的方式思考

MapReduce已经存在了很多年,并由Hadoop普及。关于大规模数据的问题是为了从中获得及时的答案,您需要对问题进行分解并并行进行操作。或者,您会找到一个非常快的系统。使用更大,更快的设备的问题在于,数据增长超过了硬件改进的速度。

MapReduce本身是一个框架,用于拆分数据,根据需要将数据改组到节点,然后在重新组合结果之前对数据的子集执行工作。让我们举一个例子,例如累计总浏览量。如果我们想在此基础上利用MapReduce,我们会将浏览量分成4个单独的存储桶。我们可以这样做:

for i = 1 to 4:

for page in pageview:

bucket[i].append(page)

现在,我们将有4个存储桶,每个存储桶都具有一组网页浏览量。从这里我们可以执行许多操作,例如搜索以找到每个存储桶中最近的10个,或计算每个存储桶中的综合浏览量:

for i = 1 to 4:

for page in bucket:

bucket_count[i]++

现在,通过合并结果,我们可以获得页面浏览总数。如果将工作分配到四个不同的节点,则与使用一个节点的所有计算来执行计数相比,可以看到性能大约提高了4倍。

MapReduce作为一个概念

MapReduce在Hadoop生态系统中广为人知,但您不必跳入Java来利用。 Citus本身有多个不同的执行器来处理各种工作负载,我们的实时执行器实质上与成为MapReduce执行器是同义的。

如果您在Citus中有32个分片并运行SELECT count(*),我们将其拆分并运行多个计数,然后将最终结果汇总到协调器上。但是,除了计数(*)以外,您还可以做更多的事情,而平均值呢。对于平均值,我们从所有节点和计数中获得总和。然后,我们将总和与计数加在一起,并在协调器上进行最终数学运算,或者您可以将每个节点的平均值求和。实际上,它是:

SELECT avg(page), day FROM pageviews_shard_1 GROUP BY day; average | date ---------+---------- 2 | 1/1/2019 4 | 1/2/2019 (2 rows) SELECT avg(page), day FROM pageviews_shard_2 GROUP BY day; average | date ---------+---------- 8 | 1/1/2019 2 | 1/2/2019 (2 rows)

当我们将以上结果输入表中,然后取它们的平均值时,我们得到:

average | date ---------+---------- 5 | 1/1/2019 3 | 1/2/2019 (2 rows)

请注意,在Citus中,您实际上不必运行多个查询。 在后台,我们的实时执行器可以处理它,实际上就像运行一样简单:

SELECT avg(page), day FROM pageviews GROUP BY day; average | date ---------+---------- 5 | 1/1/2019 3 | 1/2/2019 (2 rows)

对于大型数据集,MapReduce中的思路为您提供了无需费力即可获得出色性能的途径。 最好的部分可能是您不必编写数百行来完成它,您可以使用与编写相同的SQL来完成。 在幕后,我们负责繁重的工作,但是很高兴知道它在幕后如何工作。

原文:https://www.citusdata.com/blog/2019/02/21/thinking-in-mapreduce-but-with-sql/

本文:http://jiagoushi.pro/node/926

讨论:请加入知识星球或者微信圈子【首席架构师圈】

请画出使用mapreduce对英文句子_「Postgresql架构」用MapReduce的方式思考,但使用SQL...相关推荐

  1. 依次输入表(30,15,28,20,24,10,68,35,50)中的元素,生成一棵平衡的二叉排序树。请画出构造过程,并在其中注明每一次平衡化的类型(LL型、RR型、LR型、RL型)

    题目 依次输入表(30,  15,  28,  20,  24,  10,  68,  35,  50)中的元素,生成一棵平衡的二叉排序树. 请画出构造过程,并在其中注明每一次平衡化的类型(LL型.R ...

  2. (80)FPGA面试题-请画出序列“1101 “检测状态转移图

    1.1 FPGA面试题-请画出序列"1101 "检测状态转移图 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-请画出序列" ...

  3. 请画出计算机系统层次结构图,计算机系统结构

    <计算机系统结构> 1.并行性 2.一次重叠 3.信息按整数边界存储 4.模拟 5.仿真 6.在输入输出系统中,集中式的总线控制方式常见的有哪三种? 7.软件的可移植性 8.主存空间数相关 ...

  4. 请画出五个具有五个结点的无向图,使之分别满足: (1) 是欧拉图但不是汉密尔顿图。 (2) 既是欧拉图也是汉密尔顿图。 (3) 是完全图K5。 (4) 是棵树。 (5) 是汉

    请画出五个具有五个结点的无向图,使之分别满足: (1) 是欧拉图但不是汉密尔顿图. (2) 既是欧拉图也是汉密尔顿图.(3) 是完全图K5. (4) 是棵树. (5) 是汉密尔顿图但不是欧拉图 .

  5. C语言密勒码的软件编码,密勒码的编码规则是什么?请画出代码序列11010010的密勒码波形?...

    相关题目与解析 CMI码的编码规则是什么?请画出代码序列11010010的CMI码波形? 数字双相码的编码规则是什么?请画出代码序列11010010的双相码波形? 简述双相码(曼彻斯特码)的编码规则并 ...

  6. 请画出计算机主机的装配工艺程序图,工艺程序图

    工艺程序图,是工艺程序分析的主要分析工具,它是记录产品从原材料投入开始,经过各道工序加工为成品的生产过程图.它是按照工艺加工或装配的先后顺序从右向左依次画出,同时注明了各项材料和零件的进入点.规格.型 ...

  7. 用计算机画出方格表,方格造型图_怎么做这种颜色相间的方格图(有图)_彩妆阁...

    1.怎么做这种颜色相间的方格图(有图) 经典做法: 1.新建4*4像素的画布,背景色为白. 2.将画布放大到最大,在画布四个角各填充一个像素的黑色块(可以用选框工具选中一个像素),画布中间填充一个四个 ...

  8. c语言匹配英文,正则英语_正则表达式怎么匹配英文句子_淘题吧

    ⑴ 正则表达式怎么匹配英文句子 如果只需要匹配任意一句话的话,可以这样写:(.|[\u4e00-\u9fa5])+.注:第一个点是小数点,最后面是一个中文句号希望可以帮到你! ⑵ "正则表达 ...

  9. mysql存储英文句子_带有数字的英语句子

    1到100的100个数字的英文怎么写 1–100的写法是有规律的:1–20每个单词都是不一样的,后面每个整十数也都不一样,但是从几十一到几十九,都是用表示十的单词–表示一至九的单词. 如21 twen ...

最新文章

  1. 面试必问:设计模式遵循的面向对象设计原则!
  2. git工具tig用法
  3. 数据挖掘算法_数据挖掘算法入门
  4. uniapp 全局样式
  5. leetcode21
  6. ssd windows未能启动服务器,ssd安装win10无法启动你安装方法对吗?来看一下
  7. 前端学习(3290):object.define3
  8. lsof 一切皆文件
  9. 无模型自适应迭代学习控制原理和matlab代码仿真学习记录
  10. 计算机控制技术于海生第二版知识点,计算机控制技术 第2版
  11. js实现图片放大镜效果——简单方法
  12. self._handle = _dlopen(self._name, mode) OSError: [WinError 126] 找不到指定的模块
  13. mybatis insert返回自增主键的id值
  14. [置顶] 关于Android图形系统的一些事实真相
  15. 2021高考成绩查询大连,2021大连市地区高考成绩排名查询,大连市高考各高中成绩喜报榜单...
  16. Python汉字转拼音(xpinyin)
  17. K线技术指标实现—同花顺多空趋势点
  18. 大数据就业前景如何? 你看连学术打假都用得上!
  19. 自编Photoshop简单教程
  20. idea插件docker图像化的使用

热门文章

  1. 记:使用IScroll.js 开发picker日历组件遇到的问题及经验总结
  2. 「HAOI2018」染色 解题报告
  3. 介绍一下Python中webbrowser的用法?
  4. model数据库orm操作
  5. [14-01] 闭包
  6. Python学习笔记14(socket编程)
  7. Android 中文API (68) —— BluetoothClass.Service
  8. c#解析json字符串数组_c#解析json字符串处理(最清晰易懂的方法)
  9. file.delete删除不了文件_巧用磁盘清理,彻底清除Windows系统垃圾文件
  10. mysql 避免重复添加_MySql三种避免重复插入数据的方法