2011-03-03 77 views
0

应用程序必须使用用户给出的一些标准来显示从按字母顺序排列的列表中检索的记录。该列表是从两个或多个表中选择的。用户可以询问下一页或上一页,或者提供其编号的特定页面。一个网页最多可以包含20条记录。见我的演示在http://193.226.19.29:1200特定搜索问题的网站:是否使用C语言?

经典的网络工具(例如,PHP和MySQL):瓶颈

如果用户要求5000页,数据库服务器必须选择第一个10万分的记录。 LIMIT子句将在达到此限制后停止搜索过程,并且php脚本仅获取最后20条记录。如果我们要求列表的最后几页,搜索过程可能需要几分钟的时间。如何加快搜索过程从列表的中间/末尾检索20条记录?

我的解决方案采用C语言

我的web服务器在启动时读取主存储器中的整个列表,然后它已准备好接受连接。它能够从一个给定的位置开始搜索过程,然后检索所需的记录。网络服务器在Celeron 768 Mhz,256 Mb内存,Linux Fedora操作系统上运行。

我看了很多Web程序员的意见,关于使用C语言编写网络应用程序的

Why do you not use C for your web apps?

How popular is C++ for making websites/web applications?

起初我实现了另一个搜索标准(名称以...)和搜索过程非常快 - 大约0.015秒。现在,如果您填写的字段名称包含...,搜索过程有时会很慢,因为在显示第一页时,网络服务器会检查整个列表。

使用C很容易解决搜索问题 - 至少从我的角度来看。现在我必须找到一个优雅的解决方案来解决更新问题 - 即易于编写和可接受的运行时间。

有没有人知道一些基于经典网络工具的解决方案来解决这个问题,使得响应时间可以接受任何查询?

回答

0

您可能想要调查一些开源搜索引擎。 For instance Lucene/Solr。不过,我不完全确定他们是否适合你的问题。

您确实需要找到一种方法来使索引保持最新,但性能非常好,并且存在许多集成可能性。您还可以访问更多的搜索条件,这可能会带来额外的好处。

0

这听起来像一个体面的数据库会在睡眠中做的事情,也许你可以配置不同的MySQL或尝试不同的数据库。

4

通过它的声音,你在数据库访问查询中缺少一些基本的东西,这确实应该是微不足道的。如果您想访问记录的第5000页,则不必选择100000条记录。我猜你正在检索记录,然后用php处理它们来寻找匹配。而做到这一点,为什么不能让MySQL做繁重的东西,如:

SELECT * FROM societies WHERE society_name LIKE '%search_name%' 

只需更换societies用你的数据库名称,society_name包含在输入的搜索项社会名字和search_name领域搜索框。