记录 ES 使用分页查询的几种方式
摘自:https://cloud.tencent.com/developer/article/2110964 ES 支持的三种分页查询方式 From + Size 查询 Search After 查询 Scroll 遍历查询 「说明:」 官方已经不再推荐采用Scroll API进行深度分页。如果遇到超过 10000 的深度分页,推荐采用search_after + PIT。 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/paginate-search-results.html。 分布式系统中的深度分页问题为什么分布式存储系统中对深度分页支持都不怎么友好呢? 首先我们看一下分布式存储系统中分页查询的过程。 假设在一个有 4 个主分片的索引中搜索,每页返回10条记录。 当我们请求结果的第1页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点 ,协调节点对 40 个结果排序得到全部结果的前 10 个。 当我们请求第 99 页(结果从 990 到 10...
ES 分享会:从倒排索引到生产实践
ES 分享一. 建立倒排索引的认识 倒排索引是一种索引方法,用来存储全文搜索下某个单词在文档中的位置映射。 以古诗问答为例来理解倒排索引: 问:说出带"前"字的古诗词 问:背一下李白的《静夜思》—— 窗前明月光,疑是地上霜 背诗的方式:按书中排列顺序,先记诗名再记内容 具象化到关系库模型: 在脑子中形成的索引是这样的: 建立了 name 的索引后,根据 name 找 content 就会很快(SELECT * FROM 古诗 WHERE name = '静夜思'),但反过来查包含某字的诗就变成全表扫描(SELECT name FROM 古诗 WHERE content LIKE '%前%')。 如果以"前"字作为索引,则可以解决这个问题: 但整首 20 字的古诗每个字都适合做索引,光唐诗就有 5 万多首,全部建索引不现实。由于已经可以通过诗名回忆整首诗,所以只需索引到诗名即可: 多首诗的情况: 以上就是倒排索引的入门讲解。 补充: ES 默认对全部字段建立索引,如古诗表中 ...
记录 Docker 集群部署 ES 7.x
三台机器 192.168.56.105 192.168.56.106 192.168.56.107 前置准备(防止 JVM 报错)12345sysctl -w vm.max_map_count=262144#只是测试,所以临时修改,永久修改使用下面echo vm.max_map_count=262144 >> /etc/sysctl.confsysctl -p es-node1 1234567891011121314151617181920212223242526272829# 集群名称,相同名称为一个集群cluster.name: elasticsearch-cluster# 节点名称,集群模式下每个节点名称唯一node.name: es-node1# 监听地址,用于访问该es,0.0.0.0代表不限制network.host: 0.0.0.0# 表示这个节点是否可以充当主节点node.master: true# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip)network.publish_host: ...
git命令(长期)
git回滚上一个版本/回滚到上个版本123456789linux:git reset --hard HEAD^windows:git reset --hard HEAD"^"git reset --hard HEAD~<n>然后执行git push --force <origin master(可选)> (强制推送分支) 回滚到指定版本1234git reset --hard <hashid>然后执行git push --force <origin master(可选)> (强制推送分支) git commit之后,想撤销commit123git reset --soft HEAD^:撤销上一个commitgit reset --soft HEAD~2:撤销前两个commitgit commit --amend:修改注释 强制提交1git push -u origin 分支 -f git强制更新并覆盖本地修改123git reset --hard origin/develop //使用指定分支...
git问题处理
不小心使用 git 强制 push 推送了代码, 希望回退到 push 前的状态 如果不小心使用 git 强制 push 推送了代码,还可以回退到 push 前的状态。主要可以通过以下两种方式: 使用 git reflog 查找回退到 push 前的 commit git reflog 会记录最近的操作和 commit 记录,找到 push 前的提交点。 然后使用 git reset --hard <commit> 回退到那个提交点即可。 如果进行了多次 push,reflog 记录很乱,可以回退到某个知道的良好版本 例如回退到版本 v1.2: 1git reset --hard v1.2 然后使用 git push -f 强制推送来覆盖之前的错误提交。 当然最好的方式还是在推送前使用 git stash 暂存变更,或新建分支进行操作。 但强制 push 后的恢复还是可以的,主要是使用 git 提供的回退机制来撤销错误的提交。 git通过ssh认证拉取代码失败,需要手动输入密码: 解决方法 eval ssh-agent -s #启动ssh-agent...
Git 中 merge 和 rebase 的区别
Git 中 merge 和 rebase 的区别参考: https://developer.aliyun.com/article/652579 简介: $ git pull --rebase和$ git pull区别 是git fetch + git merge FETCH_HEAD的缩写,所以默认情况下,git pull就是先fetch,然后执行merge操作,如果加-rebase参数,就是使用git rebase代替git merge 。 $ git pull --rebase和$ git pull区别是git fetch + git merge FETCH_HEAD的缩写,所以默认情况下,git pull就是先fetch,然后执行merge操作,如果加-rebase参数,就是使用git rebase代替git merge 。更新本地仓库 merge 和 rebasemerge 是合并的意思,rebase是复位基底的意思。现在我们有这样的两个分支,test和master,提交如下: 123 D---E test /A---B---C---F master 在...
配置ssh key(一个或多个key)
配置一个SSH Key 生成ssh公私钥(默认就是2048字节, 邮箱也可以不加,邮箱是作为title存在, 所以可以配置个有标识性的名称之类的): ssh-keygen -t rsa -C "yourEmailAddr" -b 2048 如果ssh密码没有配置在默认路径, 需要按照如下步骤进行配置 启动ssh-agent:eval ssh-agent -s添加私钥到agent【ssh-add "私钥文件地址" 】 如:ssh-add "c:/Users/xxx/.ssh/id_rsa" 第二步提示:Could not open a connection to your authentication agent,执行ssh-agent bash 将公钥添加到远端库ssh管理处(github/gitee/gitlab) clone 代码:git clone git@xxx.git 配置多个SSH Key场景描述开发人员通常只会生成一个SSH Key,名字叫id_rsa,然后提交到多个不同的网站(如:GitH...
golang建立项目以及go-module和vendor的区别
$GOPATH默认位置 操作系统 默认路径示例 环境变量表示法 macOS /Users/用户名/go $HOME/go Linux /home/用户名/go $HOME/go Windows C:\Users\用户名\go %USERPROFILE%\go not a valid zip filegithub.com/shirou/gopsutil/process: zip: not a valid zip file 此类问题多是因为GOPROXY所导致。 使用https://mirrors.aliyun.com/goproxy/,direct的时候,在进行go build/go mod tidy等指令时就会出现此错误。 换成https://goproxy.cn,direct即可。 123456789101112131415161718192021$ mkdir go-example && cd go-example#GO111MODULE=on,使用go module,不使用GOPATH#GO111MODULE=off,使用GO...
pprof 调优学习
Go性能优化 测试代码: https://github.com/behappy-project/behappy-url-shortener Go语言项目中的性能优化主要有以下几个方面: CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile(Heap Profile):报告程序的内存使用情况 Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈 Goroutine Profiling:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的 采集性能数据Go语言内置了获取程序的运行数据的工具,包括以下两个标准库: runtime/pprof:采集工具型应用运行数据进行分析 net/http/pprof:采集服务型应用运行时数据进行分析 pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取各个函数占用的CPU以及内存资源;最后通过对这些采样数据进行分析,形成一个性能分析报告。...
BigDecimal工具类小记
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120...
