楼主: 2009532140

[体系架构] 【话题讨论】:有关数据库架构,你了解多少?进来说说

[复制链接]
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
31#
发表于 2014-5-28 15:26 | 只看该作者
2009532140 发表于 2014-5-28 15:18
一共分为水平分割和垂直分割

水平分割形象点来看就是将表拦腰截断,一般是指:分区表

是不是这个意思:表有30个字段,拆成一个10个字段,和20个字段的两表?

若是,很困惑:表不是按范式要求定义好了?此外,程序的代码已经写好死,怎么可能拆分?真要拆分,
岂不是重写代码?

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
32#
 楼主| 发表于 2014-5-28 15:29 | 只看该作者
ZALBB 发表于 2014-5-28 15:17
有无这方面的测试案例,文档?

http://www.itpub.net/thread-1608664-1-1.html

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
33#
发表于 2014-5-28 15:38 | 只看该作者
2009532140 发表于 2014-5-28 15:29
http://www.itpub.net/thread-1608664-1-1.html

谢谢,我抽空测试一下,

使用道具 举报

回复
论坛徽章:
22
ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00马上加薪
日期:2014-10-21 18:48:25马上加薪
日期:2014-10-21 18:48:312015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39沸羊羊
日期:2015-06-11 17:08:14巨蟹座
日期:2015-07-10 09:11:44天枰座
日期:2016-01-18 10:58:39秀才
日期:2016-02-18 10:08:14秀才
日期:2016-06-23 14:15:06
34#
发表于 2014-5-28 16:57 | 只看该作者
ZALBB 发表于 2014-5-28 10:40
垂直切割是什么意思?

垂直切割:最平常的垂直切割是把blob,clob字段放到另一张表中,还有一些垂直切割是把一些不常用的长字段放到另一张表中。  http://blog.csdn.net/stevendbaguo/article/details/17604589

字段顺序在大数据量的时候,会有一些性能影响。
   http://blog.csdn.net/stevendbaguo/article/details/8880754

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
35#
发表于 2014-5-28 17:02 | 只看该作者
stevendba 发表于 2014-5-28 16:57
垂直切割:最平常的垂直切割是把blob,clob字段放到另一张表中,还有一些垂直切割是把一些不常用的长字段放 ...

这会不会涉及到改代码程序?如何既能让字段迁移,又不用改代码?

使用道具 举报

回复
论坛徽章:
22
ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00马上加薪
日期:2014-10-21 18:48:25马上加薪
日期:2014-10-21 18:48:312015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39沸羊羊
日期:2015-06-11 17:08:14巨蟹座
日期:2015-07-10 09:11:44天枰座
日期:2016-01-18 10:58:39秀才
日期:2016-02-18 10:08:14秀才
日期:2016-06-23 14:15:06
36#
发表于 2014-5-28 17:59 | 只看该作者
ZALBB 发表于 2014-5-28 17:02
这会不会涉及到改代码程序?如何既能让字段迁移,又不用改代码?

VO这一层不需要改,只是查数据库的那一层改一下

使用道具 举报

回复
论坛徽章:
0
37#
发表于 2014-5-28 22:12 | 只看该作者
数据库架构师虽然对数据库精通程度不需要很高,但也不能太低,数据多种数据库也是必须的,这样才能站的更高,看的更远。

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
38#
发表于 2014-5-29 09:02 | 只看该作者
stevendba 发表于 2014-5-28 16:57
垂直切割:最平常的垂直切割是把blob,clob字段放到另一张表中,还有一些垂直切割是把一些不常用的长字段放 ...

我看了你地址上的文章,认真来讲,你文章里提到的迁移走LOB,不算优化,因为真要读取时,即便放在别的表,效率也是上不去,若不移走,在本表中,你不读取该字段,效率也没问题。

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
39#
发表于 2014-5-29 09:04 | 只看该作者
stevendba 发表于 2014-5-28 17:59
VO这一层不需要改,只是查数据库的那一层改一下

很麻烦,
1  若表结构是按照范式的标准来定义了,再重新规划,也就是数据结构,很难的,动作太大,
2  很少公司愿意为了效率,而且改动程序代码的,那样付出的代价太大,

使用道具 举报

回复
论坛徽章:
22
ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00马上加薪
日期:2014-10-21 18:48:25马上加薪
日期:2014-10-21 18:48:312015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39沸羊羊
日期:2015-06-11 17:08:14巨蟹座
日期:2015-07-10 09:11:44天枰座
日期:2016-01-18 10:58:39秀才
日期:2016-02-18 10:08:14秀才
日期:2016-06-23 14:15:06
40#
发表于 2014-5-29 11:31 | 只看该作者
本帖最后由 stevendba 于 2014-5-29 12:26 编辑
ZALBB 发表于 2014-5-29 09:02
我看了你地址上的文章,认真来讲,你文章里提到的迁移走LOB,不算优化,因为真要读取时,即便放在别的表, ...


   对于clob字段,当不超过4000的时候,它是会存在和记录一起,扫描的时候还是一起扫的。当超过4000会分开存储。垂直分区将大的字段分到其他表中,原表占用的数据块会少,全表扫描的效率就会提高。
   你提到的不读取该字段,虽然不读取,oracle扫描的时候是按照块为单位扫描还是会扫到的,读取的时候也是按块为单位读取,效率我觉得还是差别比较大,除非用一体机。--待会我测一下


--不做垂直切分
create table test(
  a number,
  b varchar2(4000),
  c varchar2(4000),
  d varchar2(4000),
  e varchar2(4000),
  f varchar2(4000),
  g varchar2(4000),
  h varchar2(4000)
);


INSERT INTO test
  SELECT ROWNUM,
         rpad('*', 4000, 1),
         rpad('*', 4000, 1),
         rpad('*', 4000, 1),
         rpad('*', 4000, 1),
         rpad('*', 4000, 1),
         rpad('*', 4000, 1),
         rpad('*', 4000, 1)
    FROM DUAL
  CONNECT BY ROWNUM <= 100000;
commit;
create table test1 as select * from  test;


--做垂直切分
create table test_cuizhi(
  a number
);
INSERT INTO test_cuizhi
  SELECT ROWNUM
    FROM DUAL
  CONNECT BY ROWNUM <= 100000;
commit;
create table test_cuizhi1 as select * from  test_cuizhi;

--开始测试,只是取两个最小的字段
SQL> set timing on
SQL> set autotrace traceonly
SQL> select t.a,t1.a from test t, test1  t1 where t.a=t1.a;
已选择100000行。
已用时间:  00: 00: 53.17
执行计划
----------------------------------------------------------
Plan hash value: 2400077556
----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       | 44504 |  1129K|   173K  (1)| 00:34:38 |
|*  1 |  HASH JOIN         |       | 44504 |  1129K|   173K  (1)| 00:34:38 |
|   2 |   TABLE ACCESS FULL| TEST  | 44504 |   564K| 87801   (1)| 00:17:34 |
|   3 |   TABLE ACCESS FULL| TEST1 |   117K|  1490K| 85344   (1)| 00:17:05 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("T"."A"="T1"."A")
Note
-----
   - dynamic sampling used for this statement
统计信息
----------------------------------------------------------
         52  recursive calls
          0  db block gets
     795627  consistent gets
     534917  physical reads
          0  redo size
    1664840  bytes sent via SQL*Net to client
      73664  bytes received via SQL*Net from client
       6668  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
     100000  rows processed
SQL> /
已选择100000行。
已用时间:  00: 00: 33.36
执行计划
----------------------------------------------------------
Plan hash value: 2400077556
----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       | 44504 |  1129K|   173K  (1)| 00:34:38 |
|*  1 |  HASH JOIN         |       | 44504 |  1129K|   173K  (1)| 00:34:38 |
|   2 |   TABLE ACCESS FULL| TEST  | 44504 |   564K| 87801   (1)| 00:17:34 |
|   3 |   TABLE ACCESS FULL| TEST1 |   117K|  1490K| 85344   (1)| 00:17:05 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("T"."A"="T1"."A")
Note
-----
   - dynamic sampling used for this statement
统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     795446  consistent gets
     552087  physical reads
          0  redo size
    1664840  bytes sent via SQL*Net to client
      73664  bytes received via SQL*Net from client
       6668  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     100000  rows processed


SQL> select t.a,t1.a from test_cuizhi t, test_cuizhi1  t1 where t.a=t1.a;
已选择100000行。
已用时间:  00: 00: 06.17
执行计划
----------------------------------------------------------
Plan hash value: 2501302817
-------------------------------------------------------------------------------------------
| Id  | Operation          | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |              | 88629 |  2250K|       |   310   (2)| 00:00:04 |
|*  1 |  HASH JOIN         |              | 88629 |  2250K|  2168K|   310   (2)| 00:00:04 |
|   2 |   TABLE ACCESS FULL| TEST_CUIZHI  | 88629 |  1125K|       |    42   (3)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| TEST_CUIZHI1 |   101K|  1288K|       |    39   (3)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("T"."A"="T1"."A")
Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
         52  recursive calls
          0  db block gets
       7139  consistent gets
        153  physical reads
          0  redo size
    1664840  bytes sent via SQL*Net to client
      73664  bytes received via SQL*Net from client
       6668  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
     100000  rows processed


SQL> /
已选择100000行。
已用时间:  00: 00: 06.06
执行计划
----------------------------------------------------------
Plan hash value: 2501302817
-------------------------------------------------------------------------------------------
| Id  | Operation          | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |              | 88629 |  2250K|       |   310   (2)| 00:00:04 |
|*  1 |  HASH JOIN         |              | 88629 |  2250K|  2168K|   310   (2)| 00:00:04 |
|   2 |   TABLE ACCESS FULL| TEST_CUIZHI  | 88629 |  1125K|       |    42   (3)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| TEST_CUIZHI1 |   101K|  1288K|       |    39   (3)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("T"."A"="T1"."A")
Note
-----
   - dynamic sampling used for this statement
统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       7008  consistent gets
          0  physical reads
          0  redo size
    1664840  bytes sent via SQL*Net to client
      73664  bytes received via SQL*Net from client
       6668  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     100000  rows processed


使用道具 举报

回复

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

本版积分规则 发表回复

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