2011-03-03 73 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領域搜索框。