专业人员如何处理数千、数十万甚至数百万个 JSON 对象?节点.js

Wha*_*ing 3 performance json bigdata node.js data-structures

专业人员如何处理数千、数十万甚至数百万个 JSON 对象?

我最近完成了一个小型应用程序,它请求十几个左右的 JSON 对象(它们是我生成的电影对象)。因为我处理的对象很少,所以当我想要解析和搜索 JSON 中的特定对象时,不需要以高效的方式进行编码。

但如果我正在开发一个真正的专业应用程序并且它收到 100k JSON 对象,我将如何处理:

  1. 存储所有对象以便后端可以使用
  2. 以有效的方式搜索特定对象

例如,假设这 100k 个对象是电影,每个对象都有一个类型和演员列表。我真的会将这 100K 解析为一个数组,然后循环遍历以查找感兴趣的对象吗?

如果后端有 100 万个电影 JSON 对象而不是 100k 会怎样?看起来拥有一百万个条目数组或遍历整个一百万个对象通常效率非常低,并且可能会减慢前端速度。

对于我的小型应用程序,我只是将所有 22 个 JSON 对象保存到名为“allMovies”的全局数组中,我可以进行简单的线性搜索来查找我需要的内容,但同样,如果我有一百万个电影对象,我看不到我的应用程序(在当前状态下)将会扩展。

我对此还很陌生,但这本质上是我的问题,如何有效地存储大量 JSON 对象(后端已收到)并有效地搜索它们。我正在寻找有关我可以实施的学科或数据结构的指导。

我制作的小应用程序是在 Node.js 中。

sle*_*man 6

专业人员使用数据库。

首先要意识到的是,您没有使用 JSON 对象。您正在处理数据。JSON 恰好是您接收数据的协议,但它可能是 XML 或 CSV 或 ASN.1 或 Bencoding 或 Protobuf - 数据的格式并不重要,只有内容很重要。

现在,使用什么类型的数据库取决于数据、接收数据的速率以及您想要对数据执行的操作。有时您将被迫使用不止一种类型的数据库。

当数据是结构化的或具有复杂关系时,SQL/关系数据库表现出色。正确设计的 SQL 数据库会将数据的不同部分分成不同的表,然后定义表之间的关系 - 例如,您将有一个actors表来存储所有演员,然后一个movies表来存储所有电影,然后另一个cast表将演员链接到电影。这可以避免数据重复,尤其是当您拥有庞大的数据集时。

LDAP 等分层数据库提供非常快速的查找,尤其是在大规模并行集群上实现时。这是因为查找路由可以利用数据层次结构。因此,电话系统在分层数据库上实现了标准化。

MongoDB 和 ElasticSearch (Lucene) 等文档数据库擅长快速数据插入和相对快速的查询。在最简单的情况下,数据库只会将 JSON 数据直接保存到新文件中(是​​的,大多数文档数据库都是基于 JSON 的)。然而,通常没有重复数据删除,因此如果您有一个电影数据库,那么演员的名字将在他们出现的所有电影中重复。另一方面,如果您有一个演员数据库,那么电影标题将是重复的。这也说明了您需要仔细设计文档数据库的结构并选择正确的根对象来表示所有数据。

还有其他数据库类型,但它们往往更加深奥,并且用于非常具体的用例,例如缓存、日志记录等。