我运行一个用python编写的web应用程序,使用mysql作为我们的主要数据存储。我们在amazon RDS上有一个拥有数千万行的大表,并且希望它能大10倍。我们运行很多查询,根据主键选择几百个随机行(比如“select*from table where id IN(ids)”,其中id是主键)。有时候速度很慢,需要30多秒。最终我们将不得不切分表,但我们一直在考虑将行的副本保存在memcache中。在运行select查询之前,我们会向memcache发送一个multi-get。考虑到我们的工作流程(我们运行了很多更新),如果我们也提前将对行的更改写入memcache版本,那么我们只能获得显著的性能提升。
我想知道是否有人使用过这样的设置,以及是否有ORMs能够很好地处理这个问题或其他有用的工具(比如从mysql二进制日志中提取更改并将其发送到memcache)。最危险的部分是如果有人忘记更新或者至少使他们在mysql上更新的memcache中的一行失效。
谢谢!
最佳答案
以下是Django中“透明”缓存的示例:https://github.com/mmalone/django-caching。
但是,我应该警告您,这种缓存方式会变得非常复杂,非常迅速。
如果您有数以千万计的行,并且您的访问模式通常是按行id进行的,那么您可能需要考虑使用NoSQL解决方案。由于您已经在AWS上,请考虑使用DynamoDB或SimpleDB。两者都提供快速且可扩展的密钥值访问。
关于python - MySQL/Python抢先缓存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13484360/