自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 ClickHouse/Doris vs Elasticsearch谁更胜一筹?

我之前在ClickHouse vs Doris 读写性能比较一文中,初步做了一下ClickHouse和Doris的读写性能比较,但由于数据样本比较小,且未发挥出所有硬件资源的性能,因此进行了第二轮压测。新加入了Elasticsearch搜索引擎ClickHouse和Doris均采用多并发写入,发挥最大性能本轮测试得到了飞轮科技多位技术专家的指导,对Doris进行了一定的参数调优环境准备(硬件机器配置同上一篇文章)clickhouse集群节点IP分片编号副本编号ck9311ck941。

2024-01-21 08:51:42 2661 1

原创 Apache Doris 数据库有哪些应用场景?

所谓的runtime filter,因为一般左表join右表,右表需要加载到内存,通常会比较小,所以当扫描左表和加载右表同时进行时,右表一般会率先完成,此时根据 join on cause动态生成一些过滤条件,并广播给正在各个节点扫描的左表,使得左表扫描的数据量减少,从而加速整个查询,避免不必要的网络开销。Doris物化视图比较牛逼的地方在于,它可以在查询时自动匹配,也就是说,在查询时,我们依然可以查底表,Doris会根据查询语句自动选择一个最优的物化视图进行查询,而不需要显示地指定查询物化视图。

2024-01-21 08:50:16 1943

原创 ckman:非常好用的ClickHouse可视化集群运维工具

点击主页的,就会进入创建集群的界面:: 集群的名字,注意不要和ckman已有的名字重合: 安装包类型,用来区分平台和架构,不需要自己填写,上传安装包后可通过下拉框选择。如果选择的平台和架构不正确,如在arm的机器上部署x86的安装包,则不会成功。ck的版本,不需要自己填写,通过下拉列表选择,下拉列表中会列出ckman服务器中所有的安装包版本。此处版本信息只会列出当前ckman服务下的安装包版本,如果配置了多中心,其他ckman的安装包是无法看见的在部署集群之前,需要先上传安装包。

2024-01-20 15:18:56 4338

原创 在k8s上部署ClickHouse

clickhouse的容器化部署,已经有非常成熟的生态了。在一些互联网大厂也已经得到了大规模的应用。clickhouse作为一款数据库,其容器化的主要难点在于它是有状态的服务,因此,我们需要配置PVC。kubectl 原生部署这种方式部署流程复杂,需要管理的资源非常多,稍不留神就容易出错维护繁琐,涉及到集群的扩缩容、rebalance等操作会很复杂非常不推荐这种部署方式kubectl + operator部署资源集中管理,部署方便维护方便业界已经有成熟的方案,如等。

2024-01-20 12:23:12 2910

原创 ClickHouse与Doris数据库比较

但kafka的数据是固定的,kafka里的数据是30G(kafka也有自己的压缩算法,使用的是zstd),写入到clickhouse后数据为10.17GB,这个大小没有算入副本,如果算上副本,应该乘以2,也就是20.34GB。对比无干扰时写入,写入性能仅下降5-10%左右,这主要是因为写入本身消耗的节点资源就比较少,当查询的资源被限制,clickhouse的节点就有足够多的资源去保障写入,并且我们通过配置简单的读写分离的方式,让查询请求尽量分配到不同的副本节点,可以进一步减小查询对写入的影响。

2024-01-20 11:54:46 2958

原创 clickhouse到底有哪些吊炸天的优化?

从技术实现上来说,肯定是可行的。上面有三个part,现在我的诉求是查询出其中>=3且<=5的所有数据,虽然在各个part内部,数据本身是有序的,但是这三个part很不凑巧地都包含了3~5的范围,因此必须每个part都扫描一遍,而实际上,part3是没有任何符合条件的数据的,所以这个扫描其实是无用的操作。热数据,经常会被查询的数据(比如近两三天的数据),存储到固态磁盘,这样不论是写入,还是查询都非常快,超过一定时间的数据,可以通过存储策略转移到机械磁盘上,因为查询频率并不怎么高,那么受到的影响就会有限。

2024-01-20 11:50:54 1924

原创 clickhouse 代替 es 如何对文档做模糊查询?

模糊查询在日志存储的场景中非常普遍。ClickHouse作为大数据分布式引擎,理所当然地会被作为日志存储的备选方案。事实上使用ClickHouse作为日志存储方案,业界目前也已经在多家企业落地,比如Uber、石墨文档、映客、快手、携程、唯品会等。日志查询的一个最大的特点是,几乎极少涉猎点查询,而模糊查询则占据了绝大部分使用场景。这也是为什么ES凭借其逆天的分词能力在日志存储领域杀疯了的原因。但ES存储的瓶颈近些年也逐渐显现, 如压缩率低,需要较大的存储成本,当数据量过大时,查询性能也比较差。

2024-01-20 11:48:06 2674

原创 内存泄漏专题(9)内存池陷阱

如上所示,我们每次都从父池子里申请一个子池子,然后使用完成后,调用apr_pool_destroy将子池子的内存归还给父池子,这样,只要每一轮调用中,没有特别出格的内存调用,父池子的大小会保持在一个相对稳定的大小,而不会无线扩张。我们在程序一开始申请了一个内存池,然后进入mainloop进行业务处理,这个mainloop通常是不会退出的,只有当接收到了退出信号的时候,才会退出,在退出的时候,会销毁内存池。理论上来说,内存池应该是非常安全的才对,我又为什么说内存池会有内存泄漏的陷阱呢?

2023-07-26 16:41:43 284

原创 内存泄漏专题(8)hook之C++运算符重载

类,该类用来存储内存信息,包括内存的地址,大小。如果愿意的话,还可以存储调用的位置,这里为了简化处理,就不演示了。的内存管理是交由编译器处理的,虽然程序员无需手动管理,但实际上也调用了。中是否还有没有元素存在,就知道还有没有内存泄漏了。是智能指针,其内存的生命周期由编译器进行管理,无需手动释放,在。因此,该段代码有两处内存泄漏,分别为指针。函数结束后才会进行,因此,我们只需要在析构函数中判断一下,可以看到,确实打印出了两处内存泄漏,第一处是。的内存只有申请,没有释放,对象只有申请,没有释放,

2023-07-26 15:31:48 345

原创 内存泄漏专题(7)hook之宏定义

在此之前,我们封装一个链表,用来存储每次申请内存的地址以及申请内存的大小,在每次申请内存的时候,向链表添加一条数据,每次释放的时候,将对应的记录删除掉,那么,当程序结束,如果链表还有数据,那就是没有释放的泄露部分的内存。我们注意在第1行包含了头文件,并在第4行和14行分别调用了mcheck的接口,这样的话,就可以检测出这个过程中出现的内存泄露问题,以上代码运行会产生一个名为。它告诉我们第6,11,13行分别出现了内存泄露,大小是多少,调用的那么函数申请的内存,还是比较详细的。函数时,先调用我们自己定义的。

2023-07-26 15:29:53 435

原创 内存泄漏专题(6)AIX系统内存泄漏调试浅探

AIX系统作为IBM公司PowerPC架构的一款比较典型的操作系统,虽然随着Linux的免费开源的普及,市面上几乎很少见,但仍然广泛存在于政府、银行、证券等核心系统中。由于该系统闭源,很多调试手段都无法在AIX上有效运用,比如mtracebccvalgrind等,空有神力,却无法为之臂助。好在IBM自己提供了一套内存泄漏的调试工具,可以比较方便的定位与调试。当然,要想排查内存泄漏,首先我们得确认程序有没有内存泄漏。你可以使用诸如nmon之类的监控工具持续观察某个程序内存的使用情况,看它有没有持续上涨。

2023-07-03 16:58:39 586

原创 内存泄露专题(5)动态内存追踪大杀器:bcc

eBPF这几年网上炒得很热,甚至于有许多开发者十分迷信该技术,虽然eBPF的确能解决不少问题,但这种技术是否能真正用于生产环境,其实是需要根据场景而异的。这里就不做过多的篇幅来讲述eBPF的概念了,感兴趣的可以上网自己查找相关资料。bcc是一个eBPF的工具集,使用C/C++实现,外层使用python进行封装。由于eBPF需要以上才能够支持,因此,如果你的服务器是CentOS7或者比较低版本的Ubuntu,都是无法使用该工具的。笔者所使用的的服务器是CentOS7.9,内核版本为3.10.0。

2023-06-28 08:05:31 967

原创 内存泄露专题(4)mtrace内存追踪

等内存申请释放的调用处,插入自己的一些代码,用来记录内存的信息,包括指针的地址,内存块的大小等。的内存信息,其中包含有内存申请的地址,内存申请的大小,释放内存的地址,释放内存的大小。内存并没有释放,所以这段程序是会内存泄漏的。行,它告诉我们下面这些内存是没有被释放的,其次可以看到从第。系统内核自带的一个内存追踪的函数,它会在每个内存申请函数。工具集中的一个,所以如果系统没有该命令的话,可以使用。的位置记录下信息,并在每个内存释放的位置记录下。函数取消内存使用记录。大小的内存没有被释放,这个大小,转成。

2023-06-28 08:03:40 2166

原创 内存泄漏专题(3)内存泄漏调试神器valgrind

追踪内存泄漏的工具有很多,网上一搜能找到一大片,但针对不同的系统,均有不同的玩法,且有些东西,如果不是实际实战一把,真到了用的时候,仍然会眼高手低,不知如何下手。上一章中,我们提出了排查内存泄漏是否存在的几种思路,但只是停留在理论上,本章就这几种思路提供具体的解决方案。在本章节,将以具体的例子的方式来演示如何定位内存泄漏的具体位置。的初学者对该工具都不陌生,很多内存检测的入门教程都会提到该工具。对于内存泄漏的定位还是非常准确的,因此不失为一个内存泄漏调试的好手段。行则报告了内存泄漏的信息,说有一次。

2023-06-28 07:59:57 524

原创 内存泄漏专题(2)如何判断程序有内存泄露

当内存池化之后,由于对于内存的申请和销毁都是先由内存池初始化时向系统申请一块内存,在程序结束时销毁该内存池,中间所有关于内存的操作都是针对池子而言的,因此不太容易出现内存泄漏。如果某个程序是长期运行的,那么可能申请的内存一直存在于池子中,不会得到销毁,定长内存池相对好一点 ,特别是对于非定长的内存池,如果在程序中一味地从池子中申请内存,但并没有在适当的地方及时归还给池子,同样会造成内存越用越大,导致系统内存耗尽。这时候,我们可能要借助一些其他的调试手段或者第三方工具,来判断是否有内存泄漏,比如著名的。

2023-06-28 07:57:32 373

原创 内存泄露专题(1)何为内存泄露

只有对那些占用内存比较小的变量,对执行效率要求比较高的地方,可能直接使用栈上的内容,对于一些比较占用内存的结构,比如结构体、字符串等,通常的做法,都是在堆上申请内存。所谓内存泄漏,就是由于程序主动申请了内存,但是又没有主动释放它,那么这块内存可能就会一直驻留在进程中,只要进程不结束,内存就一直不释放。类的守护进程,一旦发生内存泄漏,那么后果是不可设想,因为在长时间的运行过程中,进程一点点蚕食系统内存,最终可能导致系统内存耗尽,从而导致系统崩溃。诞生的那一天起,内存和指针就好比天上的两朵乌云,笼罩在无数。

2023-06-28 07:53:52 168

原创 C语言获取服务器MAC地址

在Linux系统,可以通过系统调用函数ioctl很容易就获取到服务器的mac地址。它的信息保存在结构体中,有可能不止一个。获取到的信息保存在ifc_buf中。通过上面简单的两步,就能获取到Linux服务器上所有的网卡对应的mac地址。可见,取出来的mac地址是正确的。

2023-06-25 07:45:17 1109

原创 wtmp日志读取

之前遇到一个AIX服务器登录不上,但是能ping通的事情。一开始我怀疑是sshd服务坏掉了,但是使用telnet也无法登录。好在这台机器所在的机房就在我隔壁,于是外接显示器,直接上机操作。好在直接通过物理介质还是能登录得上去的。上去一看,好家伙,直接提示根目录磁盘不足了。于是就查跟目录下都有哪些东西占用了比较大的空间。不看不知道,一看吓一跳,根目录下一共3.2G/var/log下一个wtmp文件就占了2.8G。那么这个wtmp是啥?能不能删除呢?查了一下资料,才知道这个wtmp。

2023-06-16 18:48:37 2792

原创 C语言柔性数组

所谓柔性数组,是C语言中的一个概念,也叫零长数组。顾名思义,这个数组的长度是不固定的,当没有值时,它的sizeof长度为0。上面的结构体中的char buf[]就是一个柔型数组。那么,怎样才算满足一个柔型数组的定义呢?

2023-06-15 09:21:13 963

原创 AIX5.3安装Python3遇到的坑

最近在折腾AIX5.3,这是一款非常古老的power架构的服务器,目前IBM官方已经不维护,但是仍然在很多银行里跑着比较核心的业务,由于我们的客户大部分是面向银行,少不了要做AIX5.3上的应用软件适配。本文记录在AIX5.3上编译安装Python3时遇到的一些坑。由于AIX5.3非常古老,基本上很难找得到可以用的Python3安装包,只能通过源码编译的方式进行编译。在此之前,需要安装好gcc编译器。安装过程不表(坑也比较多,但都是rpm安装,这里就不详细展开了),我安装的gcc版本是4.8.4。

2023-06-07 11:44:39 724

原创 C语言获取Linux单网卡的多IP地址

上一篇文章主要讲了AIX系统下的单网卡多IP的IP的配置以及C语言获取的方法。相比AIX,Linux下配置就方便得多。首先找到我们需要配置的网卡名,比如p2p2, 进入到目录,找到ifcgf-p2p2如上图,我们增加了两个IP, 一个为,一个为。完成后,从ifcofig但是用ip a。

2023-05-31 13:46:07 1219

原创 C语言获取AIX单网卡的多IP地址

在AIX上,可以使用命令给单个网卡配置多个IP别名。en1IPNETMASKF10查看网卡信息,已经配置完成。

2023-05-30 18:46:33 1003

原创 clickhouse的BACKUP/RESTORE命令介绍

无论是备份还是恢复,执行效率都非常高同压缩比备份,支持不同的备份目的地支持增量备份需要开放配置,操作性上不太友好集群备份到本地时,必须要选共享目录,如果每个分片单独备份,则无法进行数据汇总,存留于节点自身,与没有备份没什么区别,还不如多加副本数据恢复功能尚不太完备推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,

2023-05-29 10:44:08 3394 4

原创 docker 解析DNS失败

我之前在docker里部署的容器,今天突然访问不了了,一开始我以为是容器的问题,将容器restart,销毁重建,都没有解决。里面报大量的DNS解析错误。是没有问题的。

2023-05-29 10:15:38 2504

原创 go embed 实现gin + vue静态资源嵌入

golang1.16出来以后,早就有打算把项目的前端代码打包更换成embed。在此之前,使用的是进行的打包。但是今天打包时却报了个错:而且通过各种手段尝试均无果之后,果断把决定立即将其更换为embed进行资源嵌入管理。但是在折腾的时候,其实也是遇到了不少的坑,在这里总结一下。关于embed,具体的功能这里就不多做介绍了,网上有一堆资料,但是这些资料并不能解决我的问题,我翻阅了无数的网页,也没有找到一个能确切解决我的问题的方案。因此决定自己记录一下。

2023-05-25 18:25:53 4100 2

原创 SUSE系统修改静态IP

Suse系统使用yast管理配置,默认创建虚拟机,是使用DHCP获取动态IP的,这样非常不利于管理。因此,最好使用静态IP。推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,键切换到需要修改的位置,直接向后删除修改即可。修改完成后,立即生效,不需要重启网络,且机器。, 否则后面的修改会不生效。下面可以填写一些国内比较快的。

2023-05-23 08:21:19 1674

原创 性能媲美epoll的io_uring

io_uring通过队列将send和recv的数据做到异步解耦,从而提升了性能,但是相比于epollio_uring过分依赖于内核版本(kerner5.10以上),且操作相对比较繁琐。因此,现阶段可以作为了解,主流使用应该还是以epoll为主。C/C++Linux服务器开发/高级架构师。

2023-05-23 07:51:42 620

原创 GDB调试无行号,报dwarf error问题解决

的问题,网上很多资料说得很含糊,大多也都一知半解,真要深入研究,还是有很多坑的。一般出现在gcc编译环境版本与gdb调试环境版本不匹配导致,一般可以通过编译时指定dwarf版本解决除了我们自身的源码需要指定dwarf版本,程序所依赖的第三方库也需要使用指定的dwarf版本进行编译推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,

2023-05-20 08:28:54 6401 6

原创 实战TCP三次握手

在几乎所有的后端开发面试题中,TCP三次握手绝对是最被面试官青睐的题目之一。但是这个东西,平时开发中看不见,摸不着,对于很多人来说,是纯理论的知识,玄之又玄。但是为了应对面试,又不得不去死记硬背。就……真的是硬背。我之前面试过一个小哥,问了一嘴三次握手,这小哥掰着手指头搁那背,ACK和SEQ都搞反了,我问他SYN标志代表什么意思,也说不大清楚。所以是不是真的搞懂了,一问便知。

2023-05-20 07:49:02 2139 1

原创 深入浅出字符编码

else {} }要问为什么是这段代码?我们往往也能说得出:因为大小写字母在ASCII码上正好相差32(字符'a'为97, 字符'A'为65)。我们在进行字符初始化的时候,往往会将字符初始化为'\0'。因为'\0'在ASCII码中对应的数值是0。我们理所应当地知道char型字符对应的范围是0~127,因为ASCII码的范围就是0~127。但是有没有想过,为什么是ASCII码?所谓的ASCII码,又到底是什么?要说起ASCII码,不得不说起编码格式。

2023-05-08 07:51:35 445

原创 7种常见网络并发模型介绍

对于网络服务器后端开发,为满足不同并发场景的需要,一般来说,不外乎几种常见的并发模型,除了一些教学场景常用的单线程、多进程(线程)的服务器实现外,生产用的服务器,一般都会考虑使用IO多路复用模型。而常见的IO多路复用场景 ,可以设计得很简单,也可以设计得比较复杂,一般根据业务需要而定。本文总结了一些比较常见的服务器并发模型,基本涵盖了 大部分业务场景。在实际业务开发的技术选型时,可根据场景,选取一款稳定、可靠的网络模型,还是十分关键的。

2023-05-08 07:42:53 1619

原创 一文说透IO多路复用select/poll/epoll

如果我们要开发一个高并发的TCP程序。常规的做法是:多进程或者多线程。即:使用其中一个线程或者进程去监听有没有客户端连接上来,一旦有新客户端连接,就新开一个线程(进程),将其扔到线程(或进程)中去处理具体的读写操作等业务逻辑,主线程(进程)继续等待,监听其他的客户端。这样操作往往存在很大的弊端。首先是浪费资源,要知道,单个进程的最大虚拟内存是4G,单个线程的虚拟内存也有将近8M,那么,如果上万个客户端连接上来,服务器将会承受不住。其次是浪费时间,因为你必须一直等在accept那个地方,十分被动。

2023-05-07 09:36:33 656

原创 记一次goroutine泄漏的问题

Golang因为有着比线程更加轻量级的协程的出现,使得并发编程的上手难度一下子变得亲民起来。而channel的引入,使得goroutine之间的通信变得异常的便捷。但好用并不意味着毫无风险,go channel使用不当,也极易引起goroutine泄漏。何谓goroutine泄漏?就是开启了goroutine,却并没有及时回收,导致goroutine越积越多,如果程序及时关闭还不会出现问题,如果是在服务器中,程序长期运行,就会导致资源占用十分恐怖。虽然goroutine比线程更轻量级,但每个gorou

2021-02-05 16:11:48 472

原创 PMP考试计算题专题

进度管理三点估算三点估算是估算活动活动持续时间过程的工具,它是通过活动最可能、最悲观、最乐观三个时间维度,通过设置权重,计算出活动时间的期望值。其公式如下所示:Te=O+P+4M6T_e = \frac{O+P+4M}6Te​=6O+P+4M​其中TeT_eTe​表示活动时间期望值,O表示最乐观时间,P表示最悲观时间,M表示最可能时间。另外,还有一个名词,叫做标准差(σ\sigmaσ), 它一般以 正态分布的方式表示,见下图。即±\pm± 1个σ\sigmaσ的面积为68.3%;±\pm±

2020-08-07 22:22:36 6318 1

原创 Docker轻松入门指南

安装docker在Deepin下安装卸载旧版本的docker:sudo apt-get remove docker.io docker-engine安装依赖:sudo apt-get install apt-transport-https ca-certificates curl python-software-properties software-properties-common下载并安装秘钥:curl -fsSL https://download.docker.com/linux/

2020-06-25 23:04:05 330

原创 VBA实现ftp文件传输

VBA本身实现ftp的文件传输操作比较复杂,但是可以很方便的调用cmd命令窗口来执行shell命令,也就是调用cmd的小黑框。这对需要远程操作数据十分有用。我们在vb编辑器里输入如下代码:Sub ftp() Dim env_addr, env_user, env_passwd, localftp, ftpfile, cfgfile As String env_addr = "1...

2019-09-19 16:35:10 6614

原创 VBA实现当文件夹不存在时自动创建

VBA也可以很方便的实现文件操作。本文主要实现当文件夹不存在时,自动创建文件夹的功能。假设我们要实现的功能是在D盘根目录下创建vbatest文件夹,可以看到,当前文件夹是不存在的:我们在vb代码编辑器里输入下面的代码:Sub dir() Dim myDir As String myDir = "D:\vbatest" On Error Resume Next ...

2019-09-19 16:26:50 4548

原创 VBA实现文本对比着色

我们在使用Excel处理数据的时候,经常需要对比两行或者两列数据之间的异同。虽然有EXACT之类的函数非常方便的提供了对比功能,但难免还是不够用,特别是需要实现一些个性化的比对的时候。这时VBA就派上了用场,使用VBA代码也能很方便的实现单元格的文本比对着色。只需要在vba代码编辑器里添加如下一段代码即可:Sub diff() Dim wbook As Workbook ChD...

2019-09-19 16:22:27 1544 1

原创 魔性的float浮点数精度问题

从一个问题引入如果你以前接触过C语言,那么对下面的这段代码一定很熟悉:#include <stdio.h>int main(void){ float f_num1 = 21.75; float f_num2 = 13.45; printf("f_num1 = %f\n", f_num1); printf("f_n...

2019-09-18 15:27:42 550

原创 指针函数和函数指针

概述指针函数和函数指针是C语言里两个比较绕的概念。但是不仅面试题爱考,实际应用中也比较广泛。很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对这两个概念也比较模糊,特别是当指针函数、函数指针、函数指针变量、函数指针数组放在一块的时候,能把强迫症的人活活逼疯。其实如果理解了这些概念的本质,是不需要死记硬背的,理解起来也比较容易。指针函数指针函数: 顾名思义,它的本质是一个函数...

2019-03-30 16:21:36 122684 88

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除