我运行一个用python编写的web应用程序,并使用mysql作为我们的主数据存储区。我们在亚马逊RDS上有一张有数千万行的大桌子,并且预计它会增大10倍。我们运行了很多查询,根据主键选择几百个随机行(如“select * from table where id IN(ids)”,其中id是主键)。偶尔很慢,需要30多秒。最后,我们必须对表格进行分片,但我们一直在考虑尝试保留缓存在memcache中的行的副本。在运行select查询之前,我们会发送一个multi_get给memcache。鉴于我们的工作流程(我们运行了很多更新),如果我们抢先将更改写入到memcache版本的行中,我们只会获得显着的性能提升。MySQL/Python抢占式缓存
我想知道是否有人使用过这样的设置,如果有ORM处理这个很好或其他有用的工具(如可能从MySQL二进制日志中提取更改并将它们发送到memcache)。这最危险的部分是如果有人忘记更新或至少使在mysql上更新的memcache中的行无效。
谢谢!
您可能想对您的访问模式发表更多评论。在WHERE IN(...)'子句中使用的id是否有某种相关性(经常请求的是同一组ID)?你通常只引用最近添加的行吗?你正在使用任何类型的复制或集群? –
不幸的是,WHERE子句中的id集合中相对较少重叠。通常,至少一半的ID基本上是均匀随机的,并且最近没有添加。复制是一种选择,但我们希望在转移到该数据库之前优化单个数据库。我们使用亚马逊RDS,因此群集不是一种选择。 – user1390511