Buckets

PostgreSQL的并行查询

倖福魔咒の 提交于 2020-11-18 14:39:09
PostgreSQL的并行化包含三个重要组件:进程本身(leader进程)、gather、workers。没有开启并行化的时候,进程自身处理所有的数据;一旦计划器决定某个查询或查询中部分可以使用并行的时候,就会在查询的并行化部分添加一个gather节点,将gather节点作为子查询树的根节点。 查询执行是从leader进程开始。一旦开启了并行或查询中部分支持并行,就会分配一个gather节点和多个worker线程。relation的blocks在各个workers线程之间划分。workers的数量受postgresql的配置参数控制。workers之间使用共享内存相互协调和通信,一旦worker完成了自己的工作,结果就被传给了leader进程。 workers和leader进程之间使用消息队列(依赖共享内存)进行通信。每个进程有两个队列:一个是error队列;一个是tuples队列。 并行顺序扫描(Parallel sequential scan) 在PostgreSQL 9.6中,增加了对并行顺序扫描的支持。顺序扫描是在表上进行的扫描,在该表中一个接一个的块顺序地被评估。就其本质而言,顺序扫描允许并行化。这样,整个表将在多个workers线程之间顺序扫描。 并行顺序扫描快并不是因为可以并行地读,而是将数据分散到了多个cpu。 abce=# explain analyze

这五年的工作经验是假的吧?怎么连这些HashMap问题都回答不出来

允我心安 提交于 2020-10-10 22:48:37
# 前言 最近,面试一位工作五年的同学,问了一些关于HashMap的问题,都回答不出来,感觉他这五年的工作经验,跟别人工作一年的没啥差别,就只是年龄长了。因此,本文把面试中HashMap常见的考点给大家汇总一下,为什么面试官爱问它,因为它是工作中最最最常用的数据结构之一。 比如 Leetcode 第一题 Two Sum 的某种变种的最优解就是需要用到 HashMap 的,高频考题 LRU Cache 是需要用到 LinkedHashMap 的。 HashMap 用起来很简单,底层实现也不复杂,先来看几道常见的面试题吧。相信大家多多少少都能回答上来一点,不清楚的地方就仔细阅读本文啦~ == 和 equals() 的区别? 为什么重写 equals() 就必须要重写 hashCode()? Hashtable, HashSet 和 HashMap 的区别和联系 处理 hash 冲突有哪些方法?Java 中用的哪一种?为什么?另一种方法你在工作中用过吗?在什么情况下用得多? 徒手实现一个 HashMap 吧 本文分以下章节: Set 和 Map 家族简介 HashMap 实现原理 关于 hashCode() 和 equals() 哈希冲突详解 HashMap 基本操作 高频面试考题分析 # Set 家族 在讲 Map 之前,我们先来看看 Set。 集合的概念我们初中数学就学过了

HashSet扩容机制在时间和空间上的浪费,远大于你的想象

六眼飞鱼酱① 提交于 2020-10-02 12:07:33
一:背景 1. 讲故事 自从这个纯内存项目进了大客户之后,搞得我现在对内存和CPU特别敏感,跑一点数据内存几个G的上下,特别没有安全感,总想用windbg抓几个dump看看到底是哪一块导致的,是我的代码还是同事的代码? 很多看过我博客的老朋友总是留言让我出一套windbg的系列或者视频,我也不会呀,没办法,人在江湖飘,迟早得挨上几刀,逼着也得会几个花架子😄😄😄,废话不多说,这一篇就来看看 HashSet 是如何扩容的。 二:HashSet的扩容机制 1. 如何查看 了解如何扩容,最好的办法就是翻看HashSet底层源码,最粗暴的入口点就是 HashSet.Add 方法。 从图中可以看到最后的初始化是用 Initialize 的,而且里面有这么一句神奇的代码: int prime = HashHelpers.GetPrime(capacity); ,从字面意思看是获取一个质数,哈哈,有点意思,什么叫质数? 简单说就是只能被 1 和 自身 整除的数就叫做质数,那好奇心就来了,一起看看质数是怎么算的吧! 再次截图。 从图中看,HashSet底层为了加速默认定义好了 72 个质数,最大的一个质数是 719w ,换句话就是说当元素个数大于 719w 的时候,就只能使用 IsPrime 方法动态计算质数,如下代码: public static bool IsPrime(int

利用Java实现索引库相关的分页、排序和聚合[图]

坚强是说给别人听的谎言 提交于 2020-09-29 11:02:16
学习计划安排,利用Java代码来实现对索引库的各种操作: 通过自定义方法实现匹配查询、范围查询。 原生的查询代码又是如何编写的? 最后还有聚合相关的代码编写。 一、自定义方法 昨天学了最基础的几种增删改查方法,但查询在实际应用中显然没这么简单。 比如用户要匹配查询,前几天我们有学过,有match匹配和term匹配两种常用的方式。 这些在Java中又是哪些方法来对应呢? 有原生的方法可以是使用,但是比较麻烦,这里使用springdata提供的自定义方法。 1自定义方法实现多种查询方法 昨天有使用到findAll()方法,这是自带的方法,看其语义也就能知道其实查询所有数据。 但是很多时候并不是一个查询所有方法就能解决的,所以需要自己自定义说明。 ①queryItemsByTitleMatchs 方法名一定要按照其格式来,一看到也就很好理解,是根据Title这个字段匹配查询。 其中后面还可以接“And”“Or”这些逻辑运算,实现布尔查询。 ②queryItemsByPriceBetween 一样的道理,范围查询也有其格式,也就是between这个单词的使用。 总之:自定义方法之后,不需要我们写具体是如何查询的了,可以直接使用,但是方法名需要遵循命名规范,如果不能正常使用,极有可能就是方法名格式不对。 2自定义方法的使用 ①根据Title词条匹配 直接调用自定义的match匹配方法

ELK 中 Kibana 使用教程

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-18 19:49:39
Kibana 使用教程 Kibana 是什么 Kibana 是为 Elasticsearch 设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。 下面分别演示一下 Kibana(7.8.1 版本 ) 的自定义索引,搜索,控制台调用 es 的 api 和可视化等操作,特别需要注意的是,控制台可以非常方便的来调用 es 的 api ,强烈推荐使用。 如何加载自定义索引 访问本地 kibana 路由 http://27.0.0.1:5601/app/kibana#/home 展开左侧边栏,点击 【 Stack Management 】 点击 【 Index Pattern 】,再点击 【 Create index pattern 】 按钮 输入索引名字,可以支持模糊查询字符 *,注意不能使用空格和特殊字符 \, /, ?, ", <, >, | .。点击下一步【Next step】 Logstash 数据集会包含时间序列数据,所以确保 Time-field name 下拉列表中选择 @timestamp 字段。点击【 Create index pattern 】。索引创建成功。 搜索数据 使用一下 kibana 查看索引数据。点击左侧边栏【

Linux内核 TCP/IP、Socket参数调优

偶尔善良 提交于 2020-08-16 11:42:19
/proc/sys/net目录    所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这些重要的参数: 参数(路径 + 文件) 描述 默认值 优化值 /proc/sys/net/core/rmem_default 默认的TCP数据接收窗口大小(字节)。 229376 256960 /proc/sys/net/core/rmem_max 最大的TCP数据接收窗口(字节)。 131071 513920 /proc/sys/net/core/wmem_default 默认的TCP数据发送窗口大小(字节)。 229376 256960 /proc/sys/net/core/wmem_max 最大的TCP数据发送窗口(字节)。 131071 513920 /proc/sys/net/core/netdev_max_backlog 在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。 1000 2000 /proc/sys/net/core/somaxconn 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。 128 2048 /proc/sys/net/core/optmem_max 表示每个套接字所允许的最大缓冲区的大小。

性能分析之TCP全连接队列占满问题分析及优化过程(转载)

十年热恋 提交于 2020-08-15 01:47:13
前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的。 理解下TCP建立连接过程与队列 从图中明显可以看出建立 TCP 连接的时候,有两个队列: syns queue (半连接队列)和 accept queue (全连接队列),分别在第一次握手和第三次握手。 半连接队列: 保存 SYN_RECV 状态的连接。 控制参数: 半连接队列的大小:min(backlog, 内核参数 net.core.somaxconn,内核参数tcp_max_syn_backlog). net.ipv4.tcp_max_syn_backlog:能接受 SYN 同步包的最大客户端数量,即半连接上限; tcp_syncookies:当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; accept队列-全连接队列: 保存 ESTABLISHED 状态的连接。 控制参数: 全连接队列的大小:min(backlog, /proc/sys/net/core/somaxconn),意思是取backlog 与 somaxconn 两值的最小值, net.core.somaxconn 定义了系统级别的全连接队列最大长度,而 backlog 只是应用层传入的参数,所以 backlog 值尽量小于 net.core

找出不超过40亿个给定整数的整数

喜夏-厌秋 提交于 2020-08-13 17:15:33
问题: It is an interview question: 这是一个面试问题: Given an input file with four billion integers, provide an algorithm to generate an integer which is not contained in the file. 给定一个具有40亿个整数的输入文件,请提供一种算法来生成文件中不包含的整数。 Assume you have 1 GB memory. 假设您有1 GB的内存。 Follow up with what you would do if you have only 10 MB of memory. 如果只有10 MB的内存,请执行后续操作。 My analysis: 我的分析: The size of the file is 4×10 9 ×4 bytes = 16 GB. 文件大小为4×10 9 ×4字节= 16 GB。 We can do external sorting, thus we get to know the range of the integers. 我们可以进行外部排序,因此我们可以了解整数的范围。 My question is what is the best way to detect the missing integer

mysqldump导出数据库报mysqldump: Couldn&apos;t execute &apos;SELECT

我的梦境 提交于 2020-08-12 17:38:07
mysqldump命令:   导出数据库:mysqldump -h ip -u root -p dbname > db.sql;   导出数据库中的某个表:mysqldump -h ip -u root -p dbname tablename > tablename.sql; 错误提示:   mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS 原因:   因为新版的mysqldump默认启用了一个新标志,通过- -column-statistics=0来禁用他 解决方法:   mysqldump --column-statistics=0 -h ip -u root -p dbname > db.sql; 补充:mysqldump无法使用通配符* 来源: oschina 链接: https://my.oschina.net/u/4362486/blog/4295728

有关 HashMap 面试会问的一切

天大地大妈咪最大 提交于 2020-08-12 15:20:36
前言 HashMap 是无论在工作还是面试中都非常常见常考的数据结构。 比如 Leetcode 第一题 Two Sum 的某种变种的最优解就是需要用到 HashMap 的,高频考题 LRU Cache 是需要用到 LinkedHashMap 的。 HashMap 用起来很简单,底层实现也不复杂,先来看几道常见的面试题吧。相信大家多多少少都能回答上来一点,不清楚的地方就仔细阅读本文啦~这篇文章带你深挖到 HashMap 的老祖宗,保证吊打面试官 == 和 equals() 的区别? 为什么重写 equals() 就必须要重写 hashCode()? Hashtable, HashSet 和 HashMap 的区别和联系 处理 hash 冲突有哪些方法?Java 中用的哪一种?为什么?另一种方法你在工作中用过吗?在什么情 况下用得多? 徒手实现一个 HashMap 吧 本文分以下章节: Set 和 Map 家族简介 HashMap 实现原理 关于 hashCode() 和 equals() 哈希冲突详解 HashMap 基本操作 高频面试考题分析 Set 家族 在讲 Map 之前,我们先来看看 Set。 集合的概念我们初中数学就学过了,就是里面不能有重复元素,这里也是一样。 Set 在 Java 中是一个接口,可以看到它是 java.util 包中的一个集合框架类,具体的实现类有很多: