【问题标题】:Which one to use JSON XML or database cannot decide使用 JSON XML 还是数据库无法决定哪一个
【发布时间】:2013-01-15 17:32:05
【问题描述】:

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

【问题讨论】:

  • 在您的情况下,数据库将是首选。另外,为了让你更快(如果 ID 是唯一的).. 有die(json_encode(...));

标签: php javascript jquery database json


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 其实这个数据是本地商家列表lists。所以它不会经常改变。可能会分别从列表中添加或删除 2/3 项。这就是我所期望的业务不会每天开放和关闭。我不希望每秒获得 10000 个请求,但希望本地业务列出大约 10000 个。我认为与其将搜索请求传递给 sql server,不如将其保存为 php 字符串数组。不过貌似大家都建议用数据库!
      猜你喜欢
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多