在节点中从文件vs数据库提供内容

我正在制作一个新的静态网站,长到50多个静态网页。

所以我做了一个JSON文件与旧的内容,所以新的网站可以更多的CMS(与普通网页的模板),所以后端得到更多的干。

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

我正在使用Node.js,并且在节点中,我可以将该JSON文件存储在内存中,以便在用户请求数据时不会读取文件。

这是否有正确的做法? 他们之间的服务caching的JSON文件或通过MySQL的性能差异?

有问题的文件是大约400Kb。 如果文件大小与另一种技术的select有关?

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

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

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

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

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

这是一个关于浏览器caching的好文章

为什么要添加另一个间接层? 直接从JSON服务的意见。

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

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

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

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

当你正在实现一个新版本(CMS)的网站,它会build议它是活的,并受到增长或改变,也许在MySQL中存储JSON正在存储未来的问题。 如果它真的只是一个文件,那么从文件系统中拉出并将其caching在RAM中可能更容易。

我以前在我们的项目中已经在MySQL中存储了JSON,除了一些小众情况之外,我们最终分解了组件数据。

400KB很小。 所有的数据将存储在RAM中,所以I / O不会成为问题。

dynamic构build页面 – 所有重量级人员都可以这样做,除非插入广告。 (我曾经在这样的公司里工作过,里面有上百万页,只有less数是静态的)

哪个CMS – 太多select。 选一对听起来很容易的情侣; 然后看看你是否能适应他们。 然后在他们之间select。

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

哪里可能出错? 我相信你已经打了很慢的网页。 所以,显然有可能走错方向。 你已经在换挡了; 如果你的决定不够完美的话,准备从现在起换一两年。

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

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

如果您不希望添加(m)任何新的页面,我会去寻找最简单的解决scheme:将JSON读入内存,然后从内存中提供服务。 400KB是非常小的内存。

不需要涉及数据库。 当然,你可以做到这一点,但这是过度的。

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