Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1559993
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2011-11-09 14:21:51

5.存储方面的改变
    Sybase IQ 15之前,一个dbspace是指一个文件或是一个裸设备。从IQ 15开始,dbspace的概念发生了变化,现在是指数据的逻辑容器:一个dbspace由一个或多个dbfiles组成(一个dbfile表示一个文件或一个裸设备)。
   
    Sybase IQ 15数据库包括了多个逻辑存储结构:
  (1)Catalog Store:存储数据库的元数据(metadata)
  (2)Main Store:存储系统的使用的数据和用户数据
  (3)Temp Store:存储装载和查询操作执行期间生成的临时数据(例如:排序结果)和用户定义的 
     临时表。

    在Main Store中,一个预先定义的dbspace(在创建数据库时指定,称作IQ_SYSTEM_MAIN)用于存放系统使用的结构和数据(例如:Free List、版本空间、节点间通讯、TLV日志等)。从IQ 15开始,Sybase建议不要在IQ_SYSTEM_MAIN dbspace中存放用户数据。如果没有IQ 15的VLDB选件,除了IQ_SYSTEM_MAIN dbspace外,你可以创建一个包含多个dbfiles的user dbspace(如果有VLDB选件的话可以创建多个user dbspaces)。下图描述了IQ 15的数据库存储结构:
 
 
     Sybase建议IQ_SYSTEM_MAIN dbspace不要存放用户的数据,Free List、版本空间、节点间通讯、TLV日志等系统信息存放在这个dbspace中。缺省情况下,IQ_SYSTEM_MAIN的20%空间保留用于存储这些系统信息。当为IQ_SYSTEM_MAIN增加空间时(即增加dbfiles),整个Multiplex必须关闭,并且进行节点同步,所以最好让IQ_SYSTEM_MAIN只存放系统数据。
    
     当数据库对象被存放到一个dbspace时,如果DEFAULT_DISK_STRIPING数据库选项设置为‘ON’,那么Sybase IQ会把数据自动分布到dbspace中的所有dbfiles上进行存储。用户也可以使用操作系统级的磁盘条带化技术。

     对于Sybase IQ 15.3及之后的版本,可以建立一个额外的dbspace,作为DQP(distributed query processing)所使用的用来存放并行查询中间结果的共享临时数据存储(shared temporary store)IQ_SHARED_TEMP dbpsace(有关DQP的说明见后面的内容)。
    
     从IQ 15开始一个user dbspace可以是只读或读写状态。Dbspace中的某个dbfile也可以标记为只读或读写状态。有了这个特性,数据库管理员的工作变得更高效:
   (1)只需备份一次只读数据
   (2)只读dbspace的备份和恢复可以独立于读写dbspaces
   (3)当IQ数据库运行时可以联机恢复只读数据
   (4)可以只针IQ数据库的读写dbspaces执行数据校验
    
     从IQ 15开始一个dbpace可以是online或offline。DBA可以把不可打开或不可用的dbapaces标记为offline状态,这样IQ将忽略它们,直到这些dbapces变为online状态。
   
    Sybase IQ 15的VLDB选件提供了分区和数据放置功能。通过指定某个字段作为分区键,可以把一个表按照分区键值的范围进行分区(即范围分区,IQ目前只支持范围分区),每一个键值区间内的数据属于一个分区。每一个数据分区只包括FP索引数据(即只有FP索引是分区的),其他索引并不分区。一个分区表能够执行下面的改动操作:
   (1)增加或删除分区
   (2)劈开一个分区
   (3)合并临近分区
   (4)解除分区(un-partition)
   
    在进行分区操作时能够指定数据库对象在哪个dbspace中存放,或把某个数据库对象移动到一个不同的dbspace上。这里所说的数据库对象可以是表、表分区、字段和索引。对于经常访问的数据可以存放在速度较快的存储上,而较少访问的数据可以存放在廉价的、速度较慢的存储设备上。这个策略即可以控制存储成本,又可以提供比较好的性能。下面是一个表分区的例子:
CREATE TABLE orders
  (
    o_orderkey             unsigned bigint,
    o_custkey              unsigned int ,
    o_orderstatus          char(1),
    o_totalprice           double precision,
    o_orderdate            date,
    o_orderpriority        char(15),
    o_clerk                char(15),
    o_shippriority         int,
    o_comment              varchar(79),
    PRIMARY KEY (o_orderkey)
  )
  PARTITION BY RANGE(o_orderdate)
    (
      p0 values <= ('1991-12-31'),
      p1 values <= ('1992-12-31'),
      p2 values <= ('1993-12-31'),
      p3 values <= ('1994-12-31'),
      p4 values <= ('1995-12-31'),
      p5 values <= ('1996-12-31'),
      p6 values <= ('1997-12-31'),
      p7 values <= ('1998-12-31'),
      p8 values <= (MAX)
    );

 
 
 
 

 
阅读(6224) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~