我的 nodejs 应用程序需要数据库吗?
Do I need a database for my nodejs application?
我需要创建一个热图来显示世界上与 Ipv6 地址对应的密度区域。我可以通过解析 csv 文件并过滤 Ipv6 地址和相关的纬度、经度坐标来填充此热图(密度)。
我需要一个数据库来存储这些过滤后的信息吗?或者我是否可以以每次转到 index.html 页面时客户端处理此 csv 文件并填充热图的方式编写我的应用程序(客户端)?另外,需要注意的是 csv 文件可以更改。这是否意味着如果我使用数据库,我需要用新 csv 文件中的新数据重新填充数据库?
我想这取决于你和前者和后者的表现。
如果加载时间不长,则依赖应用程序在每次加载时完成繁重的工作可能会很好。
否则,您可以让应用程序解析 CSV 文件并将数据存储在数据库中。问题是,CSV 文件会是暂时的吗?如果是这样,您可能希望使用前者并在每次加载应用程序时只解析它。
否则,您可以自由地将数据存储在数据库中,并让您的应用程序查询数据库以在地图上显示结果。
没有规则!!但是要考虑很多。
parse/load 并初始化应用程序需要多长时间?如果您从文件系统加载数据,则每个请求都必须承担该费用。
数据集多久更改一次?如果加载数据集很密集,您可以让您的应用程序将其加载到内存中并使用内存版本处理请求。然后,当它更新时,必须通知服务,以便它可以更新其内存版本。
还有其他可行的方法吗?您能否将您的数据集呈现为 svg 或其他内容,并让网络服务器提供该静态内容?
如果您选择使用数据库来存储您的客户看到的数据集,那么当数据更改时必须更新它以便客户看到它:)
这个答案真的取决于你。您绝对可以按照您的想法每次都在客户端执行 csv 文件的解析过程。如果这是一个耗时的过程,那么最好让服务器执行此步骤,然后将结果提供给客户端。
这里有一些场景可以让您思考...
1) 客户端。这是你的想法。服务器将 index.html 和 data.csv 发送到客户端浏览器。并在客户端解析和提供数据。
优点:简单的服务器端逻辑。
缺点:给客户端增加了很多工作量! (希望他们没有使用移动设备)。客户端为每个请求解析数据。
2) 服务器端。服务器解析 data.csv 并将结果存储在内存中。服务器根据请求发送 index.html 并在内存中解析数据。
优点:客户端没有处理。服务器端的最少处理(解析一次)。
缺点:存储在服务器内存中。每次服务器启动时都必须重新解析。除非解析数据需要很长时间,否则这个应该是无足轻重的。
3) 服务器端 + 数据库。服务器解析 data.csv 并将结果提交到数据库。服务器根据请求发送 index.html 和解析数据。
优点:客户端没有处理。服务器端的最少处理(解析一次)。
缺点:如上所述,用于存储简单静态数据集的数据库在 IMO 看来有点矫枉过正。
我个人喜欢场景 #2(如果不是很明显的话)。这是我的看法,希望对你的决定有所帮助。
为了帮助回答有关将服务器数据传递给客户端的问题...
这主要取决于您在服务器端使用的是什么。 Node/Express、ASP.Net MVC 等?
我想您对此有 2 个场景(更多决定!)。
1) index.html 是由后端提供的静态文件。如果是这种情况,您将在该文件中有一些 javascript 将在页面加载后回调到您的服务器以请求该热图数据。此调用是您的其他端点发挥作用的地方。一旦它获得数据 - 你可以猜到其余的 - 它会将它传递给你的热图库来做它的事情。因此,您提到的 REST 端点将进行解析和操作,并 return 得到 JSON 结果。 index.html 中的脚本将使用 JQuery 通过 $.get().
调用服务器上的该端点
2) index.html 不是静态文件。相反,它是一个生成 html(和 javascript)的端点。你会把所有的东西都放在这个电话里。它将解析和操作 CSV(如果服务器启动时尚未完成),并生成一个响应,其中包含 HTML 页面和脚本标签以及包含所有 javascript.您可以将 javascript 变量设置为等于数据。当页面加载时,您会将变量中的数据传递给热图库。
我认为你的想法更符合情景1。我觉得这些信息可能会让您更加困惑,但希望它能有所帮助。
我需要创建一个热图来显示世界上与 Ipv6 地址对应的密度区域。我可以通过解析 csv 文件并过滤 Ipv6 地址和相关的纬度、经度坐标来填充此热图(密度)。
我需要一个数据库来存储这些过滤后的信息吗?或者我是否可以以每次转到 index.html 页面时客户端处理此 csv 文件并填充热图的方式编写我的应用程序(客户端)?另外,需要注意的是 csv 文件可以更改。这是否意味着如果我使用数据库,我需要用新 csv 文件中的新数据重新填充数据库?
我想这取决于你和前者和后者的表现。
如果加载时间不长,则依赖应用程序在每次加载时完成繁重的工作可能会很好。
否则,您可以让应用程序解析 CSV 文件并将数据存储在数据库中。问题是,CSV 文件会是暂时的吗?如果是这样,您可能希望使用前者并在每次加载应用程序时只解析它。
否则,您可以自由地将数据存储在数据库中,并让您的应用程序查询数据库以在地图上显示结果。
没有规则!!但是要考虑很多。
parse/load 并初始化应用程序需要多长时间?如果您从文件系统加载数据,则每个请求都必须承担该费用。
数据集多久更改一次?如果加载数据集很密集,您可以让您的应用程序将其加载到内存中并使用内存版本处理请求。然后,当它更新时,必须通知服务,以便它可以更新其内存版本。
还有其他可行的方法吗?您能否将您的数据集呈现为 svg 或其他内容,并让网络服务器提供该静态内容?
如果您选择使用数据库来存储您的客户看到的数据集,那么当数据更改时必须更新它以便客户看到它:)
这个答案真的取决于你。您绝对可以按照您的想法每次都在客户端执行 csv 文件的解析过程。如果这是一个耗时的过程,那么最好让服务器执行此步骤,然后将结果提供给客户端。
这里有一些场景可以让您思考...
1) 客户端。这是你的想法。服务器将 index.html 和 data.csv 发送到客户端浏览器。并在客户端解析和提供数据。
优点:简单的服务器端逻辑。
缺点:给客户端增加了很多工作量! (希望他们没有使用移动设备)。客户端为每个请求解析数据。
2) 服务器端。服务器解析 data.csv 并将结果存储在内存中。服务器根据请求发送 index.html 并在内存中解析数据。
优点:客户端没有处理。服务器端的最少处理(解析一次)。
缺点:存储在服务器内存中。每次服务器启动时都必须重新解析。除非解析数据需要很长时间,否则这个应该是无足轻重的。
3) 服务器端 + 数据库。服务器解析 data.csv 并将结果提交到数据库。服务器根据请求发送 index.html 和解析数据。
优点:客户端没有处理。服务器端的最少处理(解析一次)。
缺点:如上所述,用于存储简单静态数据集的数据库在 IMO 看来有点矫枉过正。
我个人喜欢场景 #2(如果不是很明显的话)。这是我的看法,希望对你的决定有所帮助。
为了帮助回答有关将服务器数据传递给客户端的问题...
这主要取决于您在服务器端使用的是什么。 Node/Express、ASP.Net MVC 等?
我想您对此有 2 个场景(更多决定!)。
1) index.html 是由后端提供的静态文件。如果是这种情况,您将在该文件中有一些 javascript 将在页面加载后回调到您的服务器以请求该热图数据。此调用是您的其他端点发挥作用的地方。一旦它获得数据 - 你可以猜到其余的 - 它会将它传递给你的热图库来做它的事情。因此,您提到的 REST 端点将进行解析和操作,并 return 得到 JSON 结果。 index.html 中的脚本将使用 JQuery 通过 $.get().
调用服务器上的该端点2) index.html 不是静态文件。相反,它是一个生成 html(和 javascript)的端点。你会把所有的东西都放在这个电话里。它将解析和操作 CSV(如果服务器启动时尚未完成),并生成一个响应,其中包含 HTML 页面和脚本标签以及包含所有 javascript.您可以将 javascript 变量设置为等于数据。当页面加载时,您会将变量中的数据传递给热图库。
我认为你的想法更符合情景1。我觉得这些信息可能会让您更加困惑,但希望它能有所帮助。