1.为什么对数据进行分区?

对数据库进行分区可以极大的降低系统响应延迟同时提高数据吞吐量。具体来说,分区有以下几个好处:

分区使得大型表更易于管理。对数据子集的维护操作也更加高效,因为这些操作只针对需要的数据而不是整个表。一个好的分区策略将通过只读取满足查询所需的相关数据来减少要扫描的数据量。当所有的数据都在同一个分区上,对数据库的查询,计算,以及其它操作都会被限制在磁盘访问IO这个瓶颈上。

分区使得系统可以充分利用所有资源。一个良好的分区方案搭配并行计算,分布式计算就可以充分利用所有节点来完成通常要在一个节点上完成的任务。 当一个任务可以拆分成几个分散的子任务,每个子任务访问不同的分区,就可以达到提升效率的目的。

分区增加了系统的可用性。由于分区的副本通常是存放在不同的物理节点的。所以一旦某个分区不可用,系统依然可以调用其它副本分区来保证作业的正常运转。

2.分区方式

DolphinDB database支持多种分区方式: 范围分区(RANGE),哈希分区(HASH),值分区(VALUE),列表分区(LIST),复合分区(COMPO)。

范围分区每个区间创建一个分区,是最常用的也是推荐的一种分区方式。可以把数值在一个区间内的所有记录放置到一个分区。

哈希分区利用哈希函数对分区列操作,方便建立指定数量的分区。

值分区每个值创建一个分区,例如股票交易日期,股票交易月。

列表分区是根据用户枚举的列表来进行分区,比值分区更加灵活。

复合分区适用于数据量特别大而且查询经常涉及两个或以上的分区列。每个分区选择都可以采用区间,值或列表分区。例如按股票交易日期进行值分区, 同时按股票代码进行范围分区。

我们可以使用

database函数创建数据库。

语法:

database(directory, [partitionType], [partitionScheme], [locations])

参数

directory:数据库保存的目录。DolphinDB有三种类型的数据库,分别是内存数据库、磁盘上的数据库和分布式文件系统上的数据库。创建内存数据库,directory为空;创建本地数据库,directory应该是本地文件系统目录;创建分布式文件系统上的数据库,directory应该以“dfs://”开头。本教程以创建Windows本地数据库为例。

partitionType:分区方式,有5种方式: 范围分区(RANGE),哈希分区(HASH),值分区(VALUE),列表分区(LIST),复合分区(COMPO)。

partitionScheme:分区方案。各种分区方式对应的分区方案如下:

locations:指定每个分区所在的节点位置。如果是分布式文件系统的数据库或者复合分区(COMPO)类型的数据库,不能使用locations参数。

2.1 范围分区

范围分区是由分区向量决定。分区向量表示区间,包含起始值,不包含结尾值。

在下面的例子中,数据库db有两个分区:[0,5)和[5,10)。使用函数append!在数据库db中保存表t为分区表pt,并使用ID作为分区列。

n=1000000

ID=rand(10, n)

x=rand(1.0, n)

t=table(ID, x)

db=database("dfs://rangedb", RANGE,  0 5 10)

pt = db.createPartitionedTable(t, `pt, `ID)

pt.append!(t);

pt=loadTable(db,`pt)

select count(x) from pt

2.2 哈希分区

哈希分区对分区列使用哈希函数以产生分区。哈希分区是产生指定数量的分区的一个简便方法。但是要注意,哈希分区不能保证分区的大小一致,尤其当分区列的值的分布存在偏态的时候。此外,若要查找分区列上一个连续区域的数据时,哈希分区的效率比区域分区或值分区要低。

在下面的例子中,数据库db有两个分区。使用函数append!在数据库db中保存表t为分区表pt,并使用ID作为分区列。

n=1000000

ID=rand(10, n)

x=rand(1.0, n)

t=table(ID, x)

db=database("dfs://hashdb", HASH,  [INT, 2])

pt = db.createPartitionedTable(t, `pt, `ID)

pt.append!(t);

pt=loadTable(db,`pt)

select count(x) from pt

2.3 值分区

值分区用一个值代表一个分区。下面的例子定义了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("dfs://valuedb", VALUE, 2000.01M..2016.12M)

pt = db.createPartitionedTable(t, `pt, `month)

pt.append!(t)

pt=loadTable(db,`pt)

select count(x) from pt

2.4 列表分区

在列表(LIST)分区中,我们用一个包含多个元素的列表代表一个分区。下面的例子有两个分区,第一个分区包含3个股票代码,第二个分区包含2个股票代码。

n=1000000

ticker = rand(`MSFT`GOOG`FB`ORCL`IBM,n);

x=rand(1.0, n)

t=table(ticker, x)

db=database("dfs://listdb", LIST, [`IBM`ORCL`MSFT, `GOOG`FB])

pt = db.createPartitionedTable(t, `pt, `ticker)

pt.append!(t)

pt=loadTable(db,`pt)

select count(x) from pt

2.5 组合分区

组合(COMPO)分区可以定义2或3个分区列。每列可以独立采用范围(RANGE),值(VALUE)或列表(LIST)分区。组合分区的多个列在逻辑上是并列的,不存在从属关系或优先级关系。

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("dfs://compoDB", COMPO, [dbDate, dbID])

pt = db.createPartitionedTable(t, `pt, `date`ID)

pt.append!(t)

pt=loadTable(db,`pt)

select count(x) from pt

上面的例子创建了5个值分区。

在20170807这个分区,有2个范围分区。

MySQL时间序列分表分区_干货丨时序数据库分区教程相关推荐

  1. 干货丨时序数据库DolphinDB即时编译(JIT)详解

    DolphinDB是高性能分布式时序数据库,内置了丰富的计算功能和强大多范式编程语言.为了能够提高DolphinDB脚本的执行效率,从1.01版本开始,DolphinDB支持即时编译(JIT). 1 ...

  2. 干货丨时序数据库DolphinDB文本数据加载教程

    DolphinDB提供以下4个函数,将文本数据导入内存或数据库: loadText: 将文本文件导入为内存表. ploadText: 将文本文件并行导入为分区内存表.与loadText函数相比,速度更 ...

  3. 干货丨时序数据库DolphinDB客户端软件教程

    DolphinDB提供了从基于Java的GUI, VS Code Extension, Web界面,到命令行等各种灵活友好的交互界面,具体包括以下6种客户端交互方式. 1. DolphinDB GUI ...

  4. mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...

    DolphinDB提供了两种导入MySQL数据的方法:ODBC插件和MySQL插件.我们推荐使用MySQL插件导入MySQL数据,因为它的速度比ODBC导入更快,导入6.5G数据,MySQL插件的速度 ...

  5. ad设置塞孔_干货丨PCB线路板过孔堵上,到底是什么学问?

    原标题:干货丨PCB线路板过孔堵上,到底是什么学问? 1.BGA位在阻焊为什么要塞孔?接收标准是什么? 答:首先阻焊塞孔是为了保护过孔的使用寿命,因为BGA位所需塞的孔一般孔径都比较小,在0.2--0 ...

  6. 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表

    完全卸载MySQL 数据库--清空MySql注册表 完全卸载Mysql的步骤主要有以下4步: 1. 通过控制面板- 卸载程序--mysql 将其卸载掉. 2. 删除Mysql 安装文件目录下的Mysq ...

  7. java mysql 多表查询_解析Mysql多表查询的实现

    查询是数据库的核心,下面就为您介绍Mysql多表查询时如何实现的,如果您在Mysql多表查询方面遇到过问题,不妨一看. Mysql多表查询: CREATE TABLE IF NOT EXISTS co ...

  8. 5u以太网用交换机连接电脑_干货丨如何用自己的电脑直接连接NUS打印机

    期末考试又来啦,有好多同学在后台问小助手怎么把复习资料打印下来. 有同学会抢答了:这题我会!拿着U盘去图书馆就可以打印了呀! 没错,用U盘打印是大家最常用的方式.但小小的U盘不仅容易弄丢,还容易发生各 ...

  9. mysql建表测试_总结MySQL建表、查询优化实用小技巧

    MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...

最新文章

  1. Html,Css,Javascript是什么?
  2. golang 中string和int类型相互转换
  3. java 删除list_Java中如何优雅地删除List中的元素
  4. HashMap put原理详解(基于jdk1.8)
  5. php读写分离是什么意思,php mysql读写分离
  6. 利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
  7. python中递归函数写法_《Python入门08》你知道Python递归函数怎么写吗~~
  8. 并行算法设计与性能优化总结
  9. win10系统svn服务器端安装步骤,win10系统安装svn服务器的操作方法
  10. 学习矩阵分析与应用过程中的点滴记录(一)
  11. 操作系统-5大功能、5大类型
  12. 商场楼层地图怎么制作,高效、便捷的商场二三维地图绘制平台
  13. 学生个人网页设计作品 HTML+CSS+JavaScript仿小米商城(8页) 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做
  14. Android 模拟屏幕点击和物理按键方式
  15. 我国数字出版产业发展规模[中国新闻出版网]
  16. 从阿里生态演进中,菜鸟的数据中台怎么飞起来?
  17. ESD二极管封装详解
  18. 电商实训二:电子支付工具
  19. 绘图技巧 | 超多种类在线可视化图表制作工具推荐
  20. 逃离塔克夫单机版没机器人_逃离塔科夫官网机器人验证通过方法介绍

热门文章

  1. C#开发浏览器谷歌内核
  2. 中国科学: 信息科学 中文模板2019 CCT-LaTeX texlive2019 成功编译
  3. 【Leetcode】Customers Who Never Order
  4. python求和1到100_python求1到100的和的几种方法
  5. ORACLE使用dbv工具检验数据文件是否有坏块
  6. 怎么用计算机求平均值,电脑教程:计算机平均值怎么求
  7. 分享一个大佬的网站,获取法定节假日
  8. Win10开了热点之后,电脑不能上网怎么解决?
  9. python动态监控日志内容
  10. 【python】算术运算报错can‘t multiply sequence by non-int of type ‘float‘