某个信息系统,之前数据存放在个县局,现在要做到市局数据集中,并且不能修改前端的web应用程序老师介绍了一种技术,大致如下:
由于之前各县的系统都是统一的,所以不存在数据的异构问题。把所有数据存放在市局之后,各县不再单独设服务器。之前在各县局作为一张表的数据,统一为一张表存放于市局。但此时数据量就会很大,各个县局查询时明显要遍历到全市的数据,效率很低,而且对每个县局还缺少只能查询自己数据的约束。
现在就想在市局的数据库中,将一张大表,按照各个县局的ID存放在之前说的虚拟数据库(我不知道这里叫不叫虚拟数据库)中,即物理上是一张表,逻辑上是由各个县局数据构成的小表。各个县局进行查询时,SQL语句会根据县局ID(因为是按照县局ID存放序虚拟数据库的)自动在查询的SQL语句中加入where 县局ID=×××的条件。这样可以解决每个县局只能查询自己数据的约束。,但不能解决效率问题。
之后就又考虑用分区表技术。因为采用分区技术之后,sql查询语句中的where条件只有在按照分区键查找时,才能是分区的效率体现出来。而之前说的按照县局ID建立逻辑上虚拟的表正好可以自动增加SQL查询语句的where条件,分区键和虚拟库的键都是县局id,这样就可以不修改web应用,又可以达到权限、效率都能满足需求的要求。请问各位这个技术是否可行?我文中提出的将一张大表,按照县局ID在逻辑上分成小表,并且查询时可以按照县局ID自动增加where条件的这个方法是什么技术?谢谢各位!

解决方案 »

  1.   

    如果使用Oracle数据库,直接按县ID进行分区已经很好了。查询时你自动加上这个县ID作为条件,可以充分利用分区表的优点。
      

  2.   

    但是之前数据存放在县局时,因为按照县局查询,可能WEB应用程序中的sql语句就没有where 县局ID=××
    的条件,现在市局集中之后,需要对县局进行选择,又不希望修改应用程序。分区表好像不能自动加查询条件吧?
      

  3.   

    自动添加查询?你是想数据库为你自动添加吗?那是不可能的。除非你每个县一个表空间,各自独立的用户,那就无所谓什么虚拟数据库了,本身就是各自独立的。应用程序不可能不修改的。只是Web页面不动而已。但是可以改用一套你自己设计的新的统一的接口。
    然后在你的实现中为它们添加分区的条件。