我知道我的问题在互联网上已经有很多回答,但似乎我找不到一个好的答案,所以我会尝试解释我的问题并希望得到最佳答案。
我想要做的事情是读取一个可能比这个更复杂的大型JSON文件,“嵌套对象和大型数组”,以下是一个简单的示例:
{
"data": {
"time": [
1,
2,
3,
4,
5,
...
],
"values": [
1,
2,
3,
4,
6,
...
]
}
}
这个文件可能有200M或更多的数据,我正在使用 file_get_contents()
和 json_decode()
从文件中读取数据,
然后将结果放入变量中,并循环遍历时间并使用当前索引获取时间值以从值数组中获取相应的值,然后将时间和值保存在数据库中,但这样会占用大量的CPU和内存,是否有更好的方法来处理这个问题?
有没有更好的函数可以使用,更好的JSON结构可以使用,或者使用比JSON更好的数据格式来实现这一点。
我的代码:
$data = json_decode(file_get_contents(storage_path("test/ts/ts_big_data.json")), true);
foreach(data["time"] as $timeIndex => timeValue) {
saveInDataBase(timeValue, data["values"][timeIndex])
}
感谢任何帮助的提前
更新于06/29/2020:
我有另一个更复杂的JSON结构示例
{
"data": {
"set_1": {
"sub_set_1": {
"info_1": {
"details_1": {
"data_1": [1,2,3,4,5,...],
"data_2": [1,2,3,4,5,...],
"data_3": [1,2,3,4,5,...],
"data_4": [1,2,3,4,5,...],
"data_5": 10254552
},
"details_2": [
[1,2,3,4,5,...],
[1,2,3,4,5,...],
[1,2,3,4,5,...],
]
},
"info_2": {
"details_1": {
"data_1": {
"arr_1": [1,2,3,4,5,...],
"arr_2": [1,2,3,4,5,...]
},
"data_2": {
"arr_1": [1,2,3,4,5,...],
"arr_2": [1,2,3,4,5,...]
},
"data_5": {
"text": "some text"
}
},
"details_2": [1,2,3,4,5,...]
}
}, ...
}, ...
}
}
该 JSON 文件的文件大小可能约为 500MB 或更大,其内部的数组可能包含约 100MB 或更多的数据。
我的问题是如何以最有效的方式获得任何数据片段并在节点之间导航,而不会占用过多的 RAM 和 CPU。我不能逐行读取文件,因为我需要在必要时获取任何数据片段。
Python 是否比 PHP 更适合处理这种大型数据且效率更高?
如果可能,请提供详细答案,我认为这将对每个想要使用 PHP 处理大型数据的人都有很大的帮助。
saveInDataBase()
没有每次重新连接到数据库(登录是非常耗时的操作)。还要考虑生成修改500或1000行的INSERT/UPDATE查询,然后运行这些查询,而不是运行只修改1行的INSERTS/UPDATES。(每次运行都是一个新的TCP请求到数据库,也很慢) - Nicholas Summers