0

我正在开发一个发送 id 的应用程序,作为回报,php 向客户端发送一个 json 节点。我的问题是我应该将数据保存为静态 php 数组,如底部代码所示,还是将数据保存到外部 xml/json 文件中,还是应该使用数据库?数组中可能有多达 10,000 个项目。请建议。

<?php
    // Fill up array with names
    $a = array(
                array("id"=>1001, "name"=>"One", "address"=>"", "city"=>"", "state"=>""),
            array("id"=>1002, "name"=>"Two", "address"=>"", "city"=>"", "state"=>""),
            array("id"=>1003, "name"=>"Three", "address"=>"", "city"=>"", "state"=>""),
            array("id"=>1004, "name"=>"Four", "address"=>"", "city"=>"", "state"=>""),
            array("id"=>1005, "name"=>"Five", "address"=>"", "city"=>"", "state"=>""),
            array("id"=>1006, "name"=>"Six", "address"=>"", "city"=>"", "state"=>"")
            );

    //get the q parameter from URL
    $q=$_GET["q"];
    //lookup all hints from array if length of q>0
    if (strlen($q) > 0)
    {
        $hint="";
        $att = "id";
        for($i=0; $i<count($a); $i++)
        {    
           if($q==$a[$i][$att])
           {
              echo json_encode($a[$i]);
           }       
        }
    }
    echo "";
    ?>
4

3 回答 3

0

如果您要拥有那么多记录,则绝对应该使用数据库。我建议查看 SQLite,它是一个非常简单且紧凑的数据库。不确定您是否指的是智能手机应用程序,但如果您这样做了,那么 SQLite 可以在 iOS 和 Android 上使用。它与从智能手机到网络服务器再到台式机的所有东西兼容 - 这是一个很好的数据库。也有很多很好的文档。它由 Mozilla、Adobe 和 Oracle 赞助。http://www.sqlite.org/

于 2013-01-15T17:51:17.550 回答
0

我绝对推荐使用数据库。也许一开始您认为通过文件访问 JSON 元素更容易,但如果您有数百条记录,则可能难以处理,尤其是在搜索数据时。如果您觉得使用 JSON 很舒服,也许您可​​以尝试使用 MongoDB来处理类似于 JSON-DB 环境的东西。

于 2013-01-15T17:40:27.127 回答
0

数据库可能是性能可接受的最简单的解决方案。

如果您希望每秒处理超过 10000 个请求,传统数据库可能太慢,将数据保存在内存中的过程会更快。PHP 在这方面出了名的糟糕,事实上它对大多数事情都不好,但运行一个普通的网站。无状态特性可以使调试更容易,但如果您的应用程序主要处理本质上是有状态的事物,那么处理起来就很痛苦。问问自己 PHP 是否适合这项工作,例如 Node.js 将使将列表存储在内存中成为一种直观且简单的解决方案。

通常,无论您选择哪种存储解决方案,将数据存储为您打算提供的 JSON 字符串格式似乎是最自然的,除非它所基于的数据经常更改。

您当前的代码有两个主要缺陷:

  • 当 PHP 进程启动时,它会为每个请求加载整个列表,因为列表是在代码中的。这在大多数其他语言中都不是什么大问题,因为您通常不会经常启动新进程。(无论如何,您通常都不应该在代码中放入大量数据,但那是因为它往往会变得难以维护。)
  • 您遍历整个列表以查找请求的项目,使用id作为键,您几乎可以立即获取正确的记录,如下所示:

.

$a = array(
    "1001"=>array("id"=>1001, "name"=>"One", "address"=>"", "city"=>"", "state"=>"")
)

//Get the requested record
$a[$q];
于 2013-01-15T19:30:38.057 回答