(预)处理存储在 json 中的大型数据集的最有效方法是啥?
Posted
技术标签:
【中文标题】(预)处理存储在 json 中的大型数据集的最有效方法是啥?【英文标题】:What is the most efficient way to (pre)process large data sets stored in json?(预)处理存储在 json 中的大型数据集的最有效方法是什么? 【发布时间】:2020-09-27 22:29:03 【问题描述】:我有一个包含 28k 对象的 json,用 360k 行代码编写。我有一个程序可以解码 json,然后使用解码的数据(谷歌地图中的 28k 标记)。
每次应用启动时都会执行解析 json 的函数,这似乎是不必要的(而且速度很慢)。所以我尝试将数据加载到单独的 swift 文件中的数组中。但即使打开一个包含 28k 字符串数组(每个 4 个字符)的 swift 文件也比打开一个包含 360k 行代码的整个 json 文件(包括那些 28k 字符串和 10 条关于每一个)所以我认为处理这样的原始数组比 json 解析然后读取要慢。
为什么会这样?如何以最有效的方式处理此类数据?是否需要在每次启动时解析或如何预处理 json 以节省一些内存?
【问题讨论】:
分批加载,根据需要分批加载更多。 听起来不错,但你能说得更具体点吗?:) 在每次启动时解析 json 是一种好方法还是一些预处理会产生明显的不同? “所以我试图将数据加载到单独的 swift 文件中的数组中” - 你到底是什么意思?你的意思是你有一个全局变量是一个数组? @Eljer 我有,但显然它是一个 nogo:) 【参考方案1】:由于您没有发布任何 JSON 片段,我假设您有这样的内容:
fruits:
apples: [
color: "red",
size: "20", // whatever unities
,
color: "green",
size: "30",
, /* ... lots of apples ... */ ],
bananas: [
oldness: 1,
marks: 0
,
oldness: 3,
marks: 4
, /* ... lots of bananas ... */ ],
/* ... lots of fruits ... */
,
vegetables:
/* ... same as fruits ... */
,
/* ... lots of other stuff ... */
您可以做什么,您可以根据您的数据制作文件树,并在需要时更轻松地访问它。假设您需要在 T0 - 这是您的应用程序的开始 - 只有 apples
数据,然后您可以从 fruits
文件夹加载 apples.json
。
您可以拥有的文件树示例完全由 JSON 本身给出,您可以拥有如下内容:
data
| - fruits
| | - apples.json
| | - bananas.json
|
| - vegetables
| | - cucumbers.json
| | - i hope you get the idea
【讨论】:
好的,我的树会像下面这样。在过滤要在地图上显示的机场标记之前,我必须处理整个 json 以获得坐标。 ``` 机场1 | - 纬度 | - 经度 | - 海拔| - ... | - … 机场2 | - 纬度 | - 经度 | - 海拔| - ... | - … 机场3 | - 纬度 | - 经度 | - 海拔| - ... | - ...``` 好的,听起来不错。将您的数据预处理成一些块。您可以按大洲、州或任何最适合您的方式定义文件夹。尝试获取地图的第一个视图,获取这些边界:(min_lat, min_long, max_lat, max_long)。根据您的块查看它们放置在哪个区域,首先加载这些机场,同时在后台加载所有机场。当视图改变时,检查你的chunk是否被加载,如果没有,让它优先加载。 谢谢,现在我看到我的 json 可以大大改进了。以上是关于(预)处理存储在 json 中的大型数据集的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章