缓存SQL查询数据的技巧

时间:2008-11-24 00:59:21

标签: mysql caching b-tree

阅读了一些关于这个主题的内容:

Caching MySQL queries

http://www.danga.com/memcached/

我的SQL缓存问题: http://www.petefreitag.com/item/390.cfm

http://framework.zend.com/manual/en/zend.cache.html#zend.cache.introduction

我有一组非常独特(缩小)的查询,我想我可以在当前的FastCGI C API可执行文件(非PHP)中轻松实现一些缓存。

Zend将其框架描述为: 缓存记录通过灵活的ID和标签系统通过后端适配器(File,Sqlite,Memcache ......)存储。

这是如何实现的?

由于同一个查询可以返回不同的结果,如果Table已被更改,我不仅要监视查询,还要监视UPDATE,INSERT和DELETE(现在是MySQL)因为这只发生在我的一个进程中,我可以轻松添加一个语句,在更改表时删除缓存。

客户端只允许SELECT,在这种情况下,我可以散列查询并将它们存储在散列表或btree索引中,同时指向包含结果的文件。

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

噢,伙计,这是个好问题。 作为一名.NET开发人员,我有幸在过去的7年中不必担心这一点。我不必担心,因为.NET实现了一个非常强大的缓存机制来完成你想做的事情。

在中间层或表示层层无法做到这一点?

答案 1 :(得分:1)

.NET对于快速开发来说当然很方便,但它会产生一些不良后果,因为MS会成为聋人的同伴!

我也更愿意开发自己的解决方案,因为我可以根据自己的需要量身定制。我不需要太多复杂,只需要一些机制将入站查询绑定到服务器端的结果集。演示文稿不在客户端,而是存在单独的数据库。请求实际上只是更新客户端数据库,因此在回答您的问题时,客户端缓存已经全部实现。

答案 2 :(得分:0)

正如我想到的那样,我意识到尽管缓存到磁盘的结果更快,但磁盘上的负载会显着增加。在我的情况下,DB不是那么慢的查询,结果集所需的内存是最大的问题,每个结果集最多3MB。这将很快耗尽服务器内存如果我在xfer继续进行的时候将其全部保留下来