数据分片增强“数据可获得性”:是指可以在某些数据分片发生故障的时候,数据库仍然能接受应用程序的查询请求。这种能力是有INFORMIX动态服务器的DATASKIP特征提供的。
数据分片“增强数据加载的性能”:尤其适用于”周期性地加载几个G的数据,从而需要快速加载技术”的大型应用程序。将数据 分片到不同的磁盘上,可以使数据自动地进行并行加载,这是通过使用多个I/O流向数据分片所驻留的磁盘上写数据而达到的。轮转法分片方案应该最能保证快速数据加载,因为复杂表达式的计算会加重CPU的负荷,如果采取较简单的表达式并将每个数据分片放在单独的盘上,用“基于表达式”的分片方案同样可以保证快速加载数据。
以下是“确定合理的分片策略”所必须的步骤:
硬件/软件特征
要搞清楚硬件平台,如CPU的速度,数目,磁盘数目,大小,磁盘控制器的数目,以及与每个控制器相连接的磁盘数目,等等。这些信息对于确认表分片的数目以及怎样存放数据分片以减少I/O竞争,都是十分有用的。除了可用的磁盘外,对于每个表的数据分片的数目都有一定的上限,这些限制与分片的目标有关,如果分片的主要目的是增强内部查询的并行程度,那么系统CPU的数目和数据总线的带宽将限制一个表所能得到的并行线索的最大数目。另一个方面,如果分片的主要目标是增强外部查询的并行程度,那么分片的数目可大于CPU的数目,从而保证数据分布在许多磁盘上,在OLTP条件下可以允许用户并发地访问不同的磁盘,然而,当数据分片的容量变小的时候,应用程序会寻找多个数据分片,同时对寻找的结果进行合并。这些都会降低查询的效率。
对于具有高速CPU和低速盘的系统,每个表的分片数目可以超过物理CPU的实际个数。
所选的硬件平台 的操作系统类型和编译器对选择“分片”方案也是一个重要的因素。有的操作系统擅长处理MOD操作以及数据类型转换。
了解查询的特征
要了解一个应用程序到底是OLTP还是DSS类型,还要了解SELECT语句查询用的频繁还是update/delete操作频繁。如果查询多用SELECT语句,还要确定带有 “group by","order by"等复杂子句查询的执行频度。对于这些情况的了解有助于平衡I/O,消除瓶颈。检查每个SELECT 查询的选择性以及返回数据的比例。如果一个查询的选择性(selectivity)很大,就需要为查询创建索引。检查有无JOIN操作,并确认JOIN操作的主码是什么。如果在DSS查询中总对某一特定的表进行JOIN操作,那么这个表应该被分片到不同的磁盘上以避免I/O瓶颈。检查每个查询的查询条件。最后将所涉及的表中的字段画一个矩阵。接着将某一查询中用做查询条件的字段填上“+”字符。有了这个矩阵,我们可确认在所有的查询中,哪个查询条件最常用。这一信息与每一查询的执行频度一起,有助于确认对哪个字段做“基于表达式的分片”收益最大。检查数据是怎样被访问的,即数据是通过“顺序读取”还是通过“INDEX SCAN"被访问。为每一个查询配备“SET EXPLAIN" 子句,加上表的模式信息,可以达到以上目标。
数据分布及特征
确认表中用户查询条件的字段的取值范围。确认表中每一取值范围内符合记录的个数。在许多DSS类应用程序中,结果是从几个GB的数据或几个月,甚至一年的数据中得出来的。在这种条件下,很容易确认某一州,某个城市的记录数,或者是整个月的数据供以后使用。如果大多数查询将某个州和某月作为筛选条件,那么这些字段是参与”基于表达式”的分片方式的最佳选择。此外,还应了解表中数据被修改的速率,诸如增、删、改等。 (:卢兆林)
最新相关文章
发表评论