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