2010-02-02 70 views
1

我有一些理论上的问题:我正在设计自己的CMS /应用程序框架(就像许多PHP程序员以前做过的那样,并且总是会这样做),以便制作可用于生产的解决方案或开发稍后使用的各种模块/插件。重用MySQL结果

无论如何,我想从整个应用程序收集SQL连接,然后在一个地方运行它们:

index.php: 
<?php 
    include ('latestposts.php'); 
    include ('sidebar.php'); 
?> 

latestposts.php: 
<?php 
    function gather_data ($arg){ $sql= ""; } 
    function draw ($data) {...} 
?> 

sidebar.php: 
<?php 
    function gather_data ($arg){ $sql= ""; } 
    function draw ($data) {...} 
?> 

现在,当整个模块系统的应用尚未将要想通,它的想法已经漂浮在我脑海中的某个地方了。但是,我想,如果我能够首先加载所有gather_data函数,然后运行sql,然后运行draw函数 - 并且如果我能够重用结果!

如果,例如,$sqlSELECT * FROM POSTS LIMIT 10$sql2SELECT * FROM POSTS LIMIT 5,是可以编程PHP看到:“嗯,这是相同的SQL,我就调用它一次,并重新使用前5行”?

或者是否有可能将此行为添加到某些DRM?

但是,正如标签所说,这仍然只是一个正在进行的想法。如果它证明很容易完成,那么我会发布更多的问题如何:)

所以,基本上:是否有可能,是否有意义?如果两者都是,那么......任何想法如何?

回答

2

不要误解我的意思,这听起来像是一个合理的想法,你可能会让它运行。但我想知道这是否真的有益。它会导致系统更快吗?给你更多的控制权?让开发更容易?我只想研究一下使用良好的MVC风格编码标准,建立一个好的数据库结构,以及调整Apache(或者使用像Lighttpd这样的东西)的系统。如果您决定开源代码,那么您的代码将得到更广泛的接受,如果您需要一个开源代码,另一位开发人员可以直接进入并拿起键盘。

此外,查看MySQL中的查询缓存 - 您将看到与查询示例有关的缓存查询结果服务器端的类似(但不是一对一)好处。更好的是存储在服务器内存中,这样PHP/MySQL的开销就会降低,您不必编写代码。

所有这一切,我认为这是可能的。 =)

+0

我有一个应用程序有可能产生几个类似的请求。所有的数据库交互都通过数据库对象隔离,而对象本身(对应用程序的其余部分保持沉默)具有非常基本的缓存系统;基本上,某些非易失性函数检查以前是否使用相同的参数调用它们,如果是,则返回存储在数组中的结果。它的执行时间少于几百分之一秒,但如果缓存命中而不是数据库,它可以节省1-2个数量级的时间。食物的思想。 – Dereleased 2010-02-02 21:25:15

+0

如果你在某些情况下看到了这种类型的回报,那么它可能是适当的 - 已经有不止几次,我已经存储了mysql查询集,它们在服务器上的gzipped平面文件中保持静态以便检索,而不是通过MySQL(像不翻译的语言翻译之类的东西)。 我的主要担心是多用户交互,导致您的数据在使用停滞缓存时变得无关紧要。但是,在正确的情况下,尽可能做你正在谈论的事情 - 总的来说,你会获得足够的资金来应对麻烦吗? – Shane 2010-02-03 02:28:02

1

一般来说,这样的缓存系统可以节省大量的时间,但是会以内存和复杂性为代价。要保留的结果越多,需要的内存就越多;并不能保证你的结果会再次被使用,特别是更大的结果集。

其次,有些查询不应该被缓存,或者即使它们在缓存中也应该再次运行。大多数情况下,只有SELECT和SHOW查询才能被有效缓存,但当您修改底层数据时,您需要担心使其失效。即使在同一个网页浏览中,您可能会发现自己偶尔会在自己的缓存系统中工作。

三,这种问题已经解决好几次了。首先,考虑打开MySQL查询缓存。大多数情况下,它会加快速度,而不需要对代码进行任何更改。然而,对于无效输入有点侵略性,所以你可以在更高的水平上获得一些性能。

如果您需要另一个级别,请考虑memcached。您必须手动存储和使条目无效,但它可以跨页面查看存储结果(您真的会发现性能优势),并且会在内存不足之前让未使用的条目过期。