3

我运行一个用 python 编写的 Web 应用程序,并使用 mysql 作为我们的主要数据存储。我们在 amazon RDS 上有一个包含数千万行的大表,预计它会大 10 倍。我们运行许多查询,根据主键选择几百个随机行(例如“select * from table where id IN (ids)”,其中 id 是主键)。它有时很慢,需要 30 多秒。最终我们将不得不对表进行分片,但我们一直在考虑尝试保留缓存在 memcache 中的行的副本。在运行选择查询之前,我们会发送一个 multi_get 到内存缓存。鉴于我们的工作流程(我们运行大量更新),如果我们也抢先将行的更改写入 memcache 版本,我们只会获得显着的性能提升。

我想知道是否有人使用过这样的设置,以及是否有 ORM 可以很好地处理这个或其他有用的工具(比如可能从 mysql 二进制日志中提取更改并将它们发送到 memcache)。最危险的部分是如果有人忘记更新或至少使他们在 mysql 上更新的 memcache 中的行无效。

谢谢!

4

1 回答 1

0

这是 Django 中“透明”缓存的示例:https ://github.com/mmalone/django-caching 。但是,我应该警告您,这种方式的缓存会变得非常复杂,非常快。

如果您有数千万行并且您的访问模式通常是按行 ID,那么您可能需要考虑使用 NoSQL 解决方案。由于您已经在 AWS 上,请考虑使用DynamoDBSimpleDB。两者都提供快速且可扩展的键值访问。

于 2013-01-01T18:11:18.597 回答