问题 在节点中提供文件与数据库的内容


我正在制作旧版静态网站的新版本,该网站长达50多个静态页面。

因此,我使用旧内容制作了一个JSON文件,因此新网站可以更多CMS(具有常用页面的模板),因此后端获得更多干。

我想知道我是否可以通过JSON将这些内容提供给我的观点,或者我是否应该在MySQL数据库中提供它?

我正在使用Node.js,并且在Node I中可以将该JSON文件存储在内存中,因此当用户请求数据时不会进行文件读取。

对此有正确的做法吗?提供缓存的JSON文件或通过MySQL提供性能差异?

有问题的文件大约是400Kb。如果文件大小与一个技术的选择相关?


3399
2017-12-25 08:35


起源

我看到投票结束这个。这是否意味着行为差异不够大,个人意见采取哪种方法? - Rikard
这意味着有很多方法可以解决任务。哪一个最好取决于太多因素,包括您自己的技能和偏好。对于适用于更广泛公众的问题,不可能有一个单一的答案。 - Tomalak
@Tomalak我可以缩小/决定使这个问题更好,更负责任的因素是什么? - Rikard
那么,关于SO的问题的期望格式将是特定的问题,伴随着特定的代码样本和对特定技术/库的限制,即最终构成非常广泛的非常狭窄的问题。对行动/最佳实践或图书馆的建议很快就过时了,它们往往不是明确的正确或错误,这会引发开放式讨论,这不是这个特定网站的目标。 - Tomalak


答案:


通常,数据库用于提供频繁更改的动态内容,记录具有一对多或多对多关系,您需要根据各种条件查询数据。

在您描述的情况下,看起来您可以将JSON文件缓存在服务器内存中。只要确保在文件内容发生变化时更新缓存,即重新启动服务器,通过http请求触发缓存更新或在文件系统级别监视文件。

除此之外,您应该考虑在服务器和浏览器上缓存静态文件以获得更好的性能

  1. 启动时服务器内存中的Cache和Gzip静态文件(html,js,css,jpg)。这可以使用npm包轻松完成 连接静电
  2. 通过设置正确的响应标头来使用客户端的浏览器缓存。一种方法是在Express路由定义上添加maxAge头,即:

app.use“/ bower”,express.static(“bower-components”,{maxAge:   31536000})

这里 是一篇关于浏览器缓存的好文章


2
2018-01-03 03:01





为什么要添加另一层间接?只需直接从JSON提供意见。


6
2017-12-27 09:14



这就是我的想法,你仍然向用户提供相同数量的数据,mysql连接只会减慢它的速度。但我可能是错的:) - Medda86
mysql将从磁盘提供数据,这比从RAM提供数据要慢得多,这正是OP所想的。 - hd1
@ hd1不,mysql也会在RAM中缓存内容。真正的问题不是你将动态系统的基础 上 (一个为每个请求从头开始构建页面,即使构建过程的结果只有在视图模板更改时才会有所不同,所以基本上从不),但是是否创建一个生成静态页面一次的系统,然后简单地重新生成它们模板或内容更改将是更好的选择。 - Tomalak


如果您已将视图存储为JSON并使用Node,则可能需要考虑使用MEAN堆栈(MongoDB,Express,Angular,Node):

这样你就可以在JS中编写整个代码,包括MongoDB中的文档存储。 我应该指出我自己没有使用过MEAN。

MySQL可以存储和提供JSON没有问题,但由于它没有解析它,它是非常不灵活的,除非你将它拆分成组件并且文档中的索引几乎是不可能的。

您是否应该这样做完全取决于您的个人项目以及它是否/可能如何发展。

当您正在实施该网站的新版本(使用CMS)时,它会建议它是实时的并且会受到增长或变化的影响,并且可能在MySQL中存储JSON会存储未来的问题。如果它只是一个文件,那么从文件系统拉出并将其缓存在RAM中可能更容易。

我之前已经在MySQL中为我们的项目存储了JSON,除了少数几个小众案例之外,最终还是分割了组件数据。


3
2017-12-30 11:39





400KB很小。所有数据都将存在于RAM中,因此I / O不会成为问题。

动态构建页面 - 除非插入广告,否则所有重型打击者都会这样做。 (我曾经在这样一家公司的大学工作。有数百万页一直存在;只有少数是“静态的”。)

哪个CMS - 太多可供选择。选择一对听起来容易的人;然后看看你是否能够适应它们。然后在他们之间挑选。

Linux / Windows的;阿帕奇/ Tomcat的/ nginx的; PHP / Perl的/的Java / VB。同样,您的舒适度是这个小网站的重要标准;他们中的任何一个都可以完成任务。

哪里可能出错?我确定你已经点击了渲染速度很慢的网页。所以,显然有可能走错方向。你已经开关了;如果您的决定结果不尽如人意,请准备好从现在开始一年或两年换档。

避免任何过于沉重的EAV(键值)模式的CMS。它们可能适用于400KB的数据,但它们难以扩展。


2
2017-12-29 01:55





如果您的数据大小将来不会增长,那么直接从RAM本身为json提供服务是一种很好的做法。但如果将来数据有所增加,那么它将成为最糟糕的应用案例。


0
2017-12-28 04:49





如果您不希望添加(m)任何新页面,我会选择最简单的解决方案:将JSON读入内存,然后从内存中提取。 400KB的内存非常少。

无需涉及数据库。当然,你可以做到,但这里有点过分。


0
2018-01-02 22:16





我建议在构建时生成静态html内容(使用grunt或..)。如果要应用更改,请触发构建并生成静态内容并进行部署。


0
2018-01-02 22:40