2

我目前正在开发一个针对阅读进行优化的系统。该架构是一个 MySQL 作为权威的持久存储,以及 MySQL db 和客户端之间的 memcache 层。写入不时发生,但比读取频率低得多。

数据库在相对较弱的主机上运行,​​因此我有动力尽量减少对数据库的访问。目前我心目中的协议是这样的:

[DB 和 memcache 条目都与乐观锁定的版本控制序列相关联]

  1. 在启动时,一个专用进程将所有当前条目从 db 加载到 memcache。
  2. 当发生写入时,它将:
    • 一个。从 memcache 加载条目版本(memcache 版本)。
    • 湾。在 db 事务中,尝试更新 db if (db entry version < loaded memcache version + 1),成功后 db entry version 将更新为 (memcache version + 1)。
    • C。如果 b 成功,继续使用新条目和 version = (memcache version + 1) 更新 memcache
  3. 同时,专用进程会定期从 db 中加载所有数据并将它们放入 memcache,以防某些写入不会传播到 memcache。可能会导致 2 出现一些竞争条件,但我估计这是可以接受的。

我当前的假设是,对于任何时候的条目,(memcache 版本)<=(db 版本),因此来自 2 的多个并发写入不会导致竞争条件。

有人能从这个设计中发现任​​何问题吗?谢谢!

4

0 回答 0