Node.js&MongoDB | 通过存储本地JSON文件来减less对数据库的调用

我正在开发一个应用程序,向用户显示其所选位置的某些可用服务,包括该服务的价格。 我将Services存储在一个集合中,并将这些服务的价格存储在另一个自己的集合( Prices )中。 一些服务具有相同的价格,所以通常存在一对多的关系。

问题是,在我用来确定最佳可用服务的“algorithm”中,我通过轮询Mongo并获得正确的值(包括服务的价格)确定了很多值。

我最初在Service模型中embedded了每个服务的定价结构,但这是一个问题,因为我将不得不定期扫描Services集合以更新此变化/波动的定价。 我最终将服务中的数据库引用embedded到Price

我的问题

我怎样才能最好地实现我现在正在做的事情,同时减less对Mongo的呼叫数量?

我目前正在用Mongosearch每个用户search大约50-400次(特别是定价),这与其他查询结合在一起会降低速度,而且效率不高。 我正在考虑一些选项:

  1. 创build一个存储桶(也许是Node中的global命名空间中的一个对象),在这里我通过_idcaching所有的定价信息。 每次我需要find一个Service定价时,我会经过这个桶,如果定价已经被caching在桶中,我做我的计算并返回价格,否则我从Mongo获取文档并将其添加到桶为目前和未来的使用。

我担心这可能会导致内存泄漏等问题。 理想情况下,所有的用户都可以使用这个存储桶,而不是像一个只属于一个用户的cookie(我对这个cookie的理解可能是错误的)。 我还不知道是否有可能为所有用户全局公开一个对象来访问它。

  1. 我已经看到了一些MongoDB的内存实现(目前无法find),它们模拟MongoDB,但是使用LocalStorage作为数据存储。 我正在考虑分叉其中的一个,并调整它们的服务器端function。

我不知道这是否可行,似乎可能需要我一些时间去做。

  1. 将数据存储为一个JSON文件(或一些文件,我可以找出一种分割文件的方法)。 然后我可以通过require()来读取带有Node的JSON文件。 这是目前我的首选选项,因为我可以使用fs API来处理JSON文件的定期更新。

我担心JSON文件的大小,主要是如果它们足够大,可能会减慢Node,但是我正在考虑这个,因为我将在数据库上节省50-400个命中。 我还假设我不会有一个JSON文件加载n次( n是在某个时间点服务的用户数量)

考虑到以上三个选项,哪个有很好的工作机会? 有些选项可能是不可能的,所以我可以把它们从我的列表中删除,也可能有其他的我还没有考虑。

最后,我的免责声明: 我知道,这可能已经很容易地在SQL中使用JOIN语句实现,不,我没有使用锤子的东西,需要一把螺丝刀。 尽pipe对于我的项目中的某些部分,SQL看起来像是一个明显的胜利,但对于我存储的大部分数据来说,Mongo更好。 再加上经验的名义重塑车轮有助于。

谢谢