有两个表:
filetable
- filename
- fileid
- dirid
directory
- dirname
- dirid
以下是系统架构。 M1,M2,M3是运行PHP代码的机器。 MYSQL是单个MySql数据库。
M1 M2 M3
\ | /
\ | /
------------ MYSQL -------------
M1,M2和M3上存在分布式缓存。 缓存的关键值为
dirid -> list_of_fileids
对于每个读取请求,在进入数据库之前,每个PHP程序都会检查分布式缓存中是否存在密钥的值。
对于写入操作,在机器(Mn)上运行的程序运行以下步骤:
将文件C添加到目录Z
使缓存中的Z无效
将文件C插入文件表
阅读Z。
使用Z。
可以对同一个目录同时运行许多文件插入操作。
问题:
答案 0 :(得分:0)
分布式缓存的行为与任何其他分布式系统一样,它们都有类似的约束。
写入一个节点的数据需要一段时间才能在其他节点之间进行复制。当然节点越多,到处都需要的时间越长。
如果分布式节点位于同一个虚拟网络上,并且可能位于同一个数据中心,那么到达所有节点的时间就不会那么长。
许多分布式系统围绕强一致性数据(CAP [http://en.wikipedia.org/wiki/CAP_theorem]中的C)进行折衷,因此它们明确表示不同节点上的数据不同。
在我看来,修复它的方法是:
什么都不做,数据意味着在很短的时间内(可能是10毫秒?)不同步。
处理用户界面中的差异。例如,YouTube会立即显示在UI中写入的数据(Javascript),并且写入请求已被发送。它没有发送写请求和阻止读取以向用户显示更改。
希望有所帮助。