典型的 replication & consistency 问题。
首先推荐的办法是no replication( then no consistency problem)。就是各地的数据分别保存在各地的服务器,不做数据的复制(备份是另一会事)。 这样所有节点需要增加一个查询代理层,用来把查询请求分解,转发到正确的节点,并收集查询结果。 这样的好处是,由于没有副本,也就不存在一致性问题。
如果为了避免实现查询代理层,或者为了提高系统的性能,非要采用replication,也就是各地都维护一个全省数据的副本,那么要做好准备,因为解决好副本间的一致性问题是非常艰巨的任务。
数据同步涉及很多选择:
1 由谁来发起同步操作?(首先发生更新的节点?总部?所有其他节点?)
2 何时进行同步操作?(每当数据更新时? 周期性进行同步?节点收到查询请求时?)
3 如何进行同步? (推?拉? 广播?)
4 更新时传什么数据?(把整个数据库内容传过去全部覆盖?只传送数据变更指令?)确定如何选择要根据系统的具体情况,比如是否存在一个主副本? 更新操作一般发生在哪里?(我猜楼主的系统里是在各地的节点),更新和查询操作的频率多大?两种间的比值多大? 系统要求何种一致性?最后一个问题是很关键的。 不同的一致性要求差别是很大的。
比如银行转帐系统,某地进行了数据更新(写操作),那么要求其他所有副本上的读操作,必须发生在数据同步完成之后。
对于分布的web 服务器,要求不会这么严格。 总部的web内容更新后,其他地方的镜像服务器可能还是老的内容,它可以用老的内容继续提供服务,一段时间后,才进行同步。 楼主要根据系统需求,定义出系统可以容忍的一致性要求。