Linux 版 (精华区)
发信人: netiscpu (说不如做), 信区: Linux
标 题: 如何避免重复劳动
发信站: 哈工大紫丁香 (Tue May 18 08:02:19 1999), 转信
《Linux公报》……让Linux更富魅力!
---------------------------------------------------------------------------
-----
如何避免重复劳动
By Larry Ayers 帆译
---------------------------------------------------------------------------
-----
序言
最近一段时间,有很多软件公司计划把他们的产品移植到Linux上,在我们惊喜之
余,很容易忽略了那些作为每种Linux发布都带的小工具。这些工具大都是一些小程序
的GNU版本,例如awk,grep,sed。回溯到Unix刚开发的时候,它们被到处使用。它们
有着特殊的功能,当把它们链接在一起,并让数据通过管道互相传输的时候,它们会变
的非常有用。通常一个shell环境就象是它们运行的母体。 有时一个软件是随另一
个操作系统带的,它作为一个独立的部分被移植到Linux上,而没有利用任何已经存在
的工具,而这些工具的使用可能会减少软件大小和内存的使用量。偶然碰到一个懂得利
用Linux和系统自带的工具的软件是很高兴的。Bu是一个备份程序,NoSQL是一个ASCII
表关系数据库;它们的共同之处是它们的用法都很简单,但是却是能非常有效的完成它
们的工作。
---------------------------------------------------------------------------
-----
用bu备份shell脚本
对于很多独立运行的单用户机器来说,在Linux系统上给无数的文件做一次备份没
有必要。如果你有一份最近的Linux发布的光盘和光驱,那么通常备份配置文件和个人
文件到软盘或其他可移动介质上是需要的。在一台多用户的服务器或一台商用机器上,
情况就变的比较复杂,不能代替的文件的数量使得这个简单的方法不切实际并且太花费
时间;在这种情况下,Unix上的传统方法是使用cpio或其他的文档工具把文件拷贝到磁
带上。虽然这两年硬盘的价格一落千丈,容量也越来越大,但是可靠的磁带机可储存的
巨大数据如果用硬盘来装,花费也是非常之巨,有时花费在保护数据上的资金比计算机
的价值还高。 Vincent Stemen开发了一个叫bu的小巧的备份工具,它是基于shal
l的,并且非常好的使用了诸如cp和sed这样的标准Linux工具。bu不是备份到一个磁带
或其他的流设备上,而是被设计成为在另一个文件系统上做一个镜像,这个文件系统可
能放在另一个单独的硬盘上。
Bu仅仅是一个带有几个配置文件的12Kshell程序。它非常好用;把这个特点列表和
其他的备份工具作个比较:
检查时间戳,仅备份新的或更改过的文件
可以聪明的处理链接(link)
写日志文件
可以忽略mount上文件系统的目录
简单的包含或排除文件和目录的说明书
Bu的早期版本广泛的使用cpio,但是由于新目录的允许,cp现在成为了这个工具的
主要引擎。cp -a可以用来成批的拷贝整个文件系统到一个新的位置,但是链接就不得
不手工处理,这很费时间。而且这也不能自动的包括或排除特殊指定的文件和目录;b
u使用两个配置文件,/usr/local/backups/Exclude 和 /usr/local/backups/Include
来显示这个信息。
一个小巧方便的工具不能完全代替传统的磁带备份系统,但是它的作者用bu作为基
本的备份策略,包括备份几台开发用机器和几G的数据。bu可以从这个网页得到;关于
这个工具的详细的资料可以读一读该发布带的说明。
---------------------------------------------------------------------------
-----
NoSQL关系数据库
Carlo Strozzi(意大利Linux社团的一个成员)开发了一个关系数据库管理系统(RD
BMS),该系统使用tab分隔的ASCII码表作为它的数据格式。NoSQL是Walter W. Hobbs(R
AND组织的一份子)开发的RDBMS的后裔,叫做RDB。Revolutionary Software卖的商业产
品/rdb很相象,但是使用了更多的C代码,因此速度更快。 Carlo Strozzi就他开
发NoSQL的动机是这麽说的(摘自一个文档):
有时我发现我自己写一些依赖于简单数据库管理工作的应用程序。很多商业数据库产品
通常都是很贵的,并且都是把很多偶然才用的功能一起打包。其实我们周围也有很多非
常不错的免费的数据库,但是它们太倾向于提供比我的需要多的多东西,并且缺少在s
hell级上的与NoSQL靠近。显然,用解释型语言来写(Shell,Perl,AWK)的NoSQL并不是最
快的DBMS,至少不会总是(很大程度上依赖于应用程序)。 一本标题为A 4GL Lan
guage的书很好的描述了数据库系统的原理,这本书是 Evan Schaffer和Mike Wolf著的
,他们是Revolutionary Software的创始人。最初发表于1991年3月的Unix Review杂志
上;NoSQL文档行包括一个Postscript的版本。这里是摘要: 在UNIX上由很多数据库系
统可用。但是几乎所有的数据库系统都是离开了UNIX的强大环境之外的软件监狱。很多
都是为其他非UNIX的操作系统而开发的。因此它们的开发者在开发的时候会很少利用U
NIX的功能,而是直接写它们所需要的功能,而不是考虑如何利用操作系统。因此导致
数据库系统非常大,而且复杂,这些都会降低整个系统的性能,特别是当它们运行于多
用户的环境下的时候。 UNIX提供了数百个程序,这些程序可用管道很容易的链接在一
起来完成任何你能想象的到的功能。从其他系统带来的程序和理论会在用户和UNIX中筑
起一道墙,把UNIX的威力抛到一边。
在UNIX环境中,用几个关系操作符扩展的shell是第四代语言是很合适的。
对于任何一个想知道为什么Linux软件和其他主流操作系统使用的软件不同的人来
说,读一读完整的文章是很值得的。从这里你也可以知道为什么GUI软件最近会开始变
的通用。 NoSQL集中了上述几个观点。Walter W. Hobbs的RDB和NoSQL的一个主要
的不同就是NoSQL大量地使用awk来处理工作,而这些工作在RDB中使用perl来做的。Aw
k是一个专门的工具,它使用内存很少,并且由于数据管道是关系型数据库的基本元素
,因此需要反复调用它们的解释程序,NoSQL不会占用太多的系统资源,这一点在多用
户环境中尤其重要。
在把这个包安装到/usr/local/lib下的一个叫nosql的新子目录中后,它会由如下
的子目录:
awk
包含几个awk脚本,它们用于大多数的表处理工作。
doc
包含了Postscript和HTML的完整的NoSQL的文档,这个和Schaffer和Wolf在Unix Revie
w中的文章的Postscript版本一样。 mylib
一个空目录,以后用于放新的脚本和程序。
perl
用来执行其他NoSQL功能的perl脚本。
sh
shell脚本,用于包装awk和perl脚本的。
这个目录在600k以下,相当多的部分是文档。
在安装完文件之后,在使用数据库以前,下一步要先设以下三个环境变量。下面三
行是我的.zshenv文件的三行(bash用户应该把这三行放到.bash_profile文件中): ex
port NSQLIB=/usr/local/lib/nosqlexport NSQSH=/bin/ash
export NSQAWK=/usr/bin/mawk
Carlo Strozzi推荐使用ash,而用功能更加强大的bash或zsh;ash使用更少的内存
。在使用NoSQL的时候,由于shell被重复的调用,因此在速度有明显的加快,内存用量
也减少了。 由于包中没有代码,NoSQL可以运行于任何有awk和perl的机器上。换
句话说,数据库不是以Linux为中心的。ASCII格式的数据表也是非常好移植的,用文本
编辑器或通用的文件系统工具就可以搞定。通过输入输出重定向(如管道,STDIN和STD
OUT)数据可以从表中取出。唯一的数据数量的限制就是取决于运行NoSQL的机器,内存
的多少和处理器的速度是限制因素。
顾名思义,NoSQL不是一个SQL数据库,对于不懂SQL的人来说,NoSQL更加合适。我
根本就不懂SQL,但我发现NoSQL很容易学。所有的命令都是作为nosql脚本程序的参数
来执行的。这是一个NoSQL表的例子:
Name Freq Height Season
---- ---- ------ ------
laccaria 27 6 Fall
lepiota 5 8 Summer
amanita 42 7 Summer
lentinus 85 5 Spring-Fall
morchella 45 6 Spring
boletus 65 5 Summer
russula 75 4 Summer
用tab来分隔相临的字段,在短线分隔行的短线组间相等的空格也必须用tab分开。
这种表格式也可以用列格式来代替,上面的表可以用西面这个命令转换成这种表格式:
nosql tabletolist < [filename]
结果是这样的:
Name laccaria
Freq 27
Height 6
Season Fall
Name lepiota
Freq 5
Height 8
Season Summer
Name amanita
Freq 42
Height 7
Season Summer
Name lentinus
Freq 85
Height 5
Season Spring-Fall
Name morchella
Freq 45
Height 6
Season Spring
Name boletus
Freq 65
Height 5
Season Summer
Name russula
Freq 75
Height 4
Season Summer
如果上面的表的名字叫做pilze.rdb,那么下面的这两个命令可以检查出这个文件
是表格式的还是列格式的: nosql istable < pilze.rdb
nosql islist < pilze.rdb
另一个命令:
nosql edit < pilze.rdb
它会在编辑器中打开这个文件,编辑器是在EDITOR环境变量中指出的(通常缺省的
设为vi)一个表格式的文件会被自动转换为竖行列格式以易于编辑,当你退出编辑器的
时候会自动转换回去。当文件被存盘或关闭NoSQL时会自动校验格式的合法性,并且给
出有错误的行的行号。对格式正确性的校验不仅仅只是卖弄学问,各种处理和提取数据
的NoSQL操作符都需要能够迅速的从其他数据中分出数据头,以及从其他的数据字段分
离出所要的字段,tab符就是这些操作的依据。
一共有四十多种功能操作可用,其中的一些是用于提取或从新排列数据字段的另外
一些是用于产生报告的。它们的名字或多或少都是一些助记符,例如inscol和addcol,
用来向表中插入一列,它们分别在左手或右手边。其他的操作符用来做索引和搜索表。
典型使用的例子(如把NoSQL命令链接到管道)都包含在了文档中。 作为一个开放
源码的软件,很难说有多少人或组织在使用它。在一封电子邮件中,我问Carlo Stroz
zi要一个现实世界中使用NoSQL的例子,他说了几个公司,其中有几个是意大利公司。
Carlo Strozzi在IBM的意大利分公司工作,他开发了几个基于NoSQL的web应用程序;这
里有三个公开的web页:
Fortune companies and people profiles
Classifieds - this is in Italian
Car classifieds, in Italian
NoSQL的最新版本可以从这个FTP站点得到。
---------------------------------------------------------------------------
-----最后修改于1998.10.29 星期四
---------------------------------------------------------------------------
-----
版权所有 (C) 1998, 帆
出版于第34期《Linux公报》1998年11月 中文版第一期
---------------------------------------------------------------------------
-----
---------------------------------------------------------------------------
-----
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.531毫秒