-
background:
系统A启动的时候加载数据到内存,并解析到hashmap里;
系统B分析日志,定期更新数据库中的数据,并标记为最新的数据版本; -
需求1
系统A需要定期根据数据库中的数据,更新内存中的数据:
记录当前数据的版本和更新时间,然后定期从数据库中取出新增的数据并解析到hashmap里。 -
需求2
系统A的所有数据在任何时间都是同一个版本的,不能多个版本的数据混合在一起。并且在更新内存数据的时候,系统A也要处于可用状态,不能停机更新:
把正在使用的版本设为”服务版本“,当要更新时,不在服务版本上操作,而是新建一个对象从数据库中读取所有数据并解析到hashmap里。最后再将服务版本切到新的对象。 -
针对需求2的问题
在每次读取数据并解析的过程中,都需要从头到尾执行所有耗时操作。为了提高效率,引入了原型模式。 -
针对需求2的问题的解决方案
先拷贝服务版本的数据到新的版本里,然后从数据库中取出新增/修改的数据,更新到新版本里。 -
疑问
”针对需求2的问题的解决方案“和”需求1“的区别是什么?
多了一个对象的拷贝?
1,深拷贝
2,浅拷贝