动态 Web 开发项目的替代方案
最近,我有机会与位于宾夕法尼亚州费城的一家大型医疗出版公司的互联网部门合作。该部门协助公司各个营销部门处理计划发布在互联网上的内容,并协调公司网站内容的排期和位置。最终,该部门充当了费城、纽约、芝加哥的各个营销和产品管理部门与位于巴尔的摩的 IT 部门之间的渠道,IT 部门实际托管了公司的 Web 服务器。
由于这些活动,大量文件通过多种途径进入该部门。大多数通过电子邮件到达,一些通过内部邮件的软盘到达,还有一些直接上传到巴尔的摩的 FTP 服务器。这造成了一阵忙乱,因为营销人员和部门的开发人员试图组织和协调各种内容。更令人困惑的是,由于支持部门的临时更改,还提交了许多版本的文档。我的任务是开发一个临时解决方案,通过在一个中央应用程序中组织所有各种内容,来减少内容提交活动造成的混乱。我试图通过构建一个小型 Web 应用程序原型来实现这一点,该原型将用于跟踪每个项目的标题、经理、部门、部门代码和成本核算代码。
该应用程序需要快速且廉价地构建,因为采购方面的限制和不稳定的购置流程排除了在下一个财政季度开始之前提出任何新的申请。它需要运行在该部门 readily available 的标准 PC 设备上。经验丰富的系统管理员对该应用程序的技术支持将受到限制。这些应用程序需要轻量级、快速、易于使用、稳定且易于由部门员工维护,这些员工从营销而非技术的角度来处理 Web 开发。尽管这是互联网部门,但该部门活动的重点是内容协调。IT 部门管理着异地更重型的 Web 服务器和电信。
本文档将介绍我调查构建基本动态互联网应用程序所需的软件工具和可用软件工具时吸取的经验教训。将考虑商业软件和免费软件。我们将从动态 Web 应用程序元素的定义和背景开始,然后继续浏览一些可用的技术。我的目的是,本文可以作为开发人员和准开发人员在开始为其 Web 应用程序开发需求寻找解决方案时的信息起点。
高级 Web 设计人员经常使用一种名为 JavaScript 的脚本语言和一种命名网页各部分(文档对象模型或 DOM)的系统,以及 HTML 和 CSS,在页面上创建动态内容。这些效果有时称为动态 HTML 或 DHTML。但是,我将此项目的范围限制为构建一个通过与数据库交互来生成动态内容的网站。我不太关注向用户显示的效果,而是专注于构建直观的 Web 应用程序。项目脚本将在服务器端执行,而不是像 JavaScript 那样在客户端执行。此处介绍的工具和方法不会限制在以后向应用程序添加交互式或样式功能。
数据被定义为一个通用术语,意思是计算机或通信系统处理的事实、数字、字母和符号,以产生信息。在计算机系统中,这些项目通常存储在文件中。相关文件的集合是一个数据库。在这些文件中,项目的记录被组织成行和列。在这种情况下,我需要比简单的文件集合更复杂的东西。
该项目需要 RDBMS 或关系数据库管理系统。RDBMS 是一种软件包,它将数据以行和列的形式存储为表。各种表可以相互关联,以便回答最终用户提出的问题。这些问题被称为查询。RDBMS 是 Codd 在 1970 年的一篇学术论文中首次提出的概念,但在 20 世纪 70 年代中期才开始商业化。RDBMS 响应所有查询,无论这些查询是要求 RDBMS 从表中检索、添加、更新还是删除数据。
有时,为网站提供服务的 RDBMS 称为后端。最终用户将看到的网页通常称为前端。使用一种名为 SQL(结构化查询语言)的语言向后端提出问题。简而言之,如果需要处理数据,则需要某种 DBMS。目前最流行的是关系 DBMS,它们通过 SQL 响应问题/命令。
Oracle
Oracle 是一个已经成为数据库代名词的产品。Oracle (http://www.oracle.com/) 在很大程度上促成了关系数据库目前的流行。多年来,其数据库服务器因功能齐全、速度快且可靠而受到公认的尊重。Oracle 也支持 Linux,并且 Oracle 似乎致力于将 Linux 作为平台。
但是,有两个主要原因不在此项目中使用 Oracle。首先,硬件要求远远超出了用于开发和提供此应用程序的机器的功能。根据经验,需要 800MB 的磁盘空间和 256MB 的内存。其次,对于这种规模和临时性质的应用程序而言,Oracle 的成本太高了。即使对于单个服务器永久使用的五个指定用户的最低许可费,使用此软件的成本也将为(每用户 160 美元)800 美元。
MySQL
开发人员有几个开源数据库选项可供选择。在网站方面,MySQL (http://www.mysql.org/) 似乎是 Linux 社区中非常流行的选择。MySQL 是一个非常快速、多线程、多用户且强大的 SQL 数据库服务器。MySQL 现在也是开源的,最近与 VA Linux Systems 建立了战略联盟,VA Linux Systems 是一家销售和支持基于 Linux 的计算机系统的公司。MySQL 于 1996 年 11 月首次公开发布,并且一直提供源代码。MySQL 已被证明是越来越多的公司(如 SGI、ValueClick、Nortel/Insight、Tucows.com、Cisco 等)的闪电般快速且可靠的数据库解决方案。
因此,MySQL 似乎完全能够胜任本文档开头描述的简单应用程序的任务。它被认为在大型记录集方面非常快,MySQL 手册报告了生产系统拥有超过 50,000,000 条记录。此外,MySQL 开发团队和 PHP 开发团队之间的关系似乎越来越密切。这种动态组合的日益普及,加上两项技术核心开发人员的无限热情,最终促成了今年早些时候在以色列举行的一次头脑风暴会议。这促成了 MySQL 库与 PHP 4.0 发行版一起打包,此外还达成了一项协议,即在有机会时相互帮助提高产品集成的性能质量。
但是,MySQL 确实有一些缺点。其中一个缺点是在事务方面。Tim Kientzle 在他为 Dr. Dobb's Journal 撰写的 7 月文章中雄辩而简洁地讨论了事务
事务是数据库的一组相关更改。SQL 标准规定,可以向数据库发出整组更新,然后作为一个单元提交或回滚。例如,这允许您通过将资金添加到一个帐户,然后尝试从另一个帐户中减去资金,在存储在不同数据库表中的帐户之间转移资金;如果第二个更新失败,您可以一次撤消所有更改。
虽然缺少事务支持不会立即成为我们应用程序中的问题,但即使在这种性质的应用程序中,“功能蔓延”的威胁也迫使我寻求另一种支持事务的系统。此外,MySQL 对外键的支持有限。外键是关系模型的一个重要概念。它是表示关系的方式,可以被认为是将一组表粘合在一起以形成关系数据库的粘合剂。我发现 MySQL 另一个不足之处在于它不支持子查询。当开发人员在一个 SQL 语句中嵌套另一个 SQL 语句时,就会出现子查询。同样,虽然我的应用程序很小,并且可能不会因 MySQL 对外键、子查询和事务的支持而遇到太多困难,但这仍然是推动我转向替代 RDBM 的另一个原因。
PostgreSQL
我担心 MySQL 的一些问题似乎已由开发 PostgreSQL (https://postgresql.ac.cn/) 的团队解决。Red Hat 6.2 附带的 PostgreSQL 版本是 6.5.3 版。此版本已经支持事务和子查询,但它没有对外键提供广泛的支持。但是,PostgreSQL 团队最近发布了 7.0.2 版本的数据库,该版本确实支持子查询。
PostgreSQL FAQ 报告称,PostgreSQL 具有大型商业 DBMS 中的大多数功能,如事务、子选择、触发器、视图和复杂的锁定。它具有其他数据库不具备的一些功能,如用户定义的类型、继承、规则和多版本并发控制,以减少锁争用。但是,这种功能似乎是以 MySQL 的速度为代价的。与 MySQL 或更精简的数据库系统相比,PostgreSQL 在插入和更新方面速度较慢,因为它具有事务开销。
与 MySQL 类似,与 Oracle 形成鲜明对比的是,PostgreSQL 的最低系统要求很低。PostgreSQL 管理员指南报告称,虽然运行 PostgreSQL 的最低内存要求可以低至 8MB,但当将内存扩展到 96MB 或更高时,速度会有明显的提高。规则是永远不会有太多的内存。
检查您是否有足够的磁盘空间。编译期间,源树需要大约 30MB,安装目录需要大约 5MB。一个空数据库大约占用 1MB,否则它占用的空间大约是包含相同数据的平面文本文件的五倍。如果您运行回归测试,您将暂时需要额外的 20MB。
我使用的机器轻松满足这些系统要求。我不希望速度下降成为问题。我确信 PostgreSQL 解决了我对 MySQL 和 Oracle 的担忧。我决定在此项目中使用 PostgreSQL。
与数据库软件一样,Linux 平台也有许多脚本语言可用。其中几种适用于在动态 Web 应用程序中用作服务器端脚本语言。服务器端脚本语言的目的是将呈现给用户的用户界面(此处将以 HTML 编写并通过 Web 浏览器访问)与应用程序的后端或服务器系统和数据库连接在一起。
ColdFusion
考虑作为选项的商业产品之一是 Allaire 的 ColdFusion (www.allaire.com)。Allaire 产品被广泛使用,并且该环境的服务器部分可用于 Linux 平台以及 Windows NT,并提供全面支持。Allaire 还提供了非常好的开发环境作为此软件包的一部分,称为 ColdFusion Studio,它需要 Windows 9x 或 NT 平台才能运行。这两个组件都可以通过下载从 Allaire 网站获得,用于评估或购买。
ColdFusion 软件包的组件旨在支持 ColdFusion 标记语言 (CFML)。CFML 的语法与 HTML 类似,因为它有开始和结束标记,这些标记提供了超出普通 HTML 的功能。这些专用标记混合或嵌入在 HTML 应用程序或页面中。ColdFusion 服务器与 Web 服务器协同工作以拦截这些特殊标记,从而允许与数据库和服务器交互,从而提供应用程序的后端。
我对该产品和环境的印象非常积极。它似乎是一个功能非常强大的平台,易于设置和使用。似乎也有大量网站开发人员在使用该程序。我相信,在熟悉新的语言或软件产品时,与同事的随意互动通常非常有帮助。CFML 与 HTML 的相似性也使新手可以轻松快速地启动和运行。此外,ColdFusion 与 Apache 协同工作,这是它的另一个优点。
然而,缺点是,Linux 版本的 ColdFusion 服务器的系统要求(512MB RAM)超出了我可用于此应用程序的系统的功能。Allaire 网站上发布的 2000 年 7 月 17 日价格表报告称,Linux 版 ColdFusion Server 4.5 Professional 的价格为 1295 美元。基于 Windows 的开发环境将再花费 495.00 美元。如果您的应用程序预算可以承受 ColdFusion 的许可成本,则值得考虑。
Perl
在 Linux 社区中,Perl 获得的尊重几乎与任何编程语言应期望获得的尊重一样多。似乎除了用作 Web 脚本语言之外,Perl 几乎无所不能。开源 Perl 由 Larry Wall 编写,于 1987 年首次发布。Perl 的最新版本于今年 3 月发布,版本为 5.6,可从 https://perl5.cn/ 获取。
Perl 作为 Web 脚本语言是一种非常成熟且可行的替代方案。有一个庞大的开发人员社区,并且可以获得大量支持。它可以与 Apache Web 服务器紧密集成,并且几乎所有 Linux 发行版都提供它。但是,我希望找到一种更简单的解决方案,将我的网页连接到数据库后端。仅仅因为 Perl 是最明显的解决方案,并不一定意味着它是正确的解决方案。简单性标准在我决定检查 ColdFusion 时权衡了很多,并在一定程度上排除了 Perl 在这种情况下。我希望以尽可能小的学习曲线快速启动并运行我的应用程序。
PHP
PHP (https://php.ac.cn/) 是一种开源的、嵌入 HTML 的脚本语言。与 Perl 不同,Perl 最初是作为辅助系统管理的工具而诞生的,PHP 从一开始就设计用于处理网页。它似乎借鉴了 PHP 之前的许多编程语言,包括 Perl 和 C。PHP FAQ 讨论了 PHP 和 Perl 之间的差异
PHP 相对于 Perl 的最大优势在于 PHP 是为 Web 脚本编写而设计的,而 Perl 旨在做更多的事情,因此,可能会变得非常复杂。Perl 的灵活性/复杂性使编写代码更容易,而另一个作者/编码人员很难阅读这些代码。PHP 具有不太令人困惑且更严格的格式,而又不失灵活性。PHP 比 Perl 更容易集成到现有 HTML 中。PHP 几乎具有 Perl 的所有“良好”功能:构造、语法等等,而又不会像 Perl 那样复杂。Perl 是一种经过验证的语言;它自 80 年代后期就已存在。但是 PHP 正在非常快速地成熟 (www.php.net/FAQ.php#9.4)。
从这个讨论来看,PHP 似乎非常适合我正在构建的应用程序。还有一些关于 PHP 与 ColdFusion 相比如何的讨论。PHP FAQ 给出了一个很好的总结,但也指出了 Mike Sheldon 提出的两个软件包的比较。Mike 的比较 (http://marc.theaimsgroup.com/) 似乎很公正。他指出了我没有考虑过的一些 ColdFusion 的优势和功能。最有趣的功能之一是数据库交互的抽象层。在 ColdFusion 中,开发人员使用 ColdFusion 管理员来设置数据源。无论源是 Oracle 还是 ODBC 连接,都与用于与源交互的 CMFL 标记无关。在 PHP 中,我们可能要使用的每个数据库都有一组特定于所选数据库的函数。Mike 还指出,ColdFusion 与一个名为 Verity 的搜索引擎捆绑在一起。PHP 没有捆绑的搜索引擎,也没有集成的开发环境。
令我惊讶地听到 PHP 存在弱点的两个领域是错误处理和处理日期的能力。由于此应用程序的性质简单,我不认为这两个弱点会成为问题。我只打算使用一个数据库,并且每个正在考虑用于此应用程序的数据库都有一组函数。我不认为 ColdFusion 提供的数据抽象是一个优势。在最终分析中,我为此应用程序选择了四个主要组件:GNU/Linux 操作系统、PostgreSQL RDBMS、PHP 服务器端 Web 脚本语言工具和 Apache Web 服务器。
Linux 操作系统有无数的软件选项可用。所有替代方案都具有优点和缺点,这些优点和缺点源于软件为满足特定主要需求而做出的努力。我建议那些有兴趣部署这些软件包之一的人在使用一种合理的 approach 来确定哪个软件包最适合他们的需求。开发人员和顾问的价值仅部分来自他们对特定技术的掌握。他们希望通过部署信息技术解决方案来影响的特定流程的理解应该是首要关注的问题。由于有许多高质量的替代方案可用于应对给定的信息技术挑战,因此,技术专家掌握和处理所讨论项目的关键问题的能力将最终决定项目的成败。
对于我的项目,Linux、Apache、PostgreSQL 和 PHP 的组合是合适的。这种组合可能不适用于所有项目。但是,我希望您发现本文是您调查下一个项目替代方案的信息性第一步。
