PHP中的大数据体系结构


Architecture of large data in PHP

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

我把每个酒店和房间都放在一个数组中,这是我的数组构造函数(我有很多信息):

$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),并计算与用户搜索相对应的每个房间组合

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

我想出了一个解决方案:
将所有数据存储到某个表中的数据库中:酒店、房间和宿舍只有某个酒店(最多20个),如果我必须订购它,我会在该表中进行另一个搜索(每个表都是一个搜索或有一个与该搜索对应的外部键)。

在里面存储数据搜索的好方法是什么?在打印或ios之后,最好有一个非常大的数组,有很多foreach,每次在Post this中通过?

还有其他解决方案吗?

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

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

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

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