我目前正在开发一个针对读取优化的系统。该体系结构是MySQL作为权威的持久存储,以及MySQL数据库和客户端之间的内存缓存层。写作时有发生,但比阅读频率低得多。
db正在一个相对较弱的主机上运行,因此我有动力尽量减少对db的访问。我心目中的当前协议是这样的:
[DB和memcache条目都与乐观锁定的版本控制序列相关联]
- 在启动时,专用进程将所有当前条目从db加载到memcache。
- 当写入发生时,它将:
- 一个。从memcache(memcache版本)加载条目版本。
- 湾在db事务中,尝试更新db if(db entry version< loaded memcache version + 1),成功后,db entry version将更新为(memcache version + 1)。
- ℃。如果b成功,继续使用新条目更新memcache并且版本=(memcache version + 1)
- 同时,专用进程定期从db加载所有数据并将它们放入memcache,以防万一有些写入没有传播到memcache。可能会导致某些竞争条件为2,但我估计这是可以接受的。
醇>
我当前的假设是,对于任何时候的条目,(memcache版本)< =(db版本),因此来自2的多个并发写入不会导致竞争条件。
有没有人能从这个设计中找到任何问题?谢谢!