DolphinDB分区数据库教程(一)
教程文章标题与作者、日期信息。
Source: https://dolphindb.cn/blogs/44
What this page covers
- 数据库分区的目的与收益
- 分区类型与 _database_ 函数参数说明
- 范围分区示例
- 哈希分区示例
- 值分区示例
- 列表分区示例
- 组合分区示例
技能认证特训营第二期正式开启(限时报名) cta
页面顶部的活动报名与优惠信息入口。
- 页面提供技能认证特训营第二期的报名入口链接。
DolphinDB分区数据库教程(一) hero
教程文章标题与作者、日期信息。
- 文章标题为“DolphinDB分区数据库教程(一)”。
- 作者署名为 Junxi。
- 发布日期为 2021-08-05。
为什么对数据进行分区? definition
解释数据库分区的目的与带来的性能、资源利用与可用性收益。
- 数据库分区可极大降低系统响应延迟并提高数据吞吐量。
- 分区可使大型表更易于管理。
- 分区可提高对数据子集的维护操作效率。
- 分区可通过减少扫描数据量来降低读取量。
- 单一分区存放全部数据会受磁盘访问 IO 瓶颈限制。
分区方式与_database函数创建数据库 how_it_works
列出DolphinDB支持的分区类型,并说明_database函数语法与参数含义及限制。
- DolphinDB支持 RANGE、HASH、VALUE、LIST、COMPO 分区方式。
- DolphinDB 的
database函数用于创建数据库。 - 函数语法为
database(directory, [partitionType], [partitionScheme], [locations])。 - directory 参数表示数据库保存的目录。
- 分布式文件系统数据库或 COMPO 数据库不能使用 locations 参数。
范围分区(2.1)示例 how_it_works
说明范围分区由分区向量决定,并给出创建范围分区数据库与分区表的示例及物理目录结构说明。
- 范围分区的分区向量表示区间,包含起始值,不包含结尾值。
- 示例数据库包含两个分区:[0,5) 和 [5,10)。
- 示例创建调用为
db=database("dfs://rangedb", RANGE, 0 5 10)。 - 示例分区表创建使用 ID 作为分区列:
db.createPartitionedTable(t, `pt, `ID)。 - 示例中数据生成规模为
n=1000000。
哈希分区(2.2)示例 how_it_works
说明哈希分区的机制、局限与示例,并给出物理目录结构说明。
- 哈希分区对分区列使用哈希函数以产生分区。
- 哈希分区是产生指定数量分区的简便方法。
- 哈希分区不能保证分区大小一致。
- 分区列值分布偏态时更难保证分区大小一致。
- 示例创建调用为
db=database("dfs://hashdb", HASH, [INT, 2])。
值分区(2.3)示例 how_it_works
说明值分区“一个值一个分区”的概念,并给出按月值分区的示例及目录结构说明。
- 值分区用一个值代表一个分区。
- 示例定义了 204 个分区。
- 示例每个分区表示 2000年1月到2016年12月之间的一个月。
- 示例创建调用为
db=database("dfs://valuedb", VALUE, 2000.01M..2016.12M)。
列表分区(2.4)示例 how_it_works
说明列表分区用列表代表分区的方式,并给出股票代码列表分区示例及目录结构说明。
- 列表分区用一个包含多个元素的列表代表一个分区。
- 示例包含两个分区,且每个分区由不同股票代码构成。
- 示例第一个分区包含3个股票代码。
- 示例第二个分区包含2个股票代码。
- 示例创建调用为
db=database("dfs://listdb", LIST, [`IBM`ORCL`MSFT, `GOOG`FB])。
组合分区(2.5)示例 how_it_works
说明组合分区可定义多分区列并独立采用不同分区方式,给出示例并展示两级目录结构说明。
- 组合分区可以定义2或3个分区列。
- 每列可独立采用 RANGE、VALUE 或 LIST 分区。
- 多个分区列在逻辑上并列,不存在从属关系或优先级关系。
- 示例子库定义包含一个 VALUE 子库与一个 RANGE 子库。
- 示例组合数据库创建调用为
db = database("dfs://compoDB", COMPO, [dbDate, dbID])。 - 示例分区表创建使用分区列
date与ID。 - 示例创建了 5 个值分区。
- 在特定日期分区 20170807 下有 2 个范围分区。
后续教程预告:教程(二) misc
说明后续文章将介绍分区原则与特殊分区方案。
- 教程(二)将介绍 DolphinDB 分区原则以及特殊的分区方案。
Facts index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| DolphinDB分区数据库教程(一) | 发布日期 | 2021-08-05 | high |
| DolphinDB分区数据库教程(一) | 作者署名 | Junxi | high |
| 数据库分区 | 影响 | 可以极大降低系统响应延迟并提高数据吞吐量 | medium |
| 数据库分区 | 好处 | 使大型表更易于管理;对数据子集的维护操作更高效;通过只读取查询所需的相关数据减少扫描数据量 | medium |
| 单一分区存放全部数据 | 瓶颈 | 查询、计算及其它操作会被限制在磁盘访问IO瓶颈上 | high |
| 数据库分区 | 资源利用 | 良好分区方案搭配并行/分布式计算可充分利用所有节点完成通常需在单节点完成的任务 | medium |
| 数据库分区 | 可用性 | 分区副本通常存放在不同物理节点;某分区不可用时可调用其它副本保证作业运转 | medium |
| DolphinDB | 支持的分区方式 | 范围分区(RANGE)、哈希分区(HASH)、值分区(VALUE)、列表分区(LIST)、复合分区(COMPO) | high |
| 范围分区(RANGE) | 描述 | 每个区间创建一个分区;最常用且推荐;可把数值在一个区间内的记录放到一个分区 | high |
| 哈希分区(HASH) | 描述 | 利用哈希函数对分区列操作,方便建立指定数量的分区 | high |
| 值分区(VALUE) | 描述 | 每个值创建一个分区(示例:股票交易日期、股票交易月) | high |
| 列表分区(LIST) | 描述 | 根据用户枚举的列表进行分区,比值分区更灵活 | high |
| 复合/组合分区(COMPO) | 适用场景 | 适用于数据量特别大且查询经常涉及两个或以上的分区列 | medium |
| 复合/组合分区(COMPO) | 描述 | 每个分区列可采用区间、值或列表分区;示例:按交易日期值分区,同时按股票代码范围分区 | high |
| DolphinDB _database_函数 | 用途 | 用于创建数据库 | high |
| DolphinDB _database_函数 | 语法 | _database(directory, [partitionType], [partitionScheme], [locations])_ | high |
| database参数 directory | 含义 | 数据库保存的目录 | high |
| DolphinDB数据库类型 | 类型列表 | 内存数据库、磁盘上的数据库、分布式文件系统上的数据库 | high |
| 创建内存数据库 | directory参数要求 | directory为空 | high |
| 创建本地数据库 | directory参数要求 | directory应该是本地文件系统目录 | high |
| 创建分布式文件系统数据库 | directory参数要求 | directory应该以“dfs://”开头 | high |
| 本教程示例环境 | 说明 | 以创建Windows本地数据库为例 | high |
| database参数 partitionType | 分区方式数量 | 有5种方式:RANGE、HASH、VALUE、LIST、COMPO | high |
| database参数 partitionScheme | 说明 | 各种分区方式对应的分区方案见配图 | high |
| database参数 locations | 限制 | 如果是分布式文件系统的数据库或者复合分区(COMPO)类型的数据库,不能使用locations参数 | high |
| 范围分区 | 分区向量含义 | 分区向量表示区间,包含起始值,不包含结尾值 | high |
| 范围分区示例数据库db | 分区区间 | 两个分区:[0,5) 和 [5,10) | high |
| 范围分区示例 | 数据库创建调用 | db=database("dfs://rangedb", RANGE, 0 5 10) | high |
| 范围分区示例 | 分区表创建与分区列 | pt = db.createPartitionedTable(t, `pt, `ID)(使用ID作为分区列) | high |
| 范围分区示例 | 数据生成规模 | n=1000000 | high |
| 哈希分区 | 机制 | 对分区列使用哈希函数以产生分区 | high |
| 哈希分区 | 优点 | 产生指定数量分区的简便方法 | medium |
| 哈希分区 | 局限 | 不能保证分区大小一致,尤其当分区列值分布存在偏态时 | high |
| 哈希分区 | 查询效率 | 查找分区列上连续区域数据时效率比区域分区或值分区低 | medium |
| 哈希分区示例 | 数据库创建调用 | db=database("dfs://hashdb", HASH, [INT, 2]) | high |
| 哈希分区示例数据库db | 分区数量 | 两个分区 | high |
| 值分区 | 定义 | 用一个值代表一个分区 | high |
| 值分区示例 | 分区数量 | 定义了204个分区 | high |
| 值分区示例 | 分区范围含义 | 每个分区表示2000年1月到2016年12月之间的一个月 | high |
| 值分区示例 | 数据库创建调用 | db=database("dfs://valuedb", VALUE, 2000.01M..2016.12M) | high |
| 列表分区(LIST) | 定义 | 用一个包含多个元素的列表代表一个分区 | high |
| 列表分区示例 | 分区数量与组成 | 两个分区:第一个分区包含3个股票代码,第二个分区包含2个股票代码 | high |
| 列表分区示例 | 数据库创建调用 | db=database("dfs://listdb", LIST, [`IBM`ORCL`MSFT, `GOOG`FB]) | high |
| 组合分区(COMPO) | 分区列数量 | 可以定义2或3个分区列 | high |
| 组合分区(COMPO) | 可选分区方式 | 每列可以独立采用范围(RANGE)、值(VALUE)或列表(LIST)分区 | high |
| 组合分区(COMPO) | 列关系 | 多个列在逻辑上并列,不存在从属关系或优先级关系 | high |
| 组合分区示例 | 子库定义 | dbDate = database(, VALUE, 2017.08.07..2017.08.11);dbID=database(, RANGE, 0 50 100) | high |
| 组合分区示例 | 组合数据库创建调用 | db = database("dfs://compoDB", COMPO, [dbDate, dbID]) | high |
| 组合分区示例 | 分区表创建与分区列 | pt = db.createPartitionedTable(t, `pt, `date`ID) | high |
| 组合分区示例 | 值分区数量 | 上面的例子创建了5个值分区 | high |
| 组合分区示例(特定日期分区20170807) | 范围分区数量 | 有2个范围分区 | high |
| DolphinDB分区数据库教程(二) | 内容预告 | 将介绍DolphinDB分区原则以及特殊的分区方案 | high |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |