作者:孙毓波 (AKCMS 作者)
SQLite 是一个类似Access的轻量级数据库系统,但是更小、更快、容量更大,并发更高。为什么说 SQLite 最适合做 CMS (内容管理系统)呢?并不是说其他数据库不好, Oracle、MySQL、SQLServer 也都是非常优秀的 DBS,只不过他们设计目标不同,特性不同,所以只有更适用某个应用场景,没有绝对的好坏之分。
我归纳的中小型站点的CMS的特点如下:
- 1、数据量不超过10万
- 2、日页面访问量不超过10万
- 3、 一部分网站全部生成静态页面,一部分网站实时查询数据库动态访问
- 4、 站长不懂技术,不懂得复杂的数据库维护,只会用 FTP 管理网站
- 5 、个人站点基本上是一个人管理,一般情况下只有一个人在访问后台,没有并发
- 6、 对数据库来说是读多写少,只有在站长访问后台的时候才会写入
- 7、 多运行于虚拟主机,大部分PHP主机均同时支持MySQL,小部分PHP主机需要单独购买MySQL,PHP+MySQL的主机价格较PHP主机价格高。
(以万网为例:最便宜的PHP空间780元,最便宜的PHP+MySQL的PHP空间1150元) - 8、 多数中小站点的HTTP服务与MySQL部署在同一服务器上
SQLite 的优点在中小网站CMS应用场景下表现突出:
- 1、与MySQL相比,它更彻底的免费,并且没有任何使用上的限制
- 2、非常小巧,PHP5以上版本中无需任何配置即可支持SQLite
- 3、无需单独购买数据库服务,无服务器进程,配置成本为零
- 4、整个数据库存储在一个单个的文件中,数据导入导出备份恢复都是复制文件,维护难度为零
- 5、读速度快,在数据量不是很大的情况下速度较快,更重要的是:省掉了一次数据库远程链接没有复杂的权限验证,打开就能操作
SQLite的缺点在中小网站 CMS 应用场景下被规避:
- 1、并发低 动态访问时当访问量不超过10万PV的时候,SQLite 超过 Access 的并发能力已经绰绰有余;生成静态页后更无需考虑数据库的并发问题
- 2、在大数据量的情况下表现较差 但是中小站点一般情况下数据量不超过10万,而SQlite 在 100 万数据量之下表现还不错,因为省掉了对数据库服务器的远程连接甚至会更快
- 3、写入较慢 默认配置下的 SQlite 的写入速度比MySQL慢了很多,但是 CMS 应用场景的写入操作较少。在插入新文章的时候基本感受不到慢。集中的写数据库操作只有在安装的时候会出现,不过只出现一次,可以忽略
- 4、为已有的表加索引较慢 但是在中小站点CMS中不会有这样的需求,可以忽略
- 5、无法将 MySQL 部署到与前端机不同的服务器上,但是中小站点也没有分开部署的需求
综上所述:在中小站点 CMS 的应用场景下 SQLite 能最大限度的降低建站成本,降低维护难度,又很好得规避了自身的缺点。所以我认为未来支持 SQLite 的 CMS 系统一定会大行其道。
–EOF–
Fenng 注:这是网友来稿,转载请注明本文作者。刊载此文不代表我赞同文中所有观点。其实,我觉得 Berkeley DB 或许也不错。另外,如果一个 CMS 日访问量小于 10 万,通过一些 Web 前端优化,后端的压力就会非常之小。
没想到是馒头同学的文章
馒头开发了一款akcms,我帮忙广告下:http://akcms.com/
本文转至sqlite豆瓣小组(douban.com/group/sqlite/)了,注明了作者和出处。
我也在维护着一个CMS建立的站点,有一个问题:
既使CMS对内容页进行了静态生成,也还有一个点击量的统计,这个也是需要读写的吧?
有什么好办法来统计点击量呢?
@盛传
不要实时统计,异步就可以了。
@Fenng
对程序不是很懂,但学到了这个概念。谢谢!
一直在用Berkeley DB
这个建议不错,适合才是最好的。我过几天要优化一个cms,才用的是mysql5.1.30版本的数据库,以前用的是某某公司开发的java版本的cms用的是oracle数据库。比较郁闷的是有些地方做整合后开发设计的表非常的不靠谱,需要修改啊。
bdb不行吧。那东西是hash库,做cms还是差点意思,单独做文章库还可以。
何必呢, 现在硬件已经很好了.
感谢fenng的刊登,成就感和印到《人民日报》头版变成铅字差不多。
bdb的成本比sqlite高一些:
1 他不支持SQL,只是key-value对,现有的CMS想支持BDB的话,改造成本比较高,而sqlite支持sql,一些mysql独有的特性,比如replace,DISTINCT等都支持,改造成本低,较通用
2 需要单独部署(我猜的),个人站长大部分都是虚拟主机根本没权限,就算独立主机部署的难度也较高,而sqlite是php5以上版本默认就支持的,什么也不需要做。
——————————
re:有什么好办法来统计点击量呢?
我写的akcms是这样做的,静态页面通过js异步调用php做记录,缓冲区满了之后写到库里去。仅供参考。
@孙毓波
感谢投稿。只是没稿费 :)
静态页面通过js异步调用php做记录,缓冲区满了之后写到库里去。
或者根本就不写到库里面,而是规整到另一个统计文本中。
@孙毓波
感谢您的回复!
这个”最佳”不妥,至少从技术上大概没有最佳一说吧
我记得以前MySQL的storage engine是可选SQLite的,现在不可以了吗?更免费和免费在使用上基本没什么区别。SQLite的代码是完全自由的public domain。可有几个人会为了CMS而去修改MySQL的代码?
@杜宇,您好
1 MySQL可选存储引擎我不是很清楚,没接触过,不过那样还是得有MySQL服务才行,如果有了MySQL服务而故意用SQLite存储,那就成了为了用SQLite而用SQlite,达不到降低成本的目的
2 MySQL不是免费的,按照它的协议除非应用程序是遵循GPL协议的开源程序,否则都要购买授权才可以使用。所以很多CMS实际上深究起来都是违反协议的
感谢您的回复。