2010-03-26 32 views
8

是否有人一起加入SQLAlchemy和Memcached,以便在缓存在Memcached中的SQLAlchemy返回结果?目前我不知道如何自己实现,我完全失去了并寻求帮助。如何使SQLAlchemy使用Memcached?

谢谢,Boda Cydo。

回答

-4

Memcache和关系数据库是两个单独的东西,根本不能以相同的方式工作。 Memcache是​​一个简单的查找桶,对于倾倒像部分网页那样的Blob非常有用,它可以在许多请求之间共享,并且需要很长时间才能生成(因为无法合理地优化/取消数据库模式的合理优化/生产)。

将memcache用作完整的后端数据存储并不是一个好主意,但是提供转到memcache或数据库的SQL接口是没有用的:你会得到两个世界中最糟糕的,没有无论是memcache的简单/速度还是关系数据库的ACID合规性。

您的数据库服务器已经有一个缓存。如果您希望缓存更多,则可以将缓存的大小尽可能地提高,而不必使用愚蠢的硬件。使用memcache使前端更快 - 但只有当你真的无法从数据库中获得所需的性能时,才需要你在数据一致性方面做出妥协。除非真的需要,否则不要诉诸memcache。

+4

不能不同意更多。通过网络加载行,转换为内部结构,渲染页面。所有昂贵的流程都无法通过更快的数据库进行改进。大多数使用任何类型的远程系统加载数据的非平凡Web应用程序都应默认使用Memcached之类的缓存。这不仅仅是缓存结果集,这只是缓存的一个方面。 – zzzeek 2010-05-21 23:40:22

+3

甚至结果集缓存是非常相关的。您可能会有一些查询速度很慢(比如,整个大表中的某些值的标准偏差汇总),并且每天只需要几次。您可以尝试将数据库扩展到海量硬件上,只要这一个查询,或者您可以免费将其放入缓存中。 – zzzeek 2010-05-21 23:43:41

+1

@zzzeek你是真的。以“这不是一个好主意......”的语句会更好地写成:“在我有限的 - 因此是有限的 - 经验中,这不是一个好主意......” – 2011-11-09 18:26:40

9

请参阅SQLAlchemy源代码中的beaker caching example,以了解如何将高速缓存集成到SQLAlchemy应用程序中。烧杯可以使用Memcached作为缓存存储。

+0

死链接。无论如何,烧杯显然已被dogpile.cache取代:http://techspot.zzzeek.org/2012/04/19/using-beaker-for-caching-why-you-ll-want-to-switch-到dogpile.cache / – 2014-04-20 23:51:18