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毫秒