百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

sybase数据库分区介绍(sybase数据类型)

sinye56 2024-10-20 13:25 6 浏览 0 评论

Sybase数据库分区介绍

及测试报告

第1章 目的... 2

第2章 参考... 2

第3章 分区介绍... 2

3.1. 分区解释... 3

3.2. 分区作用... 3

3.3. 分区方式... 3

3.4. 数据库支持... 3

3.5. 分区数据查询原理.. 3

3.6. 分区原则... 4

3.7. 数据存放原则... 4

3.8. 分区详解... 4

3.8.1、 List分区... 4

3.8.2、 Range分区... 5

3.8.3、 哈希分区... 5

3.9. 分区和不分区的比较... 6

第4章 测试用例... 7

4.1. 建立表test和test1. 7

4.2. 准备数据... 7

4.3. 测试方法... 7

4.4. 测试要点... 8

4.5. 测试结果... 8

第1章 目的

为了更好的把unicall系统设计的完美,我对现在的unicall数据库部分提出了自己的建议性修改,并进行了测试,以求能使unicall数据库的响应速度进一步的提高

为了解决不断增长的数据导致的数据容量超出设计的范围,导致查询速度慢,我们需要设计一个规则,让新增的数据按我们的要求存放到指定的设备上面,以利于我们进行数据库的查询和管理。分区就是为了解决以上问题。

第2章 参考

<<Sybase Adaptive Server Enterprise 15数据分区>>

第3章 分区介绍

分区有2个概念

1 数据库分区

2 表分区

由于实际应用中表分区应用的比较多,我们在此只对表分区进行介绍,对于数据库分区不做介绍。

3.1.分区解释

分区是对数据库数据的存放位置按照某种方式进行分段的划分为若干个区,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。

3.2.分区作用

分区是为了解决不断增长的数据量导致的数据容量超出设计的范围,导致查询速度慢的最佳途径。

在不断增长的数据库中,我们需要设计一个规则,让新增的数据按我们的要求存放到指定的设备上面,以利于我们进行数据库的查询和管理。

l 提高查询速度

l 分离数据,利于维护

3.3.分区方式

当前数据库的分区方式有4种,但有的数据库不一定支持

1 list 分区,即列表分区

2 range 分区, 即范围分区

3 hash 分区,即哈希分区

4 子分区。

还有一个是sybase特有的分区 :顺序分区

3.4. 数据库支持

当前数据库在下列版本上可以支持分区:

1 oracle 10g

2 db2 v9

3 mysql5.1

4 sybase15

其中 oracle10g支持子分区,mysql5.1支持子分区,但还没有完善,实际效果是影响性能,mysql5。2才支持子分区。Sybase15不支持子分区。

Informax暂没有看到支持分区的介绍。

3.5.分区数据查询原理

分区数据查询原则:查询引擎如果知道数据表分区,会根据分区方式和关键值去确定需要查找的分区表,然后在确定的分区表空间内查询数据,而其他的分区则不会执行查询,这样就提高了查询的速度。

3.6.分区原则

l 查询响应时间

l 数据存放

l i/o

3.7.数据存放原则

如果是oracle数据库,可以支持子分区,数据可以按年分区,然后再用其他方式分区,这样的好处是维护方便,可以增加,删除分区方便,对保存数据和维护数据容易。

如果不是oracle数据库,基本不支持子分区,所以就需要按月或天或者时间为关键值来做range分区,做到数据平均分配。

如果做关键值的字段值出现大量的重复的值,我们就要考虑用range分区来分开。这个时候不能用hash分区,否则数据容易向一个分区“倾斜”。

3.8.分区详解

3.8.1、List分区

以数据表的某个列作为分区的根基,如果一条记录的该字段值落在该列表内,该记录就保存到一个表空间上。

以sybase为例

Create table test

Called int not null,

Names varchar(40) not null,

Adr varchar(40) notnull

Partition by list ( name )

(

West values (‘北京’, ‘上海’) on seg1,

East values( ‘广州’, ‘成都’,’深圳’ ) on seg2

)

如果有下面的几条记录

1000 里萨 广州

1001 Job 上海

1002 Tom 北京

1003 Jom 成都

1004 Hom 成都

1005 Jobe 深圳

1006 Hob 上海

1007 刘三 北京

1008 全速 广州

如果把这些记录插入到表test内,我们就可以实现记录1000,1003,1004,1005,1008 保存到seg2表空间内,而记录1001,1002,1006,1007保存到seg1表空间内,如果记录多的话,我们可以多分几个区保存数。

3.8.2、Range分区

Range分区也叫范围分区,数据库管理员可以基于关键列中的数据范围指定数据在各分区上的存储位置.

例如

create table customer

(

ord_date datetime not null,

name varchar(20) not null,

address varchar(40) not null

)

partition by range (ord_date)

(ord_date1 values <= (3/31/05) on segment1,

ord_date2 values <= (6/30/05) on segment2,

ord_date3 values <= (9/30/05) on segment3

ord_date4 values <= (12/31/05) on segment4)

本例是按时间来保存数据,当我们挑选05年9月10号的数据的时候,查询引擎只会到segment3分区去找,其他的分区本次查询不会涉及到。缩短了查询时间。

3.8.3、哈希分区

这种数据分区方式是根据在指定列上利用内部哈希算法计算的结果来决定数据存储到哪一个分区。这里不需要指定列表或数值的范围。如果列键包含唯一数据,或者数据重复度极小,哈希分区将在其所有分区上平衡数据存储。然而,如果有大量重复数值,分区将会“倾斜”,一些分区上的数据可能会比其它分区多。

哈希分区在要为大表建立很多分区,或者关键列中的数据没有排序的情况下尤为有用。它同时还可以配合查询处理引擎使得查询工作更为有效。

例如:

Create table test

(

Lid int not null,

Name1 varchar(50) not null,

Addr varchar(100) not null

)

Partition by hash( lid )

(

Lid1 on seg1

Lid2 on seg2

Lid3 on seg3

)

我们假设有下列记录

9 里萨 广州

10 ob 上海

11 om 北京

12 om 成都

13 om 成都

14 obe 深圳

15 ob 上海

16 三 北京

17 速 广州

18 解 上海

19 思 深圳

如果倒入数据到表内,9,12,15,18 会保存到seg1分区上面,10,13,16,19会保存到seg2分区上面, 而11, 14,17会保存到第三个分区上面。

3.9 分区和不分区的比较

我们拿hash分区的来做分析

如果我们要查询lid=17的记录来,如果不分区,lid为索引,查询引擎需要作9次比较才能得到记录。

如果我们分了3个分区,如果查询lid=17的,查询引擎根据表建立的语句知道分区方法,然后根据关键域值lid为17/3=2,只是说数据在seg3上面,在seg3上面查询lid=17的比较次数为最大3次,这样数据库查询引擎只用3次就能找到lid=17的记录。i/o和cpu利用率也大大地降低。

3.10分区查询图例

我们拿hash分区来做个图例:

输入查询条件lid=17

分区1

分区2

分区3

数据查询范围

表分区类型

第4章 测试用例

4.1.建立表test和test1

Create table test

(

Lid int not null,

Name1 varchar(50) not null,

Addr varchar(100) not null

)

Partition by hash( lid )

(

Lid1

Lid2 on test2

)

Create table test1

(

Lid int not null,

Name1 varchar(50) not null,

Addr varchar(100) not null

)on userspace1

4.2 准备数据

1 gsh Beijing

2 ccc beijing

3 bb beijing

4 。。。。。。。。。。

5

共有100万条记录。

分别倒入test和test1表内

4.3 测试方法

我们随意抽取一条记录,利用查询引擎挑选数据的响应时间来评判分区的利弊。

我们用select * from test where lid = 84000 的响应时间来测试。

4.4.测试要点

对相同条件下分区和不分区,重复次数,分区个数进行分别的测试。

针对数据落在一个分区内。

4.5 测试结果

数据量 50万条(不重复数据) 100万条(2次重复) 100万条(10次重复)

分区 不分区 2个分区 不分区 2个分区 不分区 10个分区

Select 0.094 0.032 0.172 0.063 0.157 0.015

Insert 0.016 0.016 0.016 0.016 0.016 0.016

Update 0.094 0.032 0.172 0.063 0.156 0.015

4.6 测试结论

l 执行查询、更新等sql命令,第一次运行查询、更新的速度要慢一点,但之后会有速度优化;

l 分区对sql语句的执行,优化方面似乎更多,因此多次运行后的语句在分区表上执行效率更高;

l 第一次运行sql时,未分区表比已分区表要快。

第5章 附录

5.1 Mysql5.1测试结果

数据量 50万条(随机数据)

分区 不分区 50个分区

Select 0.66 0.01

Insert 0.5 0.01

Update 1.79 0.01

5.2.Oracle10g测试结果

数据量 30万条(随机数据)

分区 不分区 12个分区

Select 1.75 0.08

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&amp;配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: