Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在后端Node.js上安排大量任务_Node.js_Neo4j_Cron_Scheduling_Backend - Fatal编程技术网

在后端Node.js上安排大量任务

在后端Node.js上安排大量任务,node.js,neo4j,cron,scheduling,backend,Node.js,Neo4j,Cron,Scheduling,Backend,假设我有一个数据库(Neo4j,具体来说是Node.js后端),里面满是有开店和关门时间的商店(数以百万计)。我需要在适当的时间将每个数据库存储条目更新为打开或关闭。那么,以稳定和可扩展的方式构建这样一个系统的最佳/通常做法是什么 设置数百万个cron作业? 是否检查要在固定时间间隔内更改的条目? 第三方服务能否在特定时间呼叫我的后端进行更改 您要问的是如何权衡将信息写入数据库(可能有数百万个对象)以在将来进行查询时提高性能。这是一个由来已久的权衡,没有一个固定的答案适用于所有情况。这里的一切都

假设我有一个数据库(
Neo4j
,具体来说是
Node.js
后端),里面满是有开店和关门时间的商店(数以百万计)。我需要在适当的时间将每个数据库存储条目更新为打开或关闭。那么,以稳定和可扩展的方式构建这样一个系统的最佳/通常做法是什么

设置数百万个cron作业?
是否检查要在固定时间间隔内更改的条目?

第三方服务能否在特定时间呼叫我的后端进行更改

您要问的是如何权衡将信息写入数据库(可能有数百万个对象)以在将来进行查询时提高性能。这是一个由来已久的权衡,没有一个固定的答案适用于所有情况。这里的一切都是权衡

一方面,应该不惜一切代价避免数以百万计的数据库写入,因为这是对数据库服务器所能做的最昂贵的事情

另一方面,必须进行大量效率非常低的查询,这两种情况都很难达到最佳状态

所以,它实际上归结为评估在折衷空间中你应该在哪里设置东西

以下是您会问自己的问题,以确定权衡的方向:

  • 您的查询现在是否太慢,迫切需要改进性能
  • 如果您打算重新构造数据库的一部分,使“太慢”的查询速度更快,那么您在查询速度方面得到了多大的性能改进(您必须在性能之前/之后进行测量,以分析这一点)
  • 为了保持优化,您必须更改数据库中的对象的频率和数量。如果每天只有几个对象发生变化,那么每天运行这是一个简单的优化。但是,如果数以百万计的数据一直在变化,那么您可能不想经常向数据库写入数据
  • 您的站点/数据库是否每天都非常慢(比如目标市场的午夜),您是否有能力对其进行某种“批量”工作以优化它,而不会以明显的方式影响数据库的正常使用
  • 您是否可以设计一个单独的优化应用程序,用于优化数据库,但速度较慢且保持不变,从而不会对数据库的实时使用产生负面影响
  • 因此,决定在多大程度上重构数据库以提高查询性能是这些因素之间的一个持续权衡。您可能只能通过设计一些测试和进行一系列测量来找到理想的折衷点。请记住,过早优化(在您证明您有值得解决的问题之前进行优化)是浪费大量代码编写和测试时间,而这些时间本可以更好地花在更有价值的任务上。但是,解决通过测试证明的问题是可测量的,并且是真实的,这可以非常有效地利用资源

    关于你最初的问题:

    设置数百万个cron作业

    不,这不是一个好的解决方案

    在固定的时间间隔内检查要更改的条目

    这是一种可能性。这取决于您需要数据库的“当前”程度。如果您可以每小时运行某种类型的优化过程,并且可以管理对数据库的写入,这样就不会对数据库造成过度压力,从而不会对数据库的实时使用产生不利影响,那么这可能会起作用。更好的是,当数据库没有被大量使用时,您可以在夜间运行某种优化过程

    第三方服务能够调用我的后端以更改特定 时间


    我不太清楚你所说的第三方服务到底是什么意思。无论您在做什么,您都可能不希望数据库优化代码在作为应用服务器的主node.js进程中运行。它应该是一个独立的应用程序/进程,可以使用与主node.js服务器不同的CPU。

    如果没有一些额外的信息,很难想出一个好的解决方案,尤其是neo4J、nodeJS或其他任何东西。为什么数据库以需要如此密集更新的方式表示打开/关闭?为什么不让每家商店以声明的方式,即周一至周五上午9点至下午5点,来保持营业时间?可以添加例外情况。(有趣的是,就在几年前,这是一个有趣的问题:)因为大多数商店都是在一小时或半小时内开店或关门的,所以您建议的解决方案将有一个数据库,除了每小时几秒钟之外,没有写活动,而此时数据库的大部分需要更新


    考虑以更有效的方式进行预计算。或者按需计算任何给定的存储并缓存答案。

    如果存储打开/关闭时间提前知道,为什么每次打开或关闭时都必须将其写入数据库?为什么不能从数据库中获取存储时间并进行计算以确定它当前是打开的还是关闭的?然后,你不必更新数据库,除非计划的存储时间发生变化。完全同意@jfriend00,只有当我被要求确定检索时的信息时,我才会将flag
    open=bool
    完全设置为true。这实际上取决于您的用例。你能说得更具体一点吗,这有什么用?@TomHert我的例子似乎不是最好的,让我们假设在某个时候,我们应该将这个
    Store
    对象从
    Store
    转换为可供出租的
    物业
    ,这就是我想要安排的。i、 e我将把neo4j节点的标签从
    Store
    更改为
    Property
    。我为什么要这么做?要在
    存储
    搜索中保留空的
    属性
    。但现在我在想梅