我需要一个数据库为我的nodejs应用程序?

我需要创build一个热图来显示世界上对应于IPv6地址的密度区域。 我可以通过parsing一个csv文件并过滤Ipv6地址和相关的经纬坐标来填充这个热图(密度)。

我需要一个数据库来存储这个过滤的信息? 或者我可以写我的应用程序(客户端),每次我去到index.html页面,客户端处理这个C​​SV文件,并填充热图? 此外,有一个警告,csv文件可以改变。 这不是说如果我使用数据库,我需要用新的CSV文件中的新数据重新填充数据库?

这个答案真的取决于你。 你一定可以在客户端执行csv文件的parsing过程,正如你所想的那样。 如果这是一个耗时的过程,那么最好让服务器执行这个步骤,然后把结果提供给客户端。

这里有几个场景来包裹你的头…

1) 客户端 。 这是你的想法。 服务器将index.html和data.csv发送到客户端浏览器。 数据被parsing并在客户端提供。

优点:简单的服务器端逻辑。

缺点:把大量的工作放在客户端上! (希望他们没有使用移动设备)。 每个请求数据都被parsing客户端。

2) 服务器端 。 服务器parsingdata.csv并将结果存储在内存中。 服务器根据请求在内存中发送index.html和parsing的数据。

优点:在客户端没有处理。 服务器端处理最less(parsing一次)。

缺点:存储在服务器内存中。 每次服务器启动时都必须重新parsing。 除非需要很长时间来parsing数据,否则这应该是微不足道的。

3) 服务器端+ DB 。 服务器parsingdata.csv并将结果提交给数据库。 服务器根据请求发送index.html和parsing的数据。

优点:在客户端没有处理。 服务器端处理最less(parsing一次)。

缺点:如上所述的存储简单的静态数据集的数据库似乎是过度的IMO。

我个人喜欢场景2(如果不是很明显)。 这是我的意见,希望能帮助你做出决定。


为了帮助回答有关将服务器数据传递给客户端的问题…

这主要取决于你在服务器端使用的是什么。 节点/快递,ASP.Net MVC等?

我想你有两个场景(更多的决定!)。

1)index.html是一个由后端提供的静态文件。 如果是这种情况,那么您将在该文件中包含一些JavaScript,在加载页面以请求热图数据之后,该文件将会callback到您的服务器。 这个电话是你的另一个端点将会发挥作用的地方。 一旦获得数据 – 你可以猜测剩下的数据 – 将其传递给你的热图库来完成这件事。 因此,您提到的REST端点将执行parsing和操作,并返回JSON结果。 index.html中的脚本将使用JQuery通过$ .get()调用服务器上的端点。

2)index.html不是一个静态文件。 相反,它是生成html(和javascript)的端点。 你会把一切都放在这一个电话。 它会parsing和处理CSV(如果服务器启动时还没有完成),并生成一个响应,它将包含HTML页面和脚本标记以及所有的javascript。 你会设置一个JavaScriptvariables等于数据。 加载页面时,可以将variables中的数据传递给热图库。

我想你的想法更符合情景1。 我有一种感觉,这个信息可能会让你更加困惑,但希望它有帮助。

我想这取决于你和前者和后者的performance。

依靠应用程序来执行繁重的工作,如果它不会花太长时间加载的话,它可以正常工作。

否则,您可以让应用程序parsingCSV文件并将数据存储在数据库中。 问题是,CSV文件会是暂时的吗? 如果是这样,你可能想要前者,只是每当应用程序加载时parsing它。

否则,您可以自由地将数据存储在数据库中,让应用程序查询数据库以在地图上显示结果。

没有规则! 但很多要考虑。

parsing/加载和初始化应用程序需要多长时间? 如果您从文件系统加载数据,您将不得不在每个请求上产生这种成本。

数据集多久更新一次? 如果加载数据集密集型,则可以让应用程序将其加载到内存中,并使用内存版本来处理请求。 然后,更新时,服务将不得不被通知,以便它可以更新其内存版本。

还有其他的方法可以工作吗? 你可以渲染你的数据集到一个SVG或东西,并有一个Web服务器提供静态内容?

如果您select使用数据库来存储您的客户端看到的数据集,那么当数据更改为客户端查看时,它必须更新:)