news 2026/5/2 23:27:53

DolphinDB分区策略:VALUE分区详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DolphinDB分区策略:VALUE分区详解

目录

    • 摘要
    • 一、VALUE分区概述
      • 1.1 什么是VALUE分区
      • 1.2 VALUE分区特点
      • 1.3 适用场景
    • 二、创建VALUE分区
      • 2.1 基本语法
      • 2.2 创建单列VALUE分区
      • 2.3 创建字符串VALUE分区
      • 2.4 创建日期VALUE分区
    • 三、VALUE分区查询
      • 3.1 分区裁剪
      • 3.2 查询优化
    • 四、VALUE分区管理
      • 4.1 添加分区
      • 4.2 查看分区
      • 4.3 分区统计
    • 五、VALUE分区最佳实践
      • 5.1 分区列选择
      • 5.2 分区数量建议
      • 5.3 分区设计示例
    • 六、VALUE分区 vs 其他分区
      • 6.1 对比表
      • 6.2 选择建议
    • 七、实战案例
      • 7.1 工厂设备数据分区
      • 7.2 多租户数据分区
    • 八、总结
    • 参考资料

摘要

本文深入讲解DolphinDB VALUE分区策略。从VALUE分区原理到设计方法,从单列分区到多列分区,从分区管理到最佳实践,全面介绍VALUE分区的应用场景和优化技巧。通过丰富的代码示例,帮助读者掌握VALUE分区设计和管理的核心技能。


一、VALUE分区概述

1.1 什么是VALUE分区

VALUE分区是DolphinDB中最常用的分区策略之一,按照列值的枚举值进行分区:

VALUE分区原理

原始数据

按列值分区

分区1: 值=A

分区2: 值=B

分区3: 值=C

分区4: 值=D

1.2 VALUE分区特点

特点说明
枚举分区按列值的枚举值分区
精确匹配查询时精确匹配分区
适合离散值适合设备ID、地区等
分区数量固定分区数等于枚举值数量

1.3 适用场景

场景说明
设备数据按设备ID分区
地区数据按地区/城市分区
类型数据按数据类型分区
状态数据按状态值分区

二、创建VALUE分区

2.1 基本语法

//VALUE分区语法 db=database("dfs://db_name",VALUE,partition_column)//参数说明://-db_name:数据库名称//-VALUE:分区类型//-partition_column:分区列(可以是向量或列名)

2.2 创建单列VALUE分区

//按设备ID分区 device_ids=1..100db=database("dfs://device_db",VALUE,device_ids)//查看分区方案 db.schema()//创建分区表 schema=table(1:0,`device_id`timestamp`temperature`humidity,[INT,TIMESTAMP,DOUBLE,DOUBLE])db.createPartitionedTable(schema,`sensor_data,`device_id)//插入数据 t=table(take(1..100,1000)asdevice_id,take(now(),1000)astimestamp,rand(20.0..30.0,1000)astemperature,rand(40.0..60.0,1000)ashumidity)loadTable("dfs://device_db","sensor_data").append!(t)

2.3 创建字符串VALUE分区

//按地区分区 regions=`北京`上海`广州`深圳`杭州`成都`武汉`西安 db=database("dfs://region_db",VALUE,regions)//创建分区表 schema=table(1:0,`region`timestamp`sales`quantity,[SYMBOL,TIMESTAMP,DOUBLE,INT])db.createPartitionedTable(schema,`sales_data,`region)//插入数据 t=table(take(regions,1000)asregion,take(now(),1000)astimestamp,rand(1000.0..10000.0,1000)assales,rand(10..100,1000)asquantity)loadTable("dfs://region_db","sales_data").append!(t)

2.4 创建日期VALUE分区

//按日期分区 dates=2024.01.01..2024.12.31db=database("dfs://date_db",VALUE,dates)//创建分区表 schema=table(1:0,`date`device_id`value,[DATE,INT,DOUBLE])db.createPartitionedTable(schema,`daily_data,`date)

三、VALUE分区查询

3.1 分区裁剪

//VALUE分区支持精确的分区裁剪 t=loadTable("dfs://device_db","sensor_data")//查询单个设备(只扫描一个分区) select count(*)fromt where device_id=1//查询多个设备(只扫描相关分区) select count(*)fromt where device_idin[1,2,3]//查看执行计划 explain select*fromt where device_id=1

3.2 查询优化

//分区列过滤(高效) select*fromt where device_id=1//非分区列过滤(全表扫描) select*fromt where temperature>25//组合条件 select*fromt where device_id=1andtemperature>25

四、VALUE分区管理

4.1 添加分区

//VALUE分区需要预先定义所有值//如果数据包含未定义的分区值,会报错//解决方案:创建数据库时包含所有可能的值 device_ids=1..1000//预留足够的设备ID db=database("dfs://device_db",VALUE,device_ids)

4.2 查看分区

//查看分区列表 db=database("dfs://device_db")db.partitionSchema()//查看分区数据量 select device_id,count(*)ascntfromloadTable("dfs://device_db","sensor_data")group by device_id

4.3 分区统计

//查看各分区大小 getTabletsMeta("dfs://device_db","sensor_data")//分区数据分布 select device_id,count(*)asrecord_count,min(timestamp)asmin_time,max(timestamp)asmax_timefromloadTable("dfs://device_db","sensor_data")group by device_id order by record_count desc

五、VALUE分区最佳实践

5.1 分区列选择

选择原则说明
高基数列分区值不宜过多(<10000)
查询频繁经常作为查询条件
分布均匀数据在各分区分布均匀
值稳定分区值不会频繁变化

5.2 分区数量建议

场景建议分区数
小集群100-1000
中集群1000-10000
大集群10000-100000

5.3 分区设计示例

//设备数据分区设计//方案1:按设备ID分区(设备数<10000) db=database("dfs://device_db",VALUE,1..10000)//方案2:按设备类型+ID组合分区(设备数>10000//使用COMPO分区:先按类型,再按ID范围 db=database("dfs://device_db2",COMPO,[VALUE,`typeA`typeB`typeC,RANGE,1..1001])//方案3:按时间+设备分区(海量设备) db=database("dfs://device_db3",COMPO,[RANGE,2024.01.01..2024.12.31,HASH,[INT,100]])

六、VALUE分区 vs 其他分区

6.1 对比表

特性VALUERANGEHASH
分区方式枚举值范围哈希
查询效率精确匹配范围查询均匀分布
分区数量固定可扩展固定
适用场景离散值连续值均匀分布

6.2 选择建议

离散值
枚举类型

连续值
时间/数值

均匀分布
高基数

多维度

选择分区策略

数据特点

VALUE分区

RANGE分区

HASH分区

COMPO组合分区


七、实战案例

7.1 工厂设备数据分区

//创建按车间分区的数据库 workshops=`车间A`车间B`车间C`车间D`车间E db=database("dfs://factory_db",VALUE,workshops)//创建分区表 schema=table(1:0,`workshop`device_id`timestamp`temperature`humidity`power,[SYMBOL,INT,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])db.createPartitionedTable(schema,`device_data,`workshop)//插入数据 t=table(take(workshops,10000)asworkshop,take(1..100,10000)asdevice_id,take(now()-0..9999*1000,10000)astimestamp,rand(20.0..30.0,10000)astemperature,rand(40.0..60.0,10000)ashumidity,rand(100.0..500.0,10000)aspower)loadTable("dfs://factory_db","device_data").append!(t)//查询某车间数据 select*fromloadTable("dfs://factory_db","device_data")where workshop=`车间A` limit10

7.2 多租户数据分区

//创建按租户分区的数据库 tenants=`tenant_001`tenant_002`tenant_003`tenant_004`tenant_005 db=database("dfs://tenant_db",VALUE,tenants)//创建分区表 schema=table(1:0,`tenant_id`user_id`timestamp`action`resource,[SYMBOL,STRING,TIMESTAMP,SYMBOL,STRING])db.createPartitionedTable(schema,`audit_log,`tenant_id)//查询某租户日志 select*fromloadTable("dfs://tenant_db","audit_log")where tenant_id=`tenant_001`andtimestamp>now()-86400000

八、总结

本文详细介绍了DolphinDB VALUE分区策略:

  1. 分区原理:按列值的枚举值分区
  2. 创建方法:单列分区、字符串分区、日期分区
  3. 查询优化:分区裁剪、精确匹配
  4. 分区管理:添加分区、查看分区、统计分区
  5. 最佳实践:分区列选择、分区数量建议
  6. 对比选择:VALUE vs RANGE vs HASH

思考题

  1. VALUE分区适合什么类型的数据?
  2. 如何确定VALUE分区的分区数量?
  3. VALUE分区查询时如何实现分区裁剪?

参考资料

  • DolphinDB分区数据库
  • DolphinDB分区方案
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 23:24:42

CP Editor完全指南:5分钟快速上手,从零开始算法竞赛

CP Editor完全指南&#xff1a;5分钟快速上手&#xff0c;从零开始算法竞赛 【免费下载链接】cpeditor The IDE for competitive programming :tada: | Fetch, Code, Compile, Run, Check, Submit :rocket: 项目地址: https://gitcode.com/gh_mirrors/cp/cpeditor CP Ed…

作者头像 李华
网站建设 2026/5/2 23:24:25

像素剧本圣殿保姆级教学:8-Bit UI交互逻辑与AI输出节奏控制

像素剧本圣殿保姆级教学&#xff1a;8-Bit UI交互逻辑与AI输出节奏控制 1. 认识像素剧本圣殿 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款专为剧本创作者设计的AI辅助工具。它将先进的Qwen2.5-14B-Instruct大模型与复古像素风格界面完美结合&#xff0c;…

作者头像 李华
网站建设 2026/5/2 23:22:05

20-4 长时工作记忆(AGI基础理论)

《智能的理论》全书转至目录 不同AGI的研究路线对比简化版&#xff1a;《AGI&#xff08;具身智能&#xff09;路线对比》&#xff0c;欢迎各位参与讨论、批评或建议。 工作记忆模型得到了许多实验的支持&#xff0c;但是有些记忆现象也是此模型难以解释的。比如&#xff0c;在…

作者头像 李华
网站建设 2026/5/2 23:20:23

通过Taotoken CLI工具一键配置团队视频创作项目的统一AI环境

通过Taotoken CLI工具一键配置团队视频创作项目的统一AI环境 1. 准备工作 在开始配置之前&#xff0c;请确保团队中每位成员的开发环境已安装Node.js 16或更高版本。可以通过运行node -v命令来验证版本。对于视频创作项目&#xff0c;统一的AI环境配置能够确保所有团队成员使…

作者头像 李华