Duckdb缓存和日志以及文件
1.文件系统
Global Files and Directories
DuckDB creates the following global files and directories in the user's home directory (denoted with ~):
secret_directory 设置持久密钥的存储目录 VARCHAR ~/.duckdb/stored_secrets
temp_directory 设置临时文件写入目录 VARCHAR ⟨database_name⟩.tmp或者.tmp(在内存模式下)
2.duckdb_logs 日志系统
DuckDB日志系统是数据库运维和开发的重要工具
enable_logging 启用日志记录器
enabled_log_types 设置已启用日志记录器的列表
logging_level 日志中将记录的日志级别
logging_mode 确定要记录哪些类型的日志消息。
logging_storage 设置日志存储(内存/标准输出/文件/)
DuckDB支持控制台输出、文件输出及自定义回调三种日志输出方式,可通过配置文件或API进行设置。
3.缓存
外部文件缓存机制-外部文件缓存(External File Cache)
enable_external_file_cache 允许数据库将外部文件(例如 Parquet 文件)缓存到内存中
通过以下方式禁用: SET enable_external_file_cache = false;
例如:FROM duckdb_external_file_cache();
对象缓存(Object Cache)
-- 启用对象缓存
SET enable_object_cache = true;
其他缓存
enable_http_metadata_cache 是否使用全局 HTTP 元数据来缓存 HTTP 元数据
PRAGMA cache_stats;查看缓存统计信息
缓存管理技巧
监控缓存使用: 通过 PRAGMA cache_stats; 查看缓存统计信息
合理设置缓存大小:通过 PRAGMA memory_limit;调整内存限制,间接控制缓存大小
适时清理缓存: 使用 PRAGMA clear_cache; 手动清理缓存(需谨慎操作
查看缓存内容
通过内置的表函数 duckdb_external_file_cache() 来查询当前的缓存内容。
源码中的核心实现位于以下文件:
外部文件缓存:src/storage/external_file_cache.hpp
对象缓存 :src/storage/object_cache.hpp
缓存配置 :src/main/database.cpp
其他
sqlite 1.该PRAGMA语句是 DuckDB 从 SQLite 中引入的 SQL 扩展
PRAGMA(Programmaticragma)是SQLite提供的一种特殊命令,用于查询和修改数据库连接的运行时参数。
这些参数控制着SQLite的各种行为,从内存分配到磁盘同步策略,从查询优化到事务处理
2. ATTACH DATABASE 和 DETACH DATABASE
3. 点号(.)命令
4.VACUUM 命令: 重建数据库,整理碎片,并回收未使用的空间。
postgreSQL
规则系统(Rule Syste)
COPY:快速导入导出数据
模式(SCHEMA)管理
扩展(EXTENSION)系统
RETURNING 子句
管理命令(psql特有) 1. 元命令(以\开头)
PostgreSQL 扩展 = "功能服务器":为企业级应用添加完整功能模块
安装 系统包管理 + CREATE EXTENSION
过包管理器(如apt、yum)或从源代码编译安装。扩展以独立的模块存在,需要先安装到系统中,然后在数据库中创建扩展。
DuckDB 扩展 = "分析工具包":为嵌入式分析添加数据处理能力
安装 INSTALL + LOAD 命令
用和不用
SQL 更接近自然语言,表达分组统计、聚合查询时往往更直观
DuckDB 跨数据源分析 处理大规模数据的性能
支持直接查询 CSV、Parquet、JSON、甚至远程数据库,而且都可以用同一套 SQL。
支持 懒加载 + 流式扫描,可以边查边算,不需要一次性全部载入
把 分析型 SQL 引擎 搬到了本地
数据加载--数据清洗--分析查询--可视化输出
它在特定任务和工作负载方面表现出色,将其视为一种补充工具,它能够在特定场景下显著增强能力
解决方案迁移到强大且受控的企业环境中
作为:生产中经常用它来进行流程中的转换 ,嵌入到流水线工作
DuckDB 强大的 CSV 解析和加载功能、用于复杂聚合和连接的 SQL
不当作:不会把它当成永久的数据库,DuckDB的数据访问权限,并发
不支持从多个进程写入 DuckDB,也不是主要设计目标
两种可配置的并发选项:
一个进程可以同时对数据库进行读取和写入操作。
多个进程可以从数据库读取数据,但没有进程可以写入数据(access_mode = 'READ_ONLY')
其他
可视化
Maliang 通过在 Tkinter 的 Canvas(画布)上从零绘制现代
调度和配置
Dramatiq 后台任务处理对自动化至关重要
Tenacity 它通过简单的装饰器,就能为你的函数优雅地添加健壮的重试机制
SQL
SQLGlot 是一个通用的 SQL 解析器与转译器,支持读取、书写并在数十种 SQL 方言
(如 DuckDB、Snowflake、PostgreSQL)之间进行转换
Pandas 的链式操作
参考
https://duckdb.org/docs/stable/configuration/overview