免责声明: 这是一个侧式项目,不是制作故事。
慢泻问题是真实的,但数据库是合成数据,我生成这些数据是为了让它在需求时出现.
我和PgCache没有关系 这里的一切都是在可以复制和运行的回放中.
我测试了0.6.2版。
关于我的项目的几个盘子查询 一年来都很好,但后来没有: 按层级计算用户,按国家分类的收入,每类最畅销的产品。
没有什么异国情调,只是总和和加入 已经变得大的桌子。
通常的修补方法不和我一样 现成的视图意味着选择一个刷新间隔,并在间隔间提供略微停滞的数字。
Redis在Postgres前指写并维护知道哪些缓存条目可以丢弃在每个写上的规则.
一个读取的复制件只是运行 同样的慢查询 在另一个机器。
PgCache提供不同的交易.
这个代理公司负责讨论Postgres的电线协议,所以你的应用将它连接起来,就像数据库一样.
它的缓存读取。
而不是在计时器上过期的条目,它跟随了Postgres的复制流,当其后行改变时刷新了被缓存的结果.
该流是相同的feed Postgres用于将数据复制到备用服务器,每个插入,更新和删除的运行日志. "不计时,不人工作废"部分是有趣的主张.
这是如何维持。
一个大到可以慢跑的数据库 首先 我需要一个"慢"是真的而不是四舍五入错误的数据库 我为一个小型电子商务计划写了种子脚本, 并填入了大约1600万行: 表行注:100万个10个国家; 50%免费/33%赞成/17%的企业 2,000个 5,000,000个类别 5,000,000个类别 4个状况,随机总数, 分布在两年内 1,000,000个左右,每顺序2个。
这是故意的。
我想把PgCache和Postgres比较一下,Postgres已经正确调了音,而不是一个留下了慢音,以便任何缓存在旁边看起来都很好.
得到它运行 The Repo有一个多克编译文件,有两个容器:端口的Postgres在5433上;和PgCache在5432上.
装置比我想象的要小 在 Postgres 一侧,您打开逻辑复制( ) 并给出登录角色复制权限 。
这就是全部清单。
我从手写规则开始, 和Init脚本的一行, 然后删除了两个, 一旦我检查了PgCache在启动时自己做什么: 它创建了自己的出版和复制插槽, 它将出版范围扩大到仅仅四个表格, 它最后的缓存。
我事后通过询问确认了这一点。
它打开的用于复制的连接与普通密码验证.
一个粗糙的边缘是记忆。
PgCache保持它的缓存 并且不会开始 除非这比它内部的两倍多 错误消息会告诉你它想要的号码,所以是单行变化,但它会阻止第一个靴子冷.
之后,投出准确:将你的应用拨号从5433改为5432并让其他所有东西都离开.
速度测试以10相通币进行4个查询,每个查询150次,直接与发源地并经由PgCache.
它首先让双方暖和, 因此比较是温暖缓存 相对于温暖缓存 ,而不是一个寒冷的数据库 对一个原始代理。
在代理运行后,它读取了PgCache自己的命中计数器,并打印出150个查询中有多少是从缓存中实际送达的,因此一个从数据库中悄悄来得快的号码是无法隐藏的.
所有150个都是缓存点击 每一次运行。
通过 PgCache 点查查询来源 id 0.3 ms 0.3 ms 计用户分级(1M行) 140 ms 0.5 ms 按国家划分的收入(5M-row join) 1.4 s 0.5 ms 每类顶级产品(10M-row join) 2.9 s 0.6 ms 重点就是洗个澡,我为了这个原因把它放进去了.
原产地已经是次毫升了, 所以通过另一个过程发送它只是增加了一跳.
这是诚实的回答 "这样做加快了一切": 不,不是