搜索快捷键 cmd + k | ctrl + k
cache_httpfs

为 httpfs 提供读取缓存文件系统

维护者:dentiny, DouEnergy

安装和加载

INSTALL cache_httpfs FROM community;
LOAD cache_httpfs;

示例

SELECT cache_httpfs_get_cache_size();

关于 cache_httpfs

此扩展为 DuckDB 添加了一个读取缓存文件系统,作为 httpfs 扩展的封装器。它支持以下几个关键特性

  • 支持文件元数据、glob、文件句柄和数据块缓存
  • 支持数据块的磁盘缓存和内存缓存,块大小和缓存模式可调
  • 支持基于访问时间戳的磁盘缓存文件驱逐,允许可调的磁盘空间保留
  • 支持并行 IO 请求,请求大小和并行度可调
  • 支持对一些操作(如打开、读取、glob)的 IO 延迟和缓存命中/未命中率进行分析,从而深入了解工作负载特征
  • 公开用于获取缓存大小和清理缓存的函数
  • 提供禁用/启用缓存的选项,可以作为 httpfs 的直接替代品

新增函数

函数名 函数类型 描述 注释 示例
cache_httpfs_cache_access_info_query NULL NULL  
cache_httpfs_cache_status_query NULL NULL  
cache_httpfs_clear_cache 标量 NULL NULL  
cache_httpfs_clear_cache_for_file 标量 NULL NULL  
cache_httpfs_clear_profile 标量 NULL NULL  
cache_httpfs_get_cache_filesystems NULL NULL  
cache_httpfs_get_ondisk_data_cache_size 标量 NULL NULL  
cache_httpfs_get_profile 标量 NULL NULL  
cache_httpfs_wrap_cache_filesystem 标量 NULL NULL  

新增设置

名称 描述 输入类型 范围
ca_cert_file 自定义证书文件的路径,用于自签名证书。 VARCHAR GLOBAL(全局)
cache_httpfs_cache_block_size 缓存的块大小,适用于内存缓存文件系统和磁盘缓存文件系统。值得注意的是,对于磁盘文件系统,配置更新后所有现有缓存文件都将失效。 UBIGINT GLOBAL(全局)
cache_httpfs_cache_directory 存储缓存数据的磁盘缓存目录 VARCHAR GLOBAL(全局)
cache_httpfs_enable_file_handle_cache 是否为缓存文件系统启用文件句柄缓存。默认启用。 BOOLEAN GLOBAL(全局)
cache_httpfs_enable_glob_cache 是否为缓存文件系统启用 glob 缓存。默认启用。 BOOLEAN GLOBAL(全局)
cache_httpfs_enable_metadata_cache 是否为缓存文件系统启用元数据缓存。默认启用。 BOOLEAN GLOBAL(全局)
cache_httpfs_file_handle_cache_entry_size 文件句柄缓存的最大缓存大小。 UBIGINT GLOBAL(全局)
cache_httpfs_file_handle_cache_entry_timeout_millisec 文件句柄缓存的缓存条目超时时间(毫秒)。 UBIGINT GLOBAL(全局)
cache_httpfs_glob_cache_entry_size glob 缓存的最大缓存大小。 UBIGINT GLOBAL(全局)
cache_httpfs_glob_cache_entry_timeout_millisec glob 缓存的缓存条目超时时间(毫秒)。 UBIGINT GLOBAL(全局)
cache_httpfs_ignore_sigpipe 是否忽略扩展的 SIGPIPE。默认不忽略。一旦忽略,则无法恢复。 BOOLEAN GLOBAL(全局)
cache_httpfs_in_mem_cache_block_timeout_millisec 数据块缓存条目的超时时间(毫秒)。 UBIGINT GLOBAL(全局)
cache_httpfs_max_fanout_subrequest 缓存的 httpfs 通过将请求拆分为小请求来执行并行请求,请求大小由配置 [cache_httpfs_cache_block_size] 决定。 此设置限制了为单个文件系统读取请求发出的最大请求数。 0 表示没有限制,默认情况下我们不设置限制。 BIGINT GLOBAL(全局)
cache_httpfs_max_in_mem_cache_block_count 所有缓存文件系统的内存缓存的最大内存块计数,因此用户可以配置最大内存消耗。 值得注意的是,它应该在所有文件系统访问之前设置一次,否则没有影响。 UBIGINT GLOBAL(全局)
cache_httpfs_metadata_cache_entry_size 元数据 LRU 缓存的最大缓存大小。 UBIGINT GLOBAL(全局)
cache_httpfs_metadata_cache_entry_timeout_millisec 元数据 LRU 缓存的缓存条目超时时间(毫秒)。 UBIGINT GLOBAL(全局)
cache_httpfs_min_disk_bytes_for_cache 磁盘上缓存文件系统启用磁盘缓存所需的最小字节数; 如果剩余字节数小于阈值,将执行基于 LRU 的缓存文件驱逐。默认情况下,5% 的磁盘空间将保留用于其他用途。 当使用正值指定最小磁盘字节数时,默认值将被覆盖。 UBIGINT GLOBAL(全局)
cache_httpfs_profile_type 缓存文件系统的分析类型。 有三个选项可用:nooptempduckdbtemp 选项存储最新的 IO 操作分析结果,这可能会受到并发更新的影响; duckdb 将 IO 操作分析结果存储到 duckdb 表中,从而解锁高级分析。 VARCHAR GLOBAL(全局)
cache_httpfs_type 缓存文件系统的类型。 目前有两种类型可用,一种是 in_mem,另一种是 on_disk。 默认情况下,我们使用磁盘缓存。 设置为 noop 以禁用,其行为与 httpfs 扩展完全相同。 VARCHAR GLOBAL(全局)
enable_server_cert_verification 启用服务器端证书验证。 BOOLEAN GLOBAL(全局)
force_download 强制预先下载文件 BOOLEAN GLOBAL(全局)
hf_max_per_page 调试选项,用于限制列表请求中返回的项目数 UBIGINT GLOBAL(全局)
http_keep_alive 保持连接。 将此设置为 false 可以在遇到连接故障时提供帮助 BOOLEAN GLOBAL(全局)
http_retries I/O 错误时的 HTTP 重试 UBIGINT GLOBAL(全局)
http_retry_backoff 用于指数增加重试等待时间的退避因子 FLOAT GLOBAL(全局)
http_retry_wait_ms 重试之间的时间 UBIGINT GLOBAL(全局)
http_timeout HTTP 超时读取/写入/连接/重试(以秒为单位) UBIGINT GLOBAL(全局)
s3_access_key_id S3 访问密钥 ID VARCHAR GLOBAL(全局)
s3_endpoint S3 端点 VARCHAR GLOBAL(全局)
s3_kms_key_id S3 KMS 密钥 ID VARCHAR GLOBAL(全局)
s3_region S3 区域 VARCHAR GLOBAL(全局)
s3_secret_access_key S3 访问密钥 VARCHAR GLOBAL(全局)
s3_session_token S3 会话令牌 VARCHAR GLOBAL(全局)
s3_uploader_max_filesize S3 上传器最大文件大小(介于 50GB 和 5TB 之间) VARCHAR GLOBAL(全局)
s3_uploader_max_parts_per_file S3 上传器每个文件的最大分片数(介于 1 和 10000 之间) UBIGINT GLOBAL(全局)
s3_uploader_thread_limit S3 上传器全局线程限制 UBIGINT GLOBAL(全局)
s3_url_compatibility_mode 禁用 S3 URL 上的 Globs 和查询参数 BOOLEAN GLOBAL(全局)
s3_url_style S3 URL 样式 VARCHAR GLOBAL(全局)
s3_use_ssl S3 使用 SSL BOOLEAN GLOBAL(全局)