Node.js 我的nodejs应用程序需要一个数据库吗?

Node.js 我的nodejs应用程序需要一个数据库吗?,node.js,database,parsing,heatmap,Node.js,Database,Parsing,Heatmap,我需要创建一个热图,显示与世界上Ipv6地址相对应的密度区域。我可以通过解析csv文件并过滤Ipv6地址和相关lat、long坐标来填充此热图(密度) 我是否需要一个数据库来存储此过滤信息?或者我可以这样编写我的应用程序(客户端),每次我转到index.html页面时,客户端都会处理这个csv文件并填充热图?此外,还有一个警告,csv文件可以更改。这是否意味着如果我使用数据库,我需要使用新csv文件中的新数据重新填充数据库?我想这取决于您以及前者和后者的性能 依靠应用程序在每次加载时执行繁重的操

我需要创建一个热图,显示与世界上Ipv6地址相对应的密度区域。我可以通过解析csv文件并过滤Ipv6地址和相关lat、long坐标来填充此热图(密度)


我是否需要一个数据库来存储此过滤信息?或者我可以这样编写我的应用程序(客户端),每次我转到index.html页面时,客户端都会处理这个csv文件并填充热图?此外,还有一个警告,csv文件可以更改。这是否意味着如果我使用数据库,我需要使用新csv文件中的新数据重新填充数据库?

我想这取决于您以及前者和后者的性能

依靠应用程序在每次加载时执行繁重的操作,如果加载时间不太长的话,可能工作得很好

否则,您可以让应用程序解析CSV文件并将数据存储在数据库中。问题是,CSV文件会是暂时的吗?如果是这样的话,您可能希望在每次加载应用程序时解析前者


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

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

解析/加载和初始化应用程序需要多长时间?如果您从文件系统加载数据,那么在每个请求上都必须承担这一成本

数据集多久更改一次?如果需要大量加载数据集,可以让应用程序将其加载到内存中,并使用内存中的版本为请求提供服务。然后,当它被更新时,必须通知服务,以便它可以更新其内存中的版本

还有其他可行的方法吗?您是否可以将数据集呈现为svg或其他格式,并让web服务器提供静态内容


如果您选择使用DB存储客户机看到的数据集,则必须在数据更改时对其进行更新,以便客户机看到:)

这个答案完全由您决定。您完全可以按照自己的想法,每次在客户端执行csv文件的解析过程。如果这是一个耗时的过程,那么最好让服务器执行此步骤,然后将结果提供给客户端

这里有几个场景让你头脑清醒

1) 客户端。这是你的主意。服务器将index.html和data.csv发送到客户端浏览器。数据被解析并提供给客户端

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

缺点:给客户带来了很多工作!(希望他们没有使用移动设备)。在客户端为每个请求解析数据

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

优点:客户端没有处理。服务器端的最小处理(解析一次)

缺点:存储在服务器内存中。每次服务器启动时都必须重新解析。除非解析数据需要很长时间,否则这应该是无关紧要的

3) 服务器端+DB。服务器解析data.csv并将结果提交到数据库。服务器根据请求发送index.html和解析数据

优点:客户端没有处理。服务器端的最小处理(解析一次)

缺点:用于存储上述简单静态数据集的数据库似乎有些过分

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


要帮助回答有关将服务器数据传递到客户端的问题

这主要取决于您在服务器端使用的内容。Node/Express、ASP.NETMVC等

我想这有两种情况(更多决策!)

1) html是由后端提供的静态文件。如果是这种情况,那么在该文件中会有一些javascript,在页面加载后会回调到服务器以请求热图数据。此调用是您的另一个端点将发挥作用的地方。一旦它得到了数据——你可以猜出其余的——它就会把数据传递到你的热图库中去做它该做的事情。所以您提到的REST端点将进行解析和操作,并返回JSON结果。index.html中的脚本将使用JQuery使用$.get()调用服务器上的该端点

2) index.html不是静态文件。相反,它是一个生成html(和javascript)的端点。你会把一切都放在这个电话里。它将解析和操作CSV(如果在服务器启动时还没有完成),并生成一个响应,该响应将由HTML页面和脚本标记组成,同时包含所有javascript。您需要将javascript变量设置为与数据相等。当页面加载时,您将把变量中的数据传递给热图库


我认为你的想法更符合情景1。我觉得这些信息可能会让你更加困惑,但希望它能帮助你。

谢谢你的全面回答。我认为服务器端的处理可能是最好的选择,因为我还定义了另一个REST端点,该端点返回边界框内的lat长坐标(假设用户在客户端指定地图上的一个框,并且您希望将该框内Ipv6地址的所有坐标返回给用户)。你的想法是什么?我想你的想法是对的!端点将采用客户端绘制的边界框标注,例如框左上角的lat-long和框右下角的lat-long。通过这些输入,您可以循环遍历所有Ipv6坐标,并返回落在框中的坐标。如果这是太多的细节,我道歉。我不想失去弄明白它的乐趣。谢谢,这是帮助