在节点中从文件vs数据库提供内容
我正在制作一个新的静态网站,长到50多个静态网页。
所以我做了一个JSON文件与旧的内容,所以新的网站可以更多的CMS(与普通网页的模板),所以后端得到更多的干。
我想知道是否可以从JSON中将这些内容提供给我的观点,或者我是否应该在MySQL数据库中提供这些内容?
我正在使用Node.js,并且在节点中,我可以将该JSON文件存储在内存中,以便在用户请求数据时不会读取文件。
这是否有正确的做法? 他们之间的服务caching的JSON文件或通过MySQL的性能差异?
有问题的文件是大约400Kb。 如果文件大小与另一种技术的select有关?
通常,数据库用于提供频繁更改的dynamic内容,logging具有一对多或多对多的关系,您需要根据各种条件查询数据。
在你描述的情况下,看起来你可以将JSON文件caching在服务器内存中。 只要确保在文件内容发生变化时更新caching,即重新启动服务器,通过http请求触发caching更新或在文件系统级别监视文件。
除此之外,您应该考虑在服务器和浏览器上caching静态文件以获得更好的性能
- 启动时在服务器内存中caching和Gzip静态文件(html,js,css,jpg)。 这可以像使用连接静态一样使用npm包轻松完成
- 通过设置适当的响应头来使用客户端的浏览器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并生成静态内容并进行部署。