2016-03-29 94 views
1

我需要创建一个热图来显示世界上对应于Ipv6地址的密度区域。我可以通过解析一个csv文件并过滤Ipv6地址和相关的经纬坐标来填充这个热图(密度)。我是否需要一个用于我的nodejs应用程序的数据库?

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

回答

1

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

这里有几个方案来包装你的头周围...

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

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

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

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

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

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

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

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

缺点:如上所述的用于存储简单静态数据集的数据库看起来像是过度的IMO。

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


为了帮助回答你的问题有关服务器的数据传递到客户端...

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

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

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

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

您的想法与我认为的场景1更加一致。我有一种感觉,这些信息可能会让你更加困惑,但希望它有所帮助。

+0

谢谢您的全面解答。 我想在服务器端处理可能是最好的选择,因为我还定义了另一个REST端点,它返回边界框内的纬度,长度坐标(想象一下用户在客户端指定的地图上的一个框,以及你想返回给用户该盒子内所​​有Ipv6地址的坐标)。你怎么看? – newenthusiast

+0

我认为你有正确的想法!端点将采用客户端绘制的边界框尺寸,例如框的左上角的lat长,以及框的右下角的lat长。通过这些输入,您可以遍历所有Ipv6坐标,并返回落入该框内的坐标。抱歉,如果这太详细了。我讨厌拿走搞定它的乐趣。 – Theo

+0

谢谢,这很有帮助! :) @Theo – newenthusiast

1

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

依靠应用程序在每次加载时执行繁重的工作,如果加载时间不需要太长时间,就可以正常工作。

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

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

1

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

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

数据集多久更改一次?如果加载数据集的密集程度很高,则可以让应用程序将其加载到内存中,并使用内存版本为请求提供服务。然后当它更新时,服务将不得不被通知,以便它可以更新它的内存版本。

有没有其他方法可行?你能渲染你的数据集到一个svg或者什么东西,并且让一个web服务器提供这个静态内容吗?

如果您选择使用一个数据库来存储你的客户看,那么它在数据改变时被更新的数据集的客户看到它:)

相关问题