假设我将dataID存储在json文件中,包含1,000,000条记录。
我的zresults.json = {“dataID”:[“1”,“2”,“3”,...“1000000”]} z
我想在数组中找到ID“100000”。
$file = file_get_contents('results.json');
$data = json_decode($file,true);
if(in_array('100000', $data['dataID']))
{
echo "found";
} else {
echo "not found";
}
耗时约0.6秒。为了结果。
在这样的json数组中搜索是否有更快的方法?
请举个例子!
提前谢谢。
更新
虽然sql会快得多,但在一张表中考虑1,000,000条记录,记录的空间越大!至少,静态文件减少了服务器负载并减少了空间。
这取决于您的系统设计方式。在正确的时间和地点使用它!
答案 0 :(得分:2)
当然!
$stm = $pdo->prepare("SELECT 1 FROM data WHERE id = ?");
$stm->execute(array(100000));
if ($stm->fetchColumn())
{ echo "found"; } else { echo "not found"; }
您需要先将数组导入数据库。
答案 1 :(得分:1)
根据results.json
文件中数据的结构,您可以进行简单的字符串搜索,例如
$file = file_get_contents('results.json');
if(strpos($file, '"100000"') !== false)
{
echo 'found';
}
else
{
echo 'not found';
}
在对你的方法进行基准测试后,我得到了大约0.78秒(在我缓慢的本地系统上),但是使用这种方法,我实现了大约0.03秒。
就像我说的那样,这取决于你的数据结构,但如果它允许你使用这种方法,你会看到显着的速度优势。
答案 2 :(得分:0)
为什么不将id存储为键,然后执行:
if(isset($data['dataID']['100000'])){
// do something
}
因为检查密钥是否存在比循环遍历数组要快得多。您可以查看此链接以获取更多信息:
答案 3 :(得分:0)
基于文档的数据库如mongo DB是您应该尝试的,而不是使用普通的json文件 - 如果您绑定了json格式。
请注意,mongoDB可以将json对象保留在内存中,而普通的PHP解决方案必须一次又一次地解析文件。
我看到三个性能提升:
答案 4 :(得分:0)
也许可以尝试预测结果,然后可以使用in_array在更小的json中搜索值。
否则你可以尝试其他搜索算法,这些算法很复杂。