楼主: jeries2008

[有问必答活动] 关于数据库分区(分布式数据库设计)

[复制链接]
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
11#
发表于 2008-11-11 03:17 | 只看该作者
also can you show the DDL of the table and what data are in the table?
select * from <tbname>

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2008-11-11 12:31 | 只看该作者
原来我没有创建表空间……

现在我创建了表空间,数据能够存储到两个物理结点上了,但是我发现了一个有趣的问题……

例如我现在添加10个数据,从结点a添加id分别是1-5的数据从结点b添加id分别是6-10的数据,然后用db2 select * from test2 where dbpartitionnum(id)=0和db2 select * from test2 where dbpartitionnum(id)=1,看到两个结点确实有数据了,但是,两个结点分别存储的数据并不是我在各自结点上添加的数据!
,按照理想的情况,db2 select * from test2 where dbpartitionnum(id)=0显示的数据应该是id从1-5的数据,但是现在显示的id是5、7、10的数据!

后来经过实验,发现无论是我从哪个结点机器无论按照怎样的顺序添加数据,存储在a机也就是node=0的机器永远只存储id是5,7,10的数据,而b机存储其他数据,这让我觉得对于添加的数据,db2好像经过某种固定的算法来选择存储的结点机器一样……但是我现在要求,从哪个结点添加的数据就要存储在哪个结点,请问下这应该怎么设置啊?

ps:我的分区键设置的是id

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
13#
发表于 2008-11-11 12:40 | 只看该作者
yes, db2 will do hash for the partitioning column when you insert new data.
by default the partitioning column is the first column that's not LOB, for example, there could be a function HASH do something like
TargetPartition = HASH(column1)%NumOfPart

hope that makes it clear

使用道具 举报

回复
论坛徽章:
42
ITPUB元老
日期:2005-09-09 13:45:35马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14优秀写手
日期:2013-12-18 09:29:09ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32版主3段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-02-13 15:13:36
14#
发表于 2008-11-11 13:32 | 只看该作者
原帖由 jeries2008 于 2008-11-8 16:43 发表
感谢wangzhonnew  的回复!
我在查资料的时候看到了你在2006年的时候回复一个分布式数据库设计的帖子http://www.itpub.net/viewthread. ... p;extra=&page=1,看完了收获颇丰,没想到今天也能遇到你啊!!

那个warehouse要license,看来我是没法免费得到了,现在打算用8.2 ESE版来做这个设计。

ps:我们学的那本书是中科院的《分布式数据库原理》,对于水平分片和垂直分片我举个例子,比如模式STUDENT(id,name,pro,class)


        id    name    pro    class                                      
1.    01        n1      p1        c1            
2.    02        n2      p2        c2                     
3.    03        n3      p3        c3
4.   ……       ……     ……       ……
——————————————————    (以上数据位于site1,以下数据位于site2)
10.   10        n4      p4        c4
11.   11        n5      p5        c5
12.  ……      ……       ……       ……                 

这个是水平分片。


        id    name    |    pro    class                                      
1.    01        n1    |     p1        c1            
2.    02        n2    |      p2        c2                     
3.    03        n3    |     p3        c3
4.   ……       ……    |   ……       ……

10.   10        n4   |    p4        c4
11.   11        n5   |   p5        c5
12.  ……      ……    |      ……       ……      

左面属性的数据在site1,右面属性的数据在site2,这个是垂直分片……

教材上讲的名词跟db2中的可能有差异,我也不知道db2中叫什么……

我先实验一下啊,有什么问题还要继续请教您的~~

再次感谢wangzhonnew!



这里说的垂直分片很像一种说法 "按列存储" ,据我了解 sybase 的 IQ 的就是以按列存储的,对于数据仓库系统查询性能很高。(这点我有亲身体会, sybase 的来做售前直接在你机器上装个数据库来演示,效果是很明显的,但是更新的代价较高)

使用道具 举报

回复
论坛徽章:
42
ITPUB元老
日期:2005-09-09 13:45:35马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14优秀写手
日期:2013-12-18 09:29:09ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32版主3段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-02-13 15:13:36
15#
发表于 2008-11-11 13:32 | 只看该作者
具体介绍说明如下(转载):

列存储
不同于传统的关系型数据库,其数据在表中是按行存储的,Sybase IQ是通过表中的列来存储与访问数据的。尽管这种方式很明显的不太适合于交易环境,在交易环境中,一个事务与一行数据有效对应,而在查询进程环境中,很显然,查询是基于特定的列来选择的。
列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。事实上,情况并不象上述的这样简单,Sybase IQ有各种方法支持基于列的索引,我们将在下面就此讨论。
使用列方法的另一个结果就是,Sybase IQ在压缩方面比传统的关系型数据库更加有效(根据Sybase所称,效果可达5倍之好)。这个原因,无消说,是由于同一列中的所有数据域有相同的数据类型。因此,每一列都可以为优化的效率与检索进行压缩。相比来讲,基于行的存储,各个不同的域拥有各不相同的数据类型,这非常适合于交易进程。在这样的环境中,不断变换理想的压缩算法是不可行的,这意味着任何压缩都将可能是一种最低通用的规则。
基于列的方法的另一个重要优势完全基于所有读出的数据量。无论何时你从传统的数据库中访问数据,你需要读出完整的每一行,而不管你实际所感兴趣的是哪些域。实际上,这可能意味着读300个字节的数据仅仅检索20个字符的数据。但是,基于列来读取数据,你仅仅需要读出你想要了解的数据。当然,读取一条单独的记录时,性能上的不同可以忽略,但是许多查询需要进行全表扫描。当读取数百万行数据时,性能的不同就会非常显著。
Sybase 认为,Sybase IQ的列存储天然的比普通的ROLAP方法提供更佳的性能,IQ不需要象多数竞争对手或者Sybase Adaptive Server Enterprise(ASE)一样支持硬件的并行处理。尤其是,Sybase指出,与数据分区相关的问题就是需要支持硬件的并行机制。显而易见,不论如何进行分区,分区都会带来很多问题(更不必说额外的维护了),不过,它打开了性能改进的实质性途径。然而,Sybase进一步阐述道,这仅仅是对基于行的方法所与生俱来的糟糕性能的一种补偿机制。
Sybase 有很多事实支持它的论断,但这并不意味着Sybase避免任何形式的数据分区。然而,不同于水平分区,Sybase IQ实施的是垂直分区,也就是说分区是按照列而不是按照行进行的。该方法的优势之一是分区从来不会变得不均衡,这是由于每个表中的每列都有相同数量的域。这大大降低了管理分区的维护需求,同时消除了数据库的重新组织,而在分区变得不均衡从而开始影响性能的时候,数据库重新组织是必需进行的。   
最后,需要注意的是,Sybase IQ并没有避免使用OLAP。对于那些希望在聚合层次下以一个相对预先定义的方式进行查询的用户来讲,OLAP具有明显的优势。基于此,Sybase 支持OLAP功能属性如排列、百分比、平均。


数据压缩   
传统的数据库引擎不能以一种通用的方式进行数据压缩,主要是由于存在以下三个问题:
1. 按行存储的数据存储方式不利于压缩。这是因为数据(大多为二进制数据)在以这种方式存储时重复并不多。我们发现,按行存储的数据,最多能有5-10%的压缩比例;
2. 对于许多2K 和4K 的二进制数据页来说,为压缩和解压缩而增加的开销太大;
3. 在OLTP 环境中,大量读取和更新混杂在一起。每一次更新需要进行压缩操作,而读取只需解压缩操作,大多数的数据压缩算法在压缩时比解压缩时慢4 倍。这一开销将明显降低OLTP 数据库引擎的事务处理效率而使得数据压缩的代价昂贵到几乎不能忍受。
在数据仓库应用中,数据压缩可以用小得多的代价换取更大好处。其中包括减少对于存储量的要求;增大数据吞吐量,这相当于减少查询响应时间。  
Sybase IQ 使用了数据压缩。这是由于数据按列存储,相邻接的字段值具有相同的数据类型,其二进制值的范围通常也要小得多,所以压缩更容易,压缩比更高。Sybase IQ 对按列存储的数据通常能得到大于50%的压缩。更大的压缩比例,加上大页面I/O,使得Sybase IQ在获得查询的优良性能的同时,减少了对于存储空间的需求。  
在传统的数据库中,为提高查询性能所建的索引占用的磁盘空间往往需要比数据本身需要的磁盘空间多出3-10倍。而Sybase IQ 存储数据所占用的磁盘空间通常只是原数据文件的40%-60%,是传统数据库所占用空间的几分之一。
智能压缩技术,与精巧的索引结构和列存储结合,给了IQ 比其他数据库引擎高的多的存储效果。这将获得更低的存储成本与更高的性能(因为系统仅需很少的磁盘I/O读取或写入任何给定的数据库块)。

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2008-11-11 23:15 | 只看该作者
呵呵,感谢楼上的,长见识了~

还是继续我的问题....

恩,果然被我分析对了,竟然还要经过哈希计算……我现在不要让他计算,我现在就要让记录存储在添加记录的机器上,请问有什么办法吗?有没有一个类似于dbpartitionnum=XXX的条件?

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
17#
发表于 2008-11-11 23:41 | 只看该作者
nope that's not possible, db2 must know on which partition does the data locate when you run query.
for example if you do
select * from t1 where c1=5

db2 will have to do the same hash algorithm for 5 and locate on which partition does the row exist.
therefore it's not possible for you to specify which partition does the row should locate :-)

使用道具 举报

回复
论坛徽章:
0
18#
 楼主| 发表于 2008-11-12 10:50 | 只看该作者
经过我这几天的摸索,再加上查阅的资料来看,db2 的数据库分区功能,并不符合分布式数据库的特性

从目前查到的资料来看,要组建一个分布式数据库系统,至少需要DB2 Connect的支持,哎……看来还要重新再来啊……

问下有没有组建分布式系统方面的资料呢?最好是实例...

谢谢啊~

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
19#
发表于 2008-11-12 10:52 | 只看该作者
原帖由 jeries2008 于 2008-11-12 11:50 发表
经过我这几天的摸索,再加上查阅的资料来看,db2 的数据库分区功能,并不符合分布式数据库的特性。

从目前查到的资料来看,要组建一个分布式数据库系统,至少需要DB2 Connect的支持,哎……看来还要重新再来啊……

问下有没有组建分布式系统方面的资料呢?最好是实例...

谢谢啊~

not sure what do you mean by "分布式数据库的特性", can you give your definition what is 分布式数据库?
why it need db2 connect to build distributed database system?
the conclusion doesn't make any sense to me anyway....

使用道具 举报

回复
论坛徽章:
0
20#
 楼主| 发表于 2008-11-12 11:05 | 只看该作者
可能是我的需求没有表达清楚吧,下面我详细的描述一下~

一个医院,这个医院分布在3个地区,每个分院都有自己的数据库系统,现在要求,前来看病的病人,只要在一个分院开了一个病历(以电子档案形式存在),在所有的分院都能就诊,而病人在哪里开的病历,病历就存放在那个分院的数据库,病人去其他分院就诊,医生可以调取病人的病历查看或改写病历。这个分布式的特点是,每个分院既可以管理自己的数据库系统(局部应用),又可以管理其他分院的数据库系统(全局应用)。

我觉得db2的DPF功能,更像一个多处理机系统,而不是一个分布式数据库系统。

希望高人能够给出意见啊~!!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表