【问题标题】:Techniques for Caching SQL Query Data缓存 SQL 查询数据的技术
【发布时间】:2008-11-24 00:59:21
【问题描述】:

读过一些关于这个主题的文章:

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 和标签系统通过后端适配器(文件、Sqlite、Memcache...)进行存储。

这是如何实现的?

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

客户端只允许 SELECT,在这种情况下,我可以对查询进行哈希处理并将它们与指向包含结果的文件的指针一起存储在哈希表或 btree 索引中。

有没有更好的办法?

【问题讨论】:

    标签: mysql caching b-tree


    【解决方案1】:

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

    在中间层或表示层没有办法做到这一点?

    【讨论】:

      【解决方案2】:

      .NET 对于快速开发当然很方便,但它会带来一些不良后果,因为 MS 会成为聋哑人!

      我也更喜欢开发自己的解决方案,因为我可以根据自己的需要定制它们。我不需要太多复杂性,只需要一些机制来将入站查询与服务器端的结果集联系起来。演示文稿在存在单独数据库的客户端进行。请求实际上只是为了更新客户端数据库,因此在回答您的问题时,客户端缓存已经实现。

      【讨论】:

        【解决方案3】:

        当我想到这一点时,我意识到虽然缓存结果到磁盘更快,但磁盘上的负载会显着增加。在我的情况下,数据库的查询速度并没有那么慢,最大的问题是结果集所需的内存,每个结果集最多 3MB。如果我在 xfer 进行时将其全部保存在内存中,这将很快耗尽服务器内存

        【讨论】: