2

阅读了有关此主题的一些内容:

缓存 MySQL 查询

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 索引中。

有没有更好的办法?

4

3 回答 3

1

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

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

于 2008-11-24T01:28:19.237 回答
1

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

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

于 2008-11-24T11:29:50.847 回答
0

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

于 2008-11-24T22:07:54.023 回答