本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 [署名 4.0 国际 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/deed.zh) 本文作者: 苏洋 创建时间: 2013年03月31日 统计字数: 2451字 阅读时间: 5分钟阅读 本文链接: https://soulteary.com/2013/03/31/renaissance-static-database.html ----- # 文艺复兴,静态存储 菜鸟随意写写,欢迎斧正,高手勿喷。 [![2013-03-31_122325](https://attachment.soulteary.com/2013/03/31/2013-03-31_122325.png "2013-03-31_122325")](https://attachment.soulteary.com/2013/03/31/2013-03-31_122325.png) ## 写在前面: 动车抢票插件让GITHUB网站进入了更多人的视野,使用GITHUB搭建博客的人也更多了。 Octopress,jekyll等博客程序推陈出新,静态数据的简单程序似乎有一股复兴的味道。 不论使用纯文本(Plain Text)、二进制文件(Binary)、Xml、Json、MarkDown或者其他格式的哪一种,大致都可以归纳为静态储存。 准备用静态储存写一个小程序,收集了一点资料和比较,希望可以帮助到后来的人。 * * * ## 审时度势 ### 静态储存的优势: 1. 持续化存储,不依赖数据库软件环境,方便迁移任何环境。如果你的程序使用上面提到的任何一种方法进行数据存储,那么迁移的时候只需要打包全部移动,数据就跟过来了。 2. 数据内容比较简单,数据比较独立,单条数据操作相对安全。 3. 数据响应时间快,不需要经过层层传递,包括软件层(同源数据库)和硬件层(非同源数据库)。 4. 数据和程序耦合性强,数据冗余少,尤其二进制存储时。 ### 静态储存的劣势: 1. 相对于使用正规数据库的软件程序,静态储存如果需要保持数据一致的话,多台主机或者网站数据一致性保持比较麻烦,需要把所有的静态文件都同步。 2. 数量级过大,数据查询和维护不易。数量级过大,文件不能全部加载到内存中进行操作,尤其是没有索引的静态文件,查询和批量更新有效率问题。 3. 静态存储如果保持多台主机数据一致,需要牺牲硬盘空间。(感觉量级比较小,可以接受。) 4. 数据和程序耦合性强,导致数据和程序扩展会麻烦一点。 5. 不确定的文件数量是否会引起的硬盘性能下降。 6. 纯静态文件的话,内容一经展示,就不再保密。 * * * ## 文艺复兴,关于TXTDB 说到静态储存,首当其冲的应该是文本储存。不论你是写什么出生,应该都使用过文本储存数据的方式吧。 前些年,TXTDB很火的时候,资源还是蛮多的,但是现在活下来的程序貌似不多了,很可惜。 下面有一些看起来还是不错的TXTDB程序。(截至本文的时间): - [PHP Text DB API](http://sourceforge.net/projects/flatfiledb/) 强大的TXTDB,支持查添改删等操作,API强壮。 - [Flat File DataBase Library](http://sourceforge.net/projects/ffdb-php/) 支持对象类型,API种类较多。 - [Flat-file SQL](http://sourceforge.net/projects/fsql/) 尽最大可能模拟SQL语法的PHP SQL解释器。 - [Gladius DB](http://sourceforge.net/projects/gladius/) 同样的SQL解释器,支持SQL92以及ADO。 - [txtSQL](http://sourceforge.net/projects/txtsql/) 具备TXTADMIN后台的SQL解释器。 - [QTxtDB Class](https://code.google.com/p/qtxtdb/) 定长储存的TXTDB。 * * * ## JSON储存 虽然XML+XSL在完全的内容结构分离上有极大的优势,但是JSON因为数据传输量更加少而代替前者涌入了人们的视线。 JSON的兴起,或多或少和WEB2.0以及前端这些个名词有些关系吧,扯远了,回归主要话题。 使用JSON储存的话,由于有对象的概念,内容十分易于扩展。 但是由于强调KV,需要定义过多关系,来确定每一个键值的含义。 - JSON说明:[http://www.json.org/json-zh.html](http://www.json.org/json-zh.html) - PHP函数:`json_encode`/`json_decode`  - 相关文档:`[http://cn2.php.net/manual/en/book.json.php](http://cn2.php.net/manual/en/book.json.php)` (PHP 5 >= 5.2.0, PECL json >= 1.2.0)  * * * ## XML存储 前些年跨平台终端的利器,尤其搭配XSL的展示,数据内容华丽分离。 - PHP函数: `xml_parser_create` (PHP 4, PHP 5)  - 相关文档:`[http://cn2.php.net/manual/en/book.xml.php](http://cn2.php.net/manual/en/book.xml.php)` 经典例子:早些年的射手字幕网   * * * ## 二进制 使用二进制可以最大化节约静态储存消耗的硬盘空间,但是会因为固定的结构体影响程序扩展(其实也不是事...) byte级的CPU消耗和文本处理的CPU消耗待比较。  * * * ## MarkDown markdown成于html,但是并非为html而生。 优秀的标记语法,良好的可读性以及多种语言的转换工具,让markdown现在炙手火热,只需要一个markdown parser类就可以使用markdown来进行文本储存。 你可以看看下面这货: [http://nebm.ist.utl.pt/~glopes/discount/doc/Discount/MarkdownDocument.html](http://nebm.ist.utl.pt/~glopes/discount/doc/Discount/MarkdownDocument.html)       * * *   To be continued