• 关于分区,参见《数据库分区、分表、分库、分片》。

    数据表分区后,只是物理存储上分为不同的区,对于软件层面,代码处理的还是同一张表,代码不会因为分区而改变。

    当需要加载的表比系统内存大,就需要使用分区表。

    本文以btcusdt_1t.csv为例进行操作。决定分区数量的原则是:每个分区的大小不超过系统内存的四分之一。

  • 分区方式一:顺序分区

    分区方式:根据行的顺序,将btcusdt_1t.csv分成2区。

    # 构建分区数据库
    db = database("D:/DolphinDB/Data/seqdb", SEQ, 2)
    # 将分区表并行载入
    btcusdt = loadTextEx(db, "btcusdt",,"D:/DolphinDB/Data/btcusdt_1t.csv")
    

    1. database数据库创建函数
      database(directory, [partitionType], [partitionScheme], [locations])
      
      参数 意义 备注
      directory 保存数据库的目录地址 如果创建分布式文件系统中的数据库,以“dfs://”
      partitionType 六种分区类型 顺序分区(SEQ),范围分区(RANGE),哈希分区(HASH),数值分区(VALUE),列表分区(LIST)和组合分区(COMPO)
      partitionScheme 分区方案,描述分区是如何创建的 CHAR, SHORT, INT, DATE, MONTH, TIME, MINUTE, SECOND, DATETIME和SYMBOL
      locations 元组指定分区位置 元组中元素数量,应与分区类型、分区方案共同决定的分区数量相同。
      如果不指定,则所有分区属于当前节点

      分区类型与分区方案对应表:

      分区类型 分区符号 分区方案
      顺序分区 SEQ 整型标量。表示分区的数量。
      范围分区 RANGE 向量。 向量的任意两个相邻元素定义分区的范围。
      哈希分区 HASH 元组。第一个元素是分区列的数据类型,第二个元素是分区的数量。
      值分区 VALUE 向量。 向量的每个元素定义了一个分区。
      列表分区 LIST 向量。 向量的每个元素定义了一个分区。
      组合分区 COMPO 向量。向量的每个元素是一个数据库句柄。
    2. loadTextEx文本载入函数
      loadTextEx(dbHandle, tableName, partitionColumns, fileName, [delimiter=','], [schema])
      
      参数 意义 备注
      dbHandle 保存数据的分布式数据库的句柄 该数据库可以是本地文件系统的数据库,也可以是分布式文件系统的数据库
      tableName 表示分布式表的名字 一个字符串
      partitionColumns 表示分区列 字符串标量或向量。
      对于顺序分区,为空
      对于组合分区,是字符串向量
      filename 绝对路径的文件名 需载入的数据
      delimiter 表格列的分隔符
      schema 表对象,用于指定保存数据的表的结构 第一列的内容为字段名,第二列的内容为表示数据类型的字符串(不区分大小写)。

      loadTextEx函数采用Pipeline机制,一个线程解析数据,同时另一个线程不停的往数据库写。如此实现并行存储功能。

  • 分区方式二:范围分区

    分区方式:根据数据表中某列的范围进行分区。

    # 2.1根据某列(open)的范围进行分区
    db = database("D:/DolphinDB/Data/rangedb1", RANGE, 0 7500 8000)
    btcusdt = loadTextEx(db, "btcusdtrange", `open, "D:/DolphinDB/Data/btcusdt_1t.csv")
    

    **出现问题:**The data type of column [open] doesn’t match the database partition scheme.**原因:**浮点数不能作为分区方案,实际业务中 一般也不会用到。即便是下面的值分区也不可以。

    # 2.1(修正)改用时间作为分区方案
    db = database("D:/DolphinDB/Data/rangedb1", RANGE, 2018.03.29T00:00:00 2018.06.29T00:00:00 2018.10.12T00:00:00 )
    btcusdt = loadTextEx(db, "btcusdtrange", `candle_begin_time, "D:/DolphinDB/Data/btcusdt_1t.csv")
    

    举另外一个例子:

    # 2.2 另外一个例子
    n = 1000000
    ID= rand(10, n)
    x = rand(1.0, n)
    t = table(ID, x)
    db = database("D:/DolphinDB/Data/rangedb2", RANGE, 0 5 10)
    pt = db.createPartitionedTable(t, `pt, `ID)
    pt.append!(t)
    pt = loadTable(db, `pt)
    select count(*) from pt
    
    1. createPartitionedTable()创建磁盘或内存中的分区表
      createPartitionedTable(dbHandle, table, [tableName], partitionColumns)
      
      参数 意义 备注
      dbHandle 保存分区表的分布式数据库 可以是本地文件系统;
      或者分布式文件系统;
      如果没有指定,会是内存的分区表
      table 一个或一个系列的表 系统将会根据表的结构创建新的分区表
      tablename 保存到磁盘的分布式表的表名 或者是内存的分区表的表名
      partitionColumns 一个字符串或者字符串向量,表示分区列 对于多层次分区,是一个字符串向量

      与append!或savePartition来生成一个分区表,不能用于创建顺序分区的表。

      创建分区表时只会使用参数table的结构,并不会把table中的数据插入到新的分区表中。

  • 分区方式三:值分区

    分区方式:根据列中元素的值分区

    # 204个分区,每个分区代表2000.1到2016.12之间的每个月份
    n=1000000
    month=take(2000.01M..2016.12M, n)
    x=rand(1.0, n)
    t=table(month, x)
    db=database("C:/DolphinDB/Data/valuedb", VALUE, 2000.01M..2016.12M)
    pt = db.createPartitionedTable(t, `pt, `month)
    pt.append!(t)
    pt=loadTable(db,`pt)
    select count(x) from pt
    
  • 分区方式四:层次分区

    分区方式:一个数据库可以有二级或三级分区

    # 两级分区,第一级分区是值分区;第二级分区是范围分区
    n=1000000
    ID=rand(100, n)
    dates=2017.08.07..2017.08.11
    date=rand(dates, n)
    x=rand(10.0, n)
    t=table(ID, date, x)
    dbDate = database(, VALUE, 2017.08.07..2017.08.11)
    dbID=database(, RANGE, 0 50 100)
    db = database("C:/DolphinDB/Data/hierDB", HIER, [dbDate, dbID])
    pt = db.createPartitionedTable(t, `pt, `date`ID)
    pt.append!(t)
    pt=loadTable(db,`pt)
    select count(x) from pt
    

DolphinDB使用案例2:数据表分区相关推荐

  1. 数据表分区策略及实现

    转载自:https://blog.csdn.net/why_2012_gogo/article/details/51492573 数据表分区策略及实现(一): 什么是表分区?表分区其实就是将一张大数据 ...

  2. mysql 数据表分区与分表介绍

    什么是分表? 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件.这些子表可以分布在同一块磁盘上 ...

  3. Java案例:数据表转换成XML文档

    将数据表查询内容转换成XML文件,便于在网络上进行传输,具有一定的实用价值.   1.数据表(student) 2.数据库连接管理类 /*** 功能:获得数据库连接* 作者:华卫* 日期:2010年4 ...

  4. Mysql PARTITION 数据表分区技术日期

    参考:http://www.sunzhenghua.com/mysql-myisam-innodb-partition-range-list-hash 在这一章节里, 我们来了解下 Mysql 中的分 ...

  5. mysql range代表什么意思_MySQL数据表range分区例子

    某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低.此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改:在一个主读辅写的数据库中,当数据表数据超过10 ...

  6. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...

  7. mysql 社区版 innodb_MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) / --------------------         写在最前面            ------------------ ...

  8. Mysql5.1大表分区效率测试

    mysql5.1开始支持数据表分区了,原来的分表可以不用了,分表的不足在于多表查询不方便.呵呵,下面来简单测试下表分区的查询效率. 1.用来测试的数据为discuz论坛的数据库,表为cdb_posts ...

  9. mysql数据表操作_MySQL数据表基本操作实例详解

    本文实例讲述了MySQL数据表基本操作.分享给大家供大家参考,具体如下: 数据表的基本操作 1.主键约束要求主键列的数据唯一,并且不允许为空.主键能够唯一地识别表中的一条记录,可以结合外键来定义不同数 ...

最新文章

  1. 利用BP神经网络教计算机进行非线函数拟合(代码部分多层)
  2. 10.2 梯度下降-机器学习笔记-斯坦福吴恩达教授
  3. swift golang java,解决两数之和 (Javascript, Java, C#, Swift, Kotlin, Python,C++, Golang)
  4. css 固定内容显示范围,css之让文字在一定范围内显示,不超过固定的宽度和高度...
  5. Android混流技术,基于Android的实时语音混沌保密技术的实现
  6. Wireshark和 TcpDump抓包分析心得
  7. 优秀的开源项目C_适合提高C/C++、网络编程能力的开源项目!不要错过,赶紧收藏...
  8. 推荐一个前端ui框架:SuperUI ui开发框架
  9. 如何在Linux中安装Intel核显驱动?
  10. 关于一些初级ACM竞赛题目的分析和题解(一)。
  11. c语言如何输出数组最大值和最小值,C语言输出数组中最大和次大的数
  12. linux 安装Julia
  13. 全国高中数学联赛——组合
  14. 找出阿里云RDS数据库的IP地址
  15. ShareX的使用说明
  16. 【汇正财经】选股有什么策略?如何找到适合自己的选股策略?
  17. 看一眼就会马上收藏的宝藏设计网站
  18. Z 字形变换(C语言)
  19. tf.nn.dynamic_rnn返回值详解
  20. 【java毕业设计】基于java+Lucene+Tomcat的搜索引擎设计与实现(毕业论文+程序源码)——搜索引擎

热门文章

  1. PTA 7-5 素数排位(10 分)
  2. 下面几款手机APP请慎重选择 不要迷恋其中
  3. js的全局变量、局部变量和变量提升的问题
  4. 关于计算机故障排除的文章 三(转)
  5. 吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现)
  6. 如何利用空闲玩转咸鱼
  7. Win10安装mysql详细步骤
  8. javacv实现直播流
  9. VMware问题:为启用了Hyper-V的主机禁用侧通道缓解
  10. AJAX与后端联调问题