2013-06-28 70 views
0

我有一個網站,用戶可以在世界各地搜索酒店房間。
我向某個服務器發出請求並檢索xml響應。
我解析每一個XML和打印酒店,圖像和房間的組合(因爲如果有人搜索一個房間,dobule房間和一個三人間我有更多的組合)。
嗯,問題是,我可以檢索許多和許多酒店,每個酒店可以有更多類型的房間,每個酒店5(5種房間我可以有7/8組合計算在php中)。

PHP中大數據的體系結構

我把每一個酒店和房間在傳遞給我的看法數組,這是我的數組構造(我有切口的很多信息的):

$hotel = array(); 

      foreach ($xml->DATA as $entry){ 
       foreach ($entry->HOTEL_DATA as $entry2){ 
        $id = (string)$entry2->attributes()->HOTEL_CODE; 
        $hotel_array2 = array(); 
        $hotel_array2['id'] = $id; 

        $hotel_array2['currency'] = (string)$entry2->attributes()->CURRENCY_CODE; 

        $i=0; 
        foreach($entry2->ROOM_DATA as $room){ 
         $room_array = array(); 
         $room_array['id'] = (string)$room->attributes()->CCHARGES_CODE; 
         $room_array['code'] = (string)$room->attributes()->ROOM_CODE; 
         $room_array['name'] = utf8_decode($room->ROOM_NAME); 
         $hotel_array2['rooms'][$i] = array($room_array); 

         $i++; 
        } 
        if (!isset($hotel_array[$hotel_array2['id']])) { 
         $hotel_array[$hotel_array2['id']] = $hotel_array2; 
        } else { 
         $hotel_array[$hotel_array2['id']]['rooms'] = array_merge($hotel_array[$hotel_array2['id']]['rooms'], $hotel_array2['rooms']); 
        } 
       } 
      } 
     } 
     return ($hotel_array); 

要打印此陣我有在裏面做一些foreach(大約3,4),並計算與用戶搜索相對應的每個房間組合。

該oriblem是,我花30秒檢索數據並打印它(很多時間),但問題是,我不得不插入許多其他提供者(服務器採取酒店,然後更多的酒店),如果一個用戶必須按價格或按位置來統籌,訂購此陣有許多水平是非常緩慢,我認爲,我必須郵寄這個數組每一次傳球,

我也鑫卡特的解決方案:
存儲的所有數據到一些表中的數據庫:酒店,房間和viuew只有一些酒店(最多20個),如果我必須訂購它,我可能會在此表中搜索另一個查詢(每個表都是搜索或具有與此搜索相對應的外部關鍵字)。

是一個很好的方式來存儲它內部的數據搜索和打印後或ios更好地有一個非常大的數組woth許多foreach並通過每一次Post中?

是否有其他解決方案?

是一個關於架構和如何存儲(如果我必須存儲數據),如何打印,如何管理大量數據的問題,我對這些數據量沒有經驗。

+0

你可以在每個調用的基礎上檢索和存儲在數據庫中,所以第一次調用將是緩慢的下一個將是從本地數據庫(與memcached和mysql相同的主體),你也可以只需緩存的XML文件+請求,以便您可以加載本地副本,而不是每次都再次執行遠程請求,如果它不存在請求它。您可以將處理移至主應用程序之外的計劃引擎,並在用戶完成搜索時提醒用戶。或者,您可以做其他比較網站的工作,並在搜索結束時顯示「請稍候」樣式的屏幕。 – Dave

+0

大多數網站使用分頁。這意味着當你從服務器請求酒店時,它只會給你前10(或左右)的XML,然後當用戶想要更多的時候加載下一個10等。 – chrislondon

+0

不是possbile我必須從XML檢索所有數據因爲不是按照價格的順序@chrislondon – WebDesigner

回答

2

因此改寫你的建議解決方案:

你有幾個數據提供商爲您提供的酒店房間列表。每次用戶執行搜索時查詢它們需要很長時間,因此您希望將其列表緩存在數據庫中。然後你查詢你的本地數據庫。

這似乎是一個好主意。確保從數據提供程序導入效果良好:刪除舊列表,顯示新列表等。計算出需要更新本地緩存的頻率。

+0

本地緩存意味着我的數據存儲在數據庫中嗎?是我找到的唯一方法,因爲當我有10個提供程序時,我可以檢索太多的數組,並且頁面太慢 – WebDesigner