PHP中大数据的体系结构

PHP中大数据的体系结构,php,arrays,architecture,Php,Arrays,Architecture,我有一个网站,用户可以浏览世界各地的酒店房间。 我向某个服务器发出请求并检索xml响应。 我解析每个xml并打印酒店、图像和房间组合(因为如果有人搜索单人房、双人房和三人房,我会有更多的组合)。 好吧,问题是我可以检索很多酒店,每个酒店可以有更多类型的房间,比如每个酒店5个房间(5种房间我可以用php计算7/8组合)。 我将每个酒店和房间放在一个数组中,并传递到我的视图,这是我的数组构造函数(我有很多信息): 要打印这个数组,我必须在数组中创建一些foreach(大约3,4),并计算与用户搜索相

我有一个网站,用户可以浏览世界各地的酒店房间。
我向某个服务器发出请求并检索xml响应。
我解析每个xml并打印酒店、图像和房间组合(因为如果有人搜索单人房、双人房和三人房,我会有更多的组合)。
好吧,问题是我可以检索很多酒店,每个酒店可以有更多类型的房间,比如每个酒店5个房间(5种房间我可以用php计算7/8组合)。

我将每个酒店和房间放在一个数组中,并传递到我的视图,这是我的数组构造函数(我有很多信息):

要打印这个数组,我必须在数组中创建一些foreach(大约3,4),并计算与用户搜索相对应的每个房间组合。

问题是,我需要30秒来检索数据并打印它(很多时间),但问题是我必须插入许多其他提供商(服务器接收酒店,然后是更多酒店),如果用户必须按价格或位置进行协调,我想订购这个多关卡的阵法是非常慢的,每次我都要路过这个阵法

我想到了一个解决办法:
将所有数据存储到某个表中的数据库中:hotel、rooms和viuew-only-some-hotel(最多20个),如果我必须订购,我会在该表中进行另一个搜索查询(每个表都是一个搜索或具有与该搜索对应的外部键)

在打印或ios操作系统之后,将数据搜索存储在其中的一个好方法是使用一个非常大的数组,其中包含许多foreach和pass,每次都会在本文中传递吗

还有其他解决办法吗


这是一个关于体系结构、如何存储(如果我必须存储数据)、如何打印、如何管理大量数据的问题。我对这些数据量没有经验

因此,请重新表述您建议的解决方案:

您有多个数据提供商为您提供酒店房间列表。每次用户进行搜索时查询它们都需要很长时间,因此您希望在数据库中缓存它们的列表。然后改为查询本地数据库


这似乎是个好主意。确保从数据提供程序导入工作正常:删除旧列表,显示新列表等。计算出您需要更新本地缓存的频率。

您可以在每次调用的基础上检索并存储在数据库中,因此第一次调用会很慢,下一次调用将来自本地数据库(与memcached和mysql的原理相同)您也可以只缓存xml文件+请求,这样就可以加载本地副本,而不是每次都在不存在的请求上执行远程请求。您可以将处理移动到主应用程序之外的计划引擎,并在用户搜索完成时提醒用户。或者你也可以像其他比较网站一样,在搜索完成时显示“请等待”样式的屏幕大多数网站使用分页。这意味着当你从服务器请求酒店时,它只会给你前10个(大约)的XML,然后当用户想要更多时,你会在下10个加载,等等。我不可能从XML中检索所有数据,因为不是按价格排序的,例如@chrislondonLocal cache意味着我的数据存储到数据库中,对吗?这是我找到的唯一方法,因为当我有10个提供者时,我可以检索太多的数组,而页面速度太慢
$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);