程序员的故乡

 

2024年3月17日

`static_cast` caution

摘要: static_cast caution It is likely to lead unexpected behavior and maybe dangerous to invoke static_cast on wrong C++ object. Below example demostrates 阅读全文

posted @ 2024-03-17 22:28 程鑫 阅读(16) 评论(0) 推荐(0) 编辑

2024年1月21日

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

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

posted @ 2024-01-21 19:00 程鑫 阅读(546) 评论(1) 推荐(1) 编辑

2024年1月8日

ClickHouse的JOIN算法选择逻辑以及auto选项

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

posted @ 2024-01-08 17:59 程鑫 阅读(215) 评论(0) 推荐(0) 编辑

2023年9月10日

ClickHouse的Join算法

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

posted @ 2023-09-10 21:59 程鑫 阅读(672) 评论(0) 推荐(0) 编辑

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

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

posted @ 2023-09-10 21:56 程鑫 阅读(40) 评论(0) 推荐(0) 编辑

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

摘要: 来自于一篇大神的论文,而且原意没有一句话那么简单。 Premature optimization is the root of all evil Programmers waste enormous amounts of time thinking about, or worrying about, 阅读全文

posted @ 2023-09-10 21:45 程鑫 阅读(97) 评论(0) 推荐(0) 编辑

ClickHouse的WITH-ALIAS是如何实现的

摘要: ClickHouse的WITH-ALIAS是如何实现的 WITH-ALIAS包含相似但不同的两个特性: WITH <表达式> as <别名> WITH <别名> as <子查询> WITH <表达式> as <别名> 特性 以下SQL展示了 WITH <表达式> as <别名> 特性的用法。 wit 阅读全文

posted @ 2023-09-10 21:41 程鑫 阅读(160) 评论(0) 推荐(0) 编辑

2023年2月22日

如何与chatgpt共存

摘要: 作为程序员,专注于创造性劳动,而把重复性劳动任务交给chatgpt,要成为 需求 和 chatgpt的桥梁。 人工智能比如chatgpt越来越强,提问能力是人类的天赋,提问能力更为重要。 阅读全文

posted @ 2023-02-22 21:11 程鑫 阅读(33) 评论(0) 推荐(0) 编辑

2022年6月14日

多线程与同步

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

posted @ 2022-06-14 19:44 程鑫 阅读(80) 评论(0) 推荐(0) 编辑

2022年5月10日

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

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

posted @ 2022-05-10 16:46 程鑫 阅读(65) 评论(0) 推荐(0) 编辑

导航