Onyx

作者 Michael Kraehe

Onyx 是一个用于数据库应用程序快速原型设计的工具。Onyx 背后的理论是,任何应用程序都由以下部分组成:

  • 用于存储临时数据的内部表

  • 用于查看和编辑日期的掩码

  • 内部表和世界其他部分之间的事务

事务可以绑定到菜单、输入字段、功能键或光标当前行的更改。因此,如果用户选择一个菜单项或通过按回车键离开输入字段,事务将自动启动。

与其他 4GL 不同,Onyx 不会隐藏您的环境 (UNIX/Linux),而是为您提供 shell 的全部功能。例如,这就是我们如何使用 Onyx 表中的数据结合 shell 命令的功能来打印信件的。

export table to pipe {
        awk | mailmerge | groff -Tps -mm | lpr -Pps; }

也可以使用 shell 命令导入表,如下例所示:

import table from pipe {
        tar xvf /dev/rmt0 | sed "s/ *-> */->/" | sed "s/  */     /g"
        | sed "s/[^]*$/&  &/"; }

当然,也可以导出或导入到 SQL 语句。

Onyx 需要一个 SQL 数据库来完成实际工作。因此,可以在您的网络中的任何地方使用 SQL。我通常在 Sparc II 上使用 Informix,或者在家里的 Linux 下使用 Ingres。

数据库命名为 database%engine@host.domain。目前支持的引擎有 GNU-Awk、Informix、Ingres 和 SHQL。

最后一个 (SHQL) 是一个巧妙的 shell 技巧,它通过 shell 解析 SQL,并通过 awk 完成工作。当然,这非常慢。包含它是因为它是我 Onyx 项目想法的来源。此外,您需要 SHQL,因为它用于管理 gawk 的模式定义(创建表等)。

当前系统

我为什么编写 Onyx?

我在 91 年底开始关注 Linux,自从 MCC 95c+ 之后,我就抛弃了 Xenix,开始在家中使用 Linux。随着 TCP/IP 进入 98p1 内核,我开始考虑使用 Linux 作为数据库的客户端。

在 92 年冬天,我为一个名为“Wasserwirtschaftsamt Bremen”(不莱梅水务局)的项目开始了“Verwaltung von Anlagen mit Wassergefaehrdenden Stoffen”(有害水物质设施管理)。他们有一台西门子 MX 500,速度非常慢,以至于有人想进行查询时,可以卷一支烟并抽完。

我告诉他们“客户端/服务器计算是唯一的解决方案”,他们安装了我建议的硬件,包括一台 Sparc II 和 8 台 PC。考虑到 Linux,我给这些 PC 配备了 8MB 内存和 Tseng 显卡。正如我后来看到的那样,这是一个正确的想法。

Sparc 的 Informix SE 和 NET 与 MS-DOS 的 Informix 一起交付。旧数据库和程序的移植只是 DIN 到 MS-DOS 之间的字符转换工作。(在德国,我们总是有变音符号问题。)

硬件安装如上所述。它的速度足够快,可以在一秒钟内完成查询。不幸的是,MS-DOS 系统几乎每小时崩溃一次!我们不知道是 MS-DOS、PC-NFS 还是 Informix 导致了这个问题。但我们知道是时候寻找一个稳定的操作系统了。当然,Linux 是我的选择!

作为一项临时措施,MS-DOS 系统被用作终端,通过 telnet 连接到 Sparc,并在 Sparc 上运行作业。查询时间增加到最多半分钟,我开始使用 Linux 开发一个更好的解决方案。

两个月后,我安装了第一个 Linux 99p6 版本。现在它运行的是 99p9。我现在已经赚了足够的钱 (6,000 德国马克) 来维持未来两年的生活,我现在正在重写我在第一个月做的这个快速黑客程序。由于不莱梅州环境部门还有更多的 Wasserwirtschaftsaemter(水危害物质设施管理)对该程序感兴趣,我将继续该项目,赚更多的钱,并将 Onyx-4GL 提供给互联网社区。Onyx 是 Linux 的杀手级应用吗?大型数据库是赚钱的地方。所以让我们谈谈钱。在我看来,MS-DOS 作为数据库客户端的可能平台是一个糟糕的选择。我看到两种可能的解决方案:

  • 使用大型机来完成这项工作

  • 使用 Sparc 或 $CO Unix 系统作为客户端

两者都是非常昂贵的选择。使用 Linux,您只需要一台廉价的 PC 即可在客户端/服务器计算中完成这项工作,而且您不必为每个客户端向 Unix 供应商支付大量资金。

另一种可能的场景是需要从 MS-DOS 平台升级入门级数据库。让我们考虑以下配置:

  • 首先是一台基于 486 的系统,配备 Linux 和 [大学] Ingres 作为服务器

  • 如果有旧的 286 系统,它们可以用作终端

  • 较新的 86 可以升级以在本地运行客户端

  • 随着数据库的增长,您可以毫无困难地在商业 Unix 上使用更快的(商业)SQL 作为服务器

  • 如果以下情况属实,DOS 应用程序可以通过 QuarterDeck DeskView-X 在任何 Linux 盒子的 xterm 中运行,而不会导致数据库崩溃:

  • DOS 应用程序确实是必要的

这样的配置可以卖给任何公司,而且成本低于 Novell Netware。如果公司在不同的城市有多个地点,则可以在普通调制解调器线路上镜像事务,这在使用远程 Novell FS 的传统数据库中是不可能实现的。

未来计划

正如我在上面写到的,我现在正在重写整个程序,我希望在 12 月完成。请查看 Usenet 群组 comp.os.linux.announce 以获取我的帖子。

新版本将包括以下功能:

  • 使用面向对象的解析器生成器重写

  • 包括 awk 和 ingres 作为 Linux 的本地服务器

  • 备份存储和转发作为分布式事务的模型

  • 一些示例应用程序

  • 希望有一些文档(真正的程序员不写文档,他们写程序。代码很难写,应该很难读。)但是,我已经扩展了解析器生成器,以为它生成的每个解析器生成手册页。这是一个开始。

  • 我正在考虑在我的事务监视器上添加一个 RFC,以便我可以了解应该将哪些功能添加到 rd 版本中

在哪里获取?

如果您在德国,可以在 ftp 站点 wowbagger.pc-labor.uni-bremen.de 或 olis.north.de 上找到 Onyx。Onyx 也已发布到 Usenet 上的 alt.sources。否则,您最好的选择是使用 archive 来查找副本。

Michael Kraehe 住在德国的偏远地区,并像一位老无政府主义者一样命名他网络中的机器,因此会找到诸如 durruti 和 kropotkin 之类的名称的机器。他理想的计算机是一台掌上电脑,配备 17 英寸显示器、以太网和 SCSI,这样他就可以把它和他的狗一起放在他 12 岁的 SR500 摩托车上。

加载 Disqus 评论