DolphinDB 内存分区表是驻留于单节点内存、按指定列逻辑分割为多个子表(分片)的数据结构,旨在通过细粒度锁机制提升并发读写性能并利用多核并行计算,不支持组合分区(COMPO)且服务重启后数据丢失 。
核心特性与限制
- 存储介质:完全位于内存,无持久化(重启即失),受单节点内存容量限制。
- 分区机制:逻辑上为一张大表,物理上由多个独立管理的子表组成;不支持 COMPO 复合分区,仅支持 VALUE(值)、RANGE(范围)、HASH(哈希)、LIST(列表)四种方式 。
- 并发优势:消除全局锁,各分区独立加锁,显著提升多会话并发读写能力;查询时若命中分区键可自动裁剪扫描范围 。
- 创建约束:创建后不可动态增删子表;模板表数量必须严格等于分区数量 。
- 适用场景:高频交易实时计算、大规模中间结果集处理、需高并发更新的临时数据集 。
创建语法与示例
使用database("", partitionType, scheme)创建内存数据库句柄(目录参数为空字符串),配合createPartitionedTable生成表。模板表可为普通表、键值表、流表或 MVCC 表,需传入元组形式(每个元素对应一个分区)。
# 1. 定义分区域(内存数据库,RANGE 分区) db = database("", RANGE, 0 1000000 2000000) # 2. 定义单分区模板表(此处以常规内存表为例) schema = table(1:0, `id`sym`price, [INT, SYMBOL, DOUBLE]) # 3. 创建分区表(传入模板表向量,数量需匹配分区数) # 若分 2 区,需传入 [schema, schema];此处示意单模板自动扩展或需手动构造列表 pt = db.createPartitionedTable([schema, schema], `myMemPartTable, `id) # 4. 数据写入(直接 append! 到分区表对象) pt.append!(table(500000..1500000 as id, rand(`A`B, 1000000) as sym, rand(100.0, 1000000) as price)) ```:ml-citation{ref="7,15" appearance="aggregated" data="citationList"}