DuckDB-源码分析(1)背景与应用

2019年,CWI发表了一篇关于DuckDB的论文:《DuckDB: an Embeddable Analytical Database》,旨在OLAP领域构建一个嵌入式的数据库,解决单点交互式数据分析的问题,并给边缘计算提供除SQLite之外的更优选择。在论文中,作者们总结DuckDB为在一个进程内的SQL OLAP DBMS,这句话至少有两个解读点:

  1. DuckDB的工作方式应该和SQLite一致,即在进程内部运行,并不需要类似MySQL或者PG的等单独起一个数据库服务;
  2. 作为AP系统,可以支撑一定复杂的数据分析和查询任务。

SQLite是在全球运行最多的关系型数据库管理系统,每个浏览器和操作系统以及各种嵌入式设备都能找到该数据库使用的痕迹。但是SQLite更多为TP任务服务,很难利用向量化、内存加速来提高数据分析的速度。所以DuckDB弥补了SQLite这方面的空白。

阅读更多

多线程共享与伪共享检测

多线程/进程之间使用缓存一致性协议来保证每个包含独立缓存对象的核心在共享使用内存数据时的一致性,缓存一致性协议保证了缓存实体中的任何更新都会对相同位置的其他缓存进行全部更新。MESI协议是最著名的一致性协议,支持现代CPU中缓存回写。通过监控内存事务保持一致性,一致性问题可以得到缓解,但是是有代价的,导致CPU访存空转,浪费系统带宽,两种具有代表性的内存一致性问题是“真共享”和“伪共享”。

阅读更多

现代 C++ 分享(1)—— 生命周期、所有权和资源管理

这是整个现代 C++ 分享系列第一篇,关于生命周期、所有权和资源管理。主题包括但不限于指针、智能指针、引用、类型系统、移动语义以及完美转发和引用折叠相关的主题。

C++ 在演进过程中逐渐增强和扩展了对类型处理的能力:

  1. C++11 中引入右值引用,通过重新定义值类别对表达式进行分类,右值引用能表达移动语义,解决了 C++11 之前产生的中间临时对象需要多次拷贝的问题;
  2. C++11 中引入 auto 关键字,对初始化变量进行推导,并且引入 decltype 关键字,通过已有对象、变量获得类型;
  3. C++17 引入 optional 类型表达对象是否存在,并且引入 variant 作为类型安全的 union,类型表达更灵活。
  4. C++20 中引入 concept 特性对类型在编译期做约束,增强类型的表达和检查能力。

在 C++ 中,容器和指针抽象后想要被正确且高效的使用,在工程中通常需要封装一组数据及函数来访问和操作。举例来说,指针是通用和有效抽象的机器地址,但正确使用指针来表示资源的所有权是非常困难的,因此标准库提供了智能指针类管理资源和生命周期。指针的更泛化的概念是,任何允许我们引用对象并根据其类型访问。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×