【问题标题】:How to store and access big JSON files in MERN application?如何在 MERN 应用程序中存储和访问大型 JSON 文件?
【发布时间】:2019-02-22 02:55:57
【问题描述】:

我正在创建 MERN 应用程序,其主要功能之一是以interactive choropleth map 的形式呈现数据。为了实现它,我需要访问具有管理边界的 GeoJSON 文件。这些文件包含一组 GeoJSON 特征,这些特征将用数据库中的数据填充。 每个 GeoJSON 文件超过 1MB,其加载时间可能会对用户体验产生很大影响。

我尝试在后端读取这些 GeoJSON 文件 (node.js + express),然后用数据库中的数据填充它们并将它们发送回访问某个端点的用户。这种方法工作得很好,但完成这样的请求大约需要 5 秒,这太长了。

另一方面,将此类数据存储在前端 (ReactJs) 会极大地影响加载时间,这也是不需要的。

在这种情况下,存储和访问此类 GeoJSON 数据的最佳方法是什么?

【问题讨论】:

  • 你可以做 google 做的事:将文件分割成更小的文件,只加载查看时需要的文件。
  • 这不是我的解决方案。每个文件都包含单个页面所需的 GeoJSON 功能。到不同的页面我需要加载不同的文件。我想知道的是如何以尽可能小的对用户体验的影响来实现它。
  • 1 Mb 的 JSON 数据量很大。很难相信所有这些总是需要的。除了通过稍微不错的连接下载 1Mb 之外,应该花费不到 5 秒的时间。你真的找到瓶颈了吗?
  • @EriksKlotins 一个文件甚至超过 1.5 MB。这些 JSON 文件中的数据表示具有非常不规则形状(海岸线等)的多边形。在这 5 秒中,我不仅包括传输时间,还包括:MongoDb 聚合查询以及使用 fs module 读取 GeoJSON 文件并填充数据的过程。

标签: json node.js reactjs choropleth mern


【解决方案1】:

我建议您尝试减少定义每个形状的点数。最简单的方法是合并相距小于 X 米的点。有更高级的算法可以简化形状,例如this

如果您仍然需要所有积分,例如在前端计算,先加载一个简化的形状,然后在后台加载大文件。

定义形状的大块点似乎是缓存的良好候选者。研究一下以减少数据库访问/处理时间。

【讨论】:

    【解决方案2】:

    我最终要做的是为node.js 后端上的每个文件定义了特定的端点。

    此外,我使用 @EriksKlotins 提到的 Douglas–Peucker 算法缩小了每个文件的大小(根据需要)

    【讨论】:

      猜你喜欢
      • 2019-01-22
      • 2014-07-10
      • 2021-06-06
      • 2013-03-28
      • 1970-01-01
      • 2013-02-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多