专业人员如何处理数千、几十万或可能数百万个JSON对象?node.js

专业人员如何处理数千、几十万或可能数百万个JSON对象?node.js,node.js,json,performance,data-structures,bigdata,Node.js,Json,Performance,Data Structures,Bigdata,专业人员如何处理数千、几十万或可能数百万个JSON对象 我最近完成了一个小应用程序,它请求了十几个JSON对象(它们是我生成的movies对象)。因为我使用的对象很少,所以当我想要解析和搜索JSON中的特定对象时,我不需要高效地编写代码 但如果我在一个真正的专业应用程序上工作,它收到了10万个JSON对象,我该如何处理: 存储所有对象以便后端可以使用它 以高效的方式搜索特定对象 例如,假设这10万个对象是电影,每个对象都有一个类型和演员列表。我真的会将这些100K解析成一个数组,然后循环查找感兴

专业人员如何处理数千、几十万或可能数百万个JSON对象

我最近完成了一个小应用程序,它请求了十几个JSON对象(它们是我生成的movies对象)。因为我使用的对象很少,所以当我想要解析和搜索JSON中的特定对象时,我不需要高效地编写代码

但如果我在一个真正的专业应用程序上工作,它收到了10万个JSON对象,我该如何处理:

  • 存储所有对象以便后端可以使用它
  • 以高效的方式搜索特定对象
  • 例如,假设这10万个对象是电影,每个对象都有一个类型和演员列表。我真的会将这些100K解析成一个数组,然后循环查找感兴趣的对象吗

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

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

    我对此仍然很陌生,但这本质上是我的问题,如何高效地存储大量JSON对象(后端已经接收到)并高效地搜索它们。我正在寻找关于我可以实现的规程或数据结构的指导


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

    专业人士使用数据库

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

    现在,使用哪种类型的数据库取决于数据、接收数据的速率以及对数据的处理方式。有时,您将被迫使用多种类型的数据库

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

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

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


    还有其他数据库类型,但它们往往更为深奥,用于非常特定的用例,如缓存、日志等。

    有趣的问题。对此没有正确或单一的答案。我们每个人都将根据特定解决方案的工作情况提供答案

    让我尝试提供一个解决方案和一组步骤,您可以采取这些步骤来最终确定解决方案

    • 描述中的数据是一组将 经常被搜索。大量读取
    • 这将被输入一次并更新几次
    • 需要在前端进行大量文本搜索和排序
    • 您正在为应用程序使用NodeJS和客户机-服务器类型的体系结构,因此这将涉及restapi
    以上是我可以指出的一些特征,我们将在解决方案中使用这些特征。 因为我们可以看到,您拥有的数据应该是高度可搜索和实时的,所以它主要由JSON对象数据组成,这些数据是动态的,可能会发生更改。我们可以使用elasticsearch、MongoDB或任何其他支持NoSQL DB的文本搜索

    现在我们已经有了一个数据库,我们可以继续设计数据流了

    这里的一个重要步骤是数据库设计以及如何有效地 创建引用,唯一可以这样做的人就是你自己 对该领域有更好的了解

    步骤1-首先必须解析movies对象并将其插入数据库和/或弹性搜索索引中。我猜您已经在较小的规模上完成了这项工作,将对象存储在
    所有电影
    数组中,该数组可以充当客户端缓冲区。当缓冲区已满时,您可以通过在应用程序中使用XHR或AJAX调用REST API,将
    allMovies
    阵列卸载到后端

      // Incoming movies
      var newMovie = {your data from forms, other source, etc}
      allMovies.push(newMovie);
      if(allMovies.length >= 20 )
      {
       //make API call to backend.
       //empty the buffer
        allMovies = [];
      } 
      //else wait for new movie
    
    步骤2:在后端,只需将数据存储到数据库中,为搜索最多的字段编制索引。这里是我提到的两个数据库的参考

    请注意,elasticsearch索引也会在