动态网页是下一个要解决的难题。咱们从数据库中读取数据,再用动态去渲染出一个静态页面,而且缓存服务器来缓存这个页面。既然咱们均可以用Varnish、Squid这样的软件来缓存页面——代表它们能够是静态的,为何不考虑直接使用静态网页呢?javascript
为了实现以前说到的编辑-发布-开发分离
的CMS,我仍是花了两天的时间打造了一个面向普通用户的编辑器。效果截图以下所示:java
做为一个普通用户,这是一个很简单的软件。除了Electron + Node.js + React做了一个140M左右的软件,尽管打包完只有40M左右 ,可是仍是会把用户吓跑的。不过做为一个快速构建的原型已经很不错了——构建速度很快、而且运行良好。git
尽管这个界面看上去仍是稍微复杂了一下,还在试着想办法将连接名和日期去掉——问题是为何会有这两个东西?redis
咱们在咱们数据库中定义好了Schema——对一个数据库的结构描述。在《编辑-发布-开发分离
》一文中咱们说到了echeveria-content的一个数据文件以下所示:数据库
{ "title": "白米粥", "author": "白米粥", "url": "baimizhou", "date": "2015-10-21", "description": "# Blog post \n > This is an example blog post \n Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ", "blogpost": "# Blog post \n > This is an example blog post \n Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." }
比起以前的直接生成静态页面这里的数据就是更有意思地一步了,咱们从数据库读取数据就是为了生成一个JSON文件。何不直接以JSON的形式存储文件呢?json
咱们都定义了这每篇文章的基本元素:缓存
title服务器
author机器学习
date编辑器
description
content
url
即便咱们使用NoSQL咱们也很难逃离这种模式。咱们定义这些数据,为了在使用的时候更方便。存储这些数据只是这个过程当中的一部分,下部分就是取出这些数据并对他们进行过滤,取出咱们须要的数据。
Web的骨架就是这么简单,固然APP也是如此。难的地方在于存储怎样的数据,返回怎样的数据。不一样的网站存储着不一样的数据,如淘宝存储的是商品的信息,Google存储着各类网站的数据——人们须要不一样的方式去存储这些数据,为了更好地存储衍生了更多的数据存储方案——因而有了GFS、Haystack等等。运营型网站想尽办法为最后一千米努力着,成长型的网站一直在想着怎样更好的返回数据,从更好的用户体验到机器学习。而数据则是这个过程当中不变的东西。
尽管,我已经想了不少办法去尽量减小元素——在最开始的版本里只有标题和内容。然而为了知足咱们在数据库中定义的结构,不得不造出来这么多对于通常用户不友好的字段。如连接名是为了存储的文件名而存在的,即这个连接名在最后会变成文件名:
repo.write('master', 'contents/' + data.url + '.json', stringifyData, 'Robot: add article ' + data.title, options, function (err, data) { if(data.commit){ that.setState({message: "上传成功" + JSON.stringify(data)}); that.refs.snackbar.show(); that.setState({ sending: 0 }); } });
而后,上面的数据就会变成一个对象存储到“数据库”中。
今天 ,仍然有不少人用Word、Excel来存储数据。由于对于他们来讲,这些软件更为直接,他们简单地操做一下就能够对数据进行排序、筛选。数据以怎样的形式存储并不重要,重要的是他们都以文件的形式存储着。
在控制台中运行一下 man git
你会获得下面的结果:
这个答案看起来颇有意思——不过这看上去彷佛无关主题。
不一样的数据库会以不一样的形式存储到文件中去。blob是git中最为基本的存储单位,咱们的每一个content都是一个blob。redis能够以rdb文件的形式存储到文件系统中。完成一个CMS,咱们并不须要那么多的查询功能。
这些上千年的组织机构,只想让人们知道他们想要说的东西。
咱们使用NoSQL是由于:
不使用关系模型
在集群中运行良好
开源
无模式
数据交换格式
我想其中只有两点对于我来讲是比较重要的集群
与数据格式
。可是集群和数据格式都不是咱们要考虑的问题。。。
咱们也不存在数据格式的问题、开源的问题,什么问题都没有。。除了,咱们以前说到的查询——可是这是能够解决的问题,咱们甚至能够返回不一样的历史版本的。在这一点上git作得很好,他不会像WordPress那样存储多个版本。
JSON文件 + Nginx就能够变成这样一个合理的API,甚至是运行方式。咱们能够对其进行增、删、改、查,尽管就当前来讲查须要一个额外的软件来执行,可是为了实现一个用得比较少的功能,而去花费大把的时间可能就是在浪费。
git的“API”提供了丰富的增、删、改功能——你须要commit就能够了。咱们所要作的就是:
git commit
git push