浅谈erp系统数据库设计

  最近在做一个erp系统的项目,从进公司开始接手这个项目已经有半年多了,这套系统运用的是新技术,老系统的需求,数据是原来已经建好的。

  背景:100多家分店,每个分店有着相同的数据表,按照城市来建立数据库,都是sqlserver数据库。需求,我们这里有统计报表类需求,也有切换到各个城市源查询数据。

   报表类需求,是需要获取所有的分店数据,用多线程去切换数据源查询,太麻烦。迁移到drds数据库中间件,不能直接用,因为drds只支持mysql数据库。还有一个问题,老数据迁移成功了,但是,还有一个数据同步的问题。事情还是回归到原始状态。

  最后考虑使用当当网开源的shardingjdbc数据库中间件。只需要配置所有的数据源,然后需要一个sdid,全局唯一id,还要一个scity数据库路由字段,这里不用分表,分库就可以,每张表都要加上这两个字段,这里需要触发器统一配置,添加一个新记录会加上sdid和scity,触发器中写好了算法,保证sdid唯一。因为jpa entity中只能指定一个主键,如果将sdid作为主键,那么原来的业务主键就没有了,导致aio中app运行不了,数据持久层放弃使用jpa,最后选择了mybatis作为持久层框架,在使用过程中,shardingjdbc对于sql支持仅仅部分,or,虚表,分页不支持,由于是老系统二次开发,这给我们造成了极大的苦难,很多情况只能多次查询,在业务层做处理,特别苦恼的地方是,不支持sqlserver的分页,只支持很简单的,跨库操作的关联,分页就不支持。后来我们只是在springbatch中使用shardingjdbc,对查询性能无要求的业务中使用。

当然最好的方法还是要迁移到阿里云drds中,这里就需要一个数据同步问题,消息队列,或者是sqlserver日志解决毫秒级数据更新的方式正在尝试中,如果解决了及时同步,我们彻底打通数据源整合到阿里云drds当中,对于后期的维护和扩展相对容易很多。

你可能感兴趣的:(java)