菜鸟随意写写,欢迎斧正,高手勿喷。
写在前面:
动车抢票插件让GITHUB网站进入了更多人的视野,使用GITHUB搭建博客的人也更多了。
Octopress,jekyll等博客程序推陈出新,静态数据的简单程序似乎有一股复兴的味道。
不论使用纯文本(Plain Text)、二进制文件(Binary)、Xml、Json、MarkDown或者其他格式的哪一种,大致都可以归纳为静态储存。
准备用静态储存写一个小程序,收集了一点资料和比较,希望可以帮助到后来的人。
审时度势
静态储存的优势:
- 持续化存储,不依赖数据库软件环境,方便迁移任何环境。如果你的程序使用上面提到的任何一种方法进行数据存储,那么迁移的时候只需要打包全部移动,数据就跟过来了。
- 数据内容比较简单,数据比较独立,单条数据操作相对安全。
- 数据响应时间快,不需要经过层层传递,包括软件层(同源数据库)和硬件层(非同源数据库)。
- 数据和程序耦合性强,数据冗余少,尤其二进制存储时。
静态储存的劣势:
- 相对于使用正规数据库的软件程序,静态储存如果需要保持数据一致的话,多台主机或者网站数据一致性保持比较麻烦,需要把所有的静态文件都同步。
- 数量级过大,数据查询和维护不易。数量级过大,文件不能全部加载到内存中进行操作,尤其是没有索引的静态文件,查询和批量更新有效率问题。
- 静态存储如果保持多台主机数据一致,需要牺牲硬盘空间。(感觉量级比较小,可以接受。)
- 数据和程序耦合性强,导致数据和程序扩展会麻烦一点。
- 不确定的文件数量是否会引起的硬盘性能下降。
- 纯静态文件的话,内容一经展示,就不再保密。
文艺复兴,关于TXTDB
说到静态储存,首当其冲的应该是文本储存。不论你是写什么出生,应该都使用过文本储存数据的方式吧。
前些年,TXTDB很火的时候,资源还是蛮多的,但是现在活下来的程序貌似不多了,很可惜。
下面有一些看起来还是不错的TXTDB程序。(截至本文的时间):
- PHP Text DB API 强大的TXTDB,支持查添改删等操作,API强壮。
- Flat File DataBase Library 支持对象类型,API种类较多。
- Flat-file SQL 尽最大可能模拟SQL语法的PHP SQL解释器。
- Gladius DB 同样的SQL解释器,支持SQL92以及ADO。
- txtSQL 具备TXTADMIN后台的SQL解释器。
- QTxtDB Class 定长储存的TXTDB。
JSON储存
虽然XML+XSL在完全的内容结构分离上有极大的优势,但是JSON因为数据传输量更加少而代替前者涌入了人们的视线。
JSON的兴起,或多或少和WEB2.0以及前端这些个名词有些关系吧,扯远了,回归主要话题。
使用JSON储存的话,由于有对象的概念,内容十分易于扩展。
但是由于强调KV,需要定义过多关系,来确定每一个键值的含义。
- JSON说明: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
To be continued