自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL库的ranges

C++20的库通过引入范围和视图的概念,不仅丰富了STL的功能,也引领了更现代、高效、表现力强的编程实践。它鼓励开发者采用更函数式和声明式的编程风格,同时保持了与传统STL的兼容,标志着C++在数据处理领域的一大进步。

2024-06-01 22:21:47 911

原创 关于ClickHouse的一些小技巧

ClickHouse的一些有用的功能和使用技巧。

2024-03-17 22:48:58 416

原创 mmap访问内存方式

解释基于mmap的IO操作在某些场景下为什么极为高效。

2024-03-17 22:46:44 367

原创 OLAP与数据仓库和数据湖

本文阐述了OLAP、数据仓库和数据湖方面的基础知识以及相关论文。同时记录了我如何通过ChatGPT以及类似产品(通义千问、文心一言)来学习知识的。通过这个过程让我对于用AI科技提升学习和工作效率有了实践经验和切身感受。

2024-03-17 22:43:50 1005

原创 ClickHouse中的设置的分类

ClickHouse中的设置有几百个,下面对这些设置做了一个简单的分类。

2024-03-17 22:40:21 576

原创 关于ClickHouse的一些小技巧

ClickHouse的一些有用的功能和小技巧。

2024-03-17 22:38:45 352

原创 `static_cast` caustion

【代码】【无标题】

2024-03-17 22:37:20 318

原创 ClickHouse中“大列”造成的JOIN的内存超限问题

大列”是指单行数据量非常大的列,通常是100KiB以上。这样的列会导致JOIN(通常LEFT JOIN 和 INNER JOIN)出现内存超限的异常。本文讨论如何解决这个问题。

2024-01-21 18:55:10 1425

原创 ClickHouse中JOIN算法选择逻辑以及auto选项

Setting配置`join_algorithm`用于指定JOIN算法,它可以设置为多个值,例如join_algorithm='direct,hash,partial_merge'。在选择最终JOIN算法的时候是根据setting配置`join_algorithm`, 以及JOIN操作的Strictness、Kind和参与JOIN的右表表引擎类型共同决定。

2024-01-08 17:56:07 1034

原创 Linux性能调优技术概览

这里的Linux性能调优主要是关于Linux系统上程序的性能跟踪,因为只有收集到足够的准确的性能数据才能找到程序和系统的性能瓶颈。Linux性能调优的原理、框架、工具。下面一一介绍。

2023-12-14 10:37:36 953

原创 ClickHouse的Join算法

即使在ClickHouse中对超大的数据表做JOIN连接运算,我们也可以通过精心选择连接算法和调优相关设置,从而得到非常良好的性能。虽然可以让ClickHouse更加聪明地帮用户做选择,但是目前效果毕竟有限,而且真正高级的性能调优是离不开人的,因为人能掌握更全面的情况,以及实际业务特点和需求。本文可以帮助你理解ClickHouse内部连接的工作方式,从而帮助你做相关的优化。

2023-09-10 21:57:57 1085

原创 一种高效且节约内存的聚合数据结构的实现

在特定的场景中,特殊定制数据结构能够得到更加好的性能且更节约内存。

2023-09-10 21:49:38 452

原创 “过早优化是万恶之源”这句话的源头

来自于一篇大神的论文,而且原意没有一句话那么简单。

2023-09-10 21:44:13 115

原创 ClickHouse的WITH-ALIAS是如何实现的

表达式别名比子查询别名在处理上要复杂的多,因为表达式本身的处理就很复杂。别名机制可以减少SQL查询的大小,但是展开后的AST树的大小不会缩小。虽然如此,却可以在访问者模式的某些Visitor的处理过程中减少Visitor访问的工作量。

2023-09-10 21:39:15 555

原创 cmake简略使用介绍

构建系统对于一个大型项目至关重要,本身就可以看成大项目中的一个子项目。cmake是C++生态环境中常用的构建工具。这里简单介绍一下cmake的用法。

2023-09-10 21:25:30 526

原创 常用ClickHouse问题诊断查询

Clickhouse是一个性能强大的OLAP数据库,在实际使用中会遇到各种各样的问题,同时也有很多可以调优的地方。本文阐述如何对ClickHouse做问题诊断和性能分析。

2023-09-10 21:19:40 750

原创 GIT高级使用技巧

介绍一些高级的GIT使用技巧,对维护GIT仓库很有帮助

2023-09-10 21:16:15 592

原创 对于同一个成员方法分别定义左值和右值的实现版本

有时候需要对同一个成员方法定义不同的实现,比如如果当前`this`右值时,可以用一些移动语义来优化性能。这时候需要通过添加函数的限定符来为this为右值时定义专门的方法实现。

2023-09-10 21:12:39 53

原创 MergeTree表的三种格式

MergeTree表引擎有三种格式:Compact、Wide和In-memory,前两个为主要格式。具体区别是:- Compact - 所有的列的数据放在一个文件;- Wide - 每个列的数据放在一个文件;- In-memory - 数据存在内存中,不在磁盘上

2023-09-10 21:06:38 202

原创 C++ concept的概念和使用

`concept` 这套语法优化了模板编程,替代了原来的SFINAE编程模式,通过给模板类参数加入限制条件,使得代码可读性更强、编译更快、错误提示更容易理解。

2023-09-10 20:58:08 493

原创 深入使用noexcept

`noexcept`是C++11引入的,表明函数是否会抛出异常。正确使用它可以优化性能,错误使用则会带来麻烦。

2023-01-16 20:00:26 3886

原创 如何提高程序性能

本文主要探讨提高程序性能的途径、方法和最佳实践。从“尽可能利用缓存”和“尽可能利用多核”两方面入手提升程序性能。

2022-10-09 21:28:22 695

原创 多线程与同步

多线程并行执行能够大大提升程序运行效率,但是也要注意随之带来的线程间同步问题,避免竞态条件(“Race Condition”)引起的难以发现的bug。这篇总结一下线程的创建和销毁、等待和恢复、加锁和解锁、锁的类型以及在某些情况下可以替代锁的原子操作。...

2022-06-14 19:42:09 467

原创 C++编译器选择是否自动生成代码的背后逻辑

编译器会为class和struct(实际上两者在C++中是一回事)自动生成构造函数、赋值操作符函数和析构函数。如果不是这样,那么开发者就必须自己写一些枯燥冗余的代码。然而编译器并不总是生成这些默认代码,当它觉得它无法生成正确的代码时,它就会拒绝生成默认代码

2022-05-10 16:44:59 538

原创 用指针低三位存放额外信息的优化方法

在8字节对齐的情况下指针的低三位都是0,在某些情况下我们需要维持跟指针对应的额外信息,例如标志位,但是又不想为此创建一个结构体,那就可以利用指针的低三位来存储额外信息。

2022-04-30 23:30:01 275

原创 Clickhouse上用Order By保证绝对正确结果但代价是性能

在Clickhouse中会尽量发挥多核的优势,一个查询会分拆成多个工作任务分发给多个线程。这也会导致数据的处理顺序是不确定的,因此像any()这样的聚合函数就不能保证绝对正确的结果。本文就是探讨这个问题的解决办法以及代价。

2022-03-25 16:49:20 2176 2

原创 Clickhouse执行处理查询语句(包括DDL,DML)的过程

Clickhouse 处理查询的过程,从解析,到构建Query Plan,到生成Query Pipeline,最终由Executor执行Query Pipeline中每一个processor。

2022-02-27 21:08:19 1364

原创 Window函数

大数据分析中的窗口函数(Window function),在主流的数据库中都已经或多或少支持了。

2022-02-21 18:11:02 1453

原创 实现特定场景下高性能的HashMap

C++标准库的某些场景下的效率问题在下面的场景中,C++标准库的unordered_map、map、multiset、unordered_multiset效率并不高。分组重复次数计数有一亿条记录,记录有两列:group_id,attribute,并且记录已经按照group_id排了序。要求计数每个group_id对应的行的attribute值的重复次数,生成一个新的结果列。例如:group_idattribute结果G001A1G001A2G001B1

2022-01-25 16:26:59 338

原创 设置max_block_size对CH函数执行的影响

# 设置max_block_size对CH函数执行的影响max_block_size设置对某些CH函数的执行结果是有影响的。## 函数接收参数的形式是columnCH处理数据的基本单位是block,block顾名思义是数据表中的“一块”,即行的子集+列的子集。而函数接收参数的形式是column,column可以看作是仅有“一列”的block,而column里面的数据是数据表中该列的一部分数据。## 不同的参数对应不同的column一般CH函数中的参数有几种:1. 常数 例如 `se..

2022-01-11 21:49:56 445

原创 Clickhouse的MergeTree表引擎存储结构

MergeTree存储的文件结构一张数据表被分成几个data part,每个data part对应文件系统中的一个目录。通过以下SQL可以查询data parts的信息。select table, name, path, active, * from `system`.parts where table = '<table name>' <data part> 是一个目录,里面的文件结构如下:-<data part 1>○ checksums.txt.

2021-12-29 11:26:19 534

原创 用Vim查看和编辑二进制文件

Vim 可以用来查看和编辑二进制文件vim -b8_9_9_0/partition.dat,加上-b参数,以二进制打开。输入命令 :%!xxd -g 1 切换到十六进制模式显示

2021-12-27 19:39:53 1779

原创 C++速度很快

# 测试计算10亿个整型数的和,开了OpenMP,花费时间是700毫秒。而Java计算1亿个整型数的和,用了300毫秒。# 代码代码贴在下面。```C++// cpp2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <chrono>#include <iostream>#include <math.h>int main(){ using std::chrono::system_clock;...

2021-12-27 13:32:39 415

原创 Windows系统上搭建Clickhouse开发环境

总体思路微软的开发IDE是很棒的,有两种:Visual Studio 和 VS Code,一个重量级,一个轻量级。近年来VS Code越来越受欢迎,因为她的轻量级和丰富的插件,更重要的是VS Code消耗资源更少,打开大项目的时候不会崩溃。因此选用VS Code。Clickhouse只能在Linux和MacOS上编译和运行,而开发机器是Windows 10系统,因此需要虚拟机或者WSL。WSL是Windows subsystem Linux,Windows 10原生支持,因此采用WSL。调试用l

2021-12-20 00:02:24 3237

原创 RoR vs. Java

RoR(Ruby on Rails)是DHH创造的快速开发框架。Java是企业级的开发技术,拥有完整的技术生态圈,著名框架就有Spring、Struts、Hibernate等等。实践已经证明,Java技术用于开发高并发、高可靠、可扩展的系统有极大的优势。其生态圈中的众多开源项目为Java这座大厦添砖加瓦。新语言Scala也是和Java在二进制码级别上是兼容的。在金融系统中,例如银行的清算系统,保险管理系统等追求稳定可靠的系统中,Java几乎是不容置疑的技术方案。而在大型的互联网平台中,例如Tweet、Li

2021-10-22 23:40:42 203

原创 用Ruby on Rails实现适应各种平台的在线Office文档预览

前言在许多Web应用中都需要预览文档的功能。而用户可能用不同的设备访问Web应用,可能是装有Windows系统的PC台式机,也有可能是iOS系统的iPad。一般来说,要预览的文档通常是主流的Office文档,包括.doc、.ppt、.docx、.pptx文档,也包括Adobe的.pdf文档。因此开发一个能够在不同客户端上使用的,支持主流Office文档类型的在线文档预览系统就显得非常重要。目...

2020-02-01 16:38:47 306

原创 《隐形冠军》读书笔记总结

《隐形冠军》这本书分析了德国的一些不知名的但是专精于某个细分领域并在该领域成为全球市场的领导者的一些这样一些企业,找出了他们成功的原因,遇到的挑战,以及给企业家们的借鉴和思考。隐形冠军企业专注某个细分领域,甚至是不为人所知的领域,虽然其产品和服务对终端客户来说非常陌生,但是在其领域中却是霸主地位。隐形冠军企业的成长,离不开对目标的专注、对专业人员的选培育留、对全球市场的关注,以...

2020-02-01 16:33:53 1735

原创 区块链 – 构建于技术创新之上的理想国

前言作为最近最火热的热潮之一,区块链吸引了大众的眼球。不管是互联网从业人员、金融行业从业人员,还是投机者、传销者,都对区块链充满了好奇和期待,寄希望于通过区块链创造财富和价值。那么区块链究竟是什么?有什么神奇之处?未来区块链的发展如何?本文将带领你进入区块链的世界,领略区块链的神奇魅力,展望未来区块链所可能构建的乌托邦。区块链是什么简而言之,互联网是“互联的网”,而区块链是...

2020-02-01 16:30:23 1151

原创 CPChain的私有交易的严重bug的修复过程记录

现象:当执行了私有交易之后,关闭区块链节点,再重新打开之后会出现系统崩溃的情况。分析:在节点启动的时候会调用loadLastState(),然后执行以下代码加载private state db,但是这里出现崩溃。if _, err := state.New(GetPrivateStateRoot(bc.db, currentBlock.Root()), bc.privateState...

2019-01-23 10:09:59 213

原创 Go的单元测试

函数测试以下形式的函数签名将被go test命令当做单元测试方法func TestXxx(*testing.T)按照Go语言的习惯,把一个go文件的测试代码放在相同的的package下,起名称为 xxx_test.go,```go test```命令会自动识别,在正式编译的时候会忽略掉这样的文件。运行```go help test```会了解更多。函数性能测评(benchm...

2019-01-23 10:08:02 163

空空如也

空空如也

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

TA关注的人

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