日期:2014-05-17  浏览次数:20642 次

紧急求助:分区表能通过分区视图实现分布式存储吗?
我们的结构是两台服务器,一台存放最近三个月数据,另一台存放归档的历史数据,问题是需要对外提供全部数据的实时访问,我知道分区视图是有这个能力的,但分区视图要管理太多的独立表,维护成本很大,是否可以在历史数据库中建立分区表,然后两台服务器用分区视图实现分布式?

------解决方案--------------------
引用:
我们的结构是两台服务器,一台存放最近三个月数据,另一台存放归档的历史数据,问题是需要对外提供全部数据的实时访问,我知道分区视图是有这个能力的,但分区视图要管理太多的独立表,维护成本很大,是否可以在历史数据库中建立分区表,然后两台服务器用分区视图实现分布式?

就像你说的,创建分区视图需要维护很多表。而且本身你的数据库已经分成了两个库的两个表,所以直接创建视图UNION ALL就可以了。当然你的历史信息表可以做Partition. 


------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

我们的结构是两台服务器,一台存放最近三个月数据,另一台存放归档的历史数据,问题是需要对外提供全部数据的实时访问,我知道分区视图是有这个能力的,但分区视图要管理太多的独立表,维护成本很大,是否可以在历史数据库中建立分区表,然后两台服务器用分区视图实现分布式?


lz这个是否可以理解为走了一个弯儿,最后还是要合并。如果是这样的话,lz可以考虑牺牲一部分性能。直接用视图即可。

有时候有些需求,确实不能用效率来衡量。



引用:
Quote: 引用:

我们的结构是两台服务器,一台存放最近三个月数据,另一台存放归档的历史数据,问题是需要对外提供全部数据的实时访问,我知道分区视图是有这个能力的,但分区视图要管理太多的独立表,维护成本很大,是否可以在历史数据库中建立分区表,然后两台服务器用分区视图实现分布式?

就像你说的,创建分区视图需要维护很多表。而且本身你的数据库已经分成了两个库的两个表,所以直接创建视图UNION ALL就可以了。当然你的历史信息表可以做Partition. 


我最初的想法就是直接用分区视图实现(好像还有个专有名词叫联合数据库服务器),但由于是对外提供查询功能,一个问题是加快查询要新建索引,对那么多表新建同样的索引,对入门级的DBA而言恐怕不是件易事,另一个问题是在分布式环境下多表联合查询是否可能对系统性能产生严重影响?


分布式多表联合查询,肯定会对性能有影响,至于严重与否,涉及的条件较多。网络,io,索引优化,磁盘等等。

另外,加快查询不一定要新建索引,利用好现有的索引,或者读写分离也是可以考虑的方法(结合需求)

总之,在性能和数据量之间寻找平衡点是永远没有尽头的,够用就好。
------解决方案--------------------
我觉得你可以在查询之前做判断,如果确定区间是近三个月的那么就直接查询当前数据库,如果是三个月之前的查询历史的,如果落到两个区间查询视图数据。