无法决定使用JSON XML还是数据库


Which one to use JSON XML or database cannot decide

我正在开发一个应用程序,它发送一个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 "";
    ?>

如果您将有那么多记录,您绝对应该使用数据库。我建议你看看SQLite,它是一个非常简单和紧凑的数据库。不确定你是否指的是智能手机应用程序,但如果你想,那么SQLite可以在iOS和Android上使用。从智能手机到web服务器再到台式机,它都可以兼容——这是一个值得了解的好数据库。也有很多很好的文档。它由Mozilla、Adobe和Oracle赞助。http://www.sqlite.org/

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

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

如果您希望每秒处理超过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];