Mark Stosberg 访谈(从 Oracle/tcl 到 PostgreSQL/Perl)

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

Mark Stosberg 在 PostgreSQL 倡导邮件列表中兴奋地发布了关于最近重新发布 1-800-Save-A-Pet 网站的消息,该网站用最新的 PostgreSQL 解决方案取代了老旧的 Oracle 解决方案。我们知道我们必须与 Summersault, LLC 的 Mark Stosberg 谈谈。

techdocs: 嗨,Mark,我想我们想知道的第一个问题是如何参与这个项目,以及 PostgreSQL 在其中扮演什么角色?

Mark Stosberg: 我是 Summersault, LLC 的首席开发人员。我们是一家专注于数据库驱动的网站的网站公司。在 2003 年秋季,1-800-Save-a-Pet.com 与我们签订了合同,重新开发并扩展他们现有的网站。

当时,它是用 tcl 语言编写的,使用 AOLserver 和 Oracle 提供服务。该项目利用了现有的开源代码库,称为“Arfdigita”,它包含他们想要的基本功能。Arfdigita 基于当时蓬勃发展的更广泛的工具包,Arsdigita 社区系统。考虑到可用的代码和情况,它当时是一个很好的选择。

在 Summersault,我们的标准工具包大不相同。从一开始,我们就使用 Perl、PostgreSQL 和 FreeBSD 作为我们的基础。我们建议将整个网站用 Perl 重写。我认为客户多少了解 tcl 并没有像 Perl 那样流行,而且很难找到专注于该范式的程序员。

   Facts & Figures:
   Primary database server:
   Dual 3 Ghz Intel processors
   FreeBSD 4.10
   3 GB RAM
   PostgreSQL Version:
   7.4.3
   Middleware:
   Apache/ mod_Perl

我必须说,既然我们有机会改变范式,我们也将其视为取代 Oracle 的机会。首先,它不是开源的,这对我们来说是一个重要因素。我想不出任何 Oracle 提供而 PostgreSQL 没有提供的功能。

我还发现 Oracle 更难处理。举个例子:我只是想获得遗留数据库模式的转储,以便我可以查看它。在 PostgreSQL 中,这非常容易:只需使用 pg_dump --schema_only。当我关于如何在 Oracle 中执行类似操作的研究没有结果时,我咨询了一位当地的 Oracle 顾问。他给了我一个小脚本,它生成了类似的东西——他也不知道是否有内置的方法来实现这一点!

techdocs: 必须考虑 MySQL 会在某个地方进入等式,你是否花时间研究过他们的产品?

Mark Stosberg: 我们确实考虑过使用 MySQL 作为数据库。虽然我们更喜欢 PostgreSQL,但预计该网站将处理比我们迄今为止构建的任何网站都多的流量,而且 MySQL 仍然享有速度快的声誉。

虽然我们没有找到理想的“PostgreSQL 与 MySQL”比较,但我们确实听到了一些我们找到的资源中的普遍共识:如果 PostgreSQL 和 MySQL 之间存在速度差距,则差距很小,而且在某些情况下 PostgreSQL 可能更快。

我有一些使用 MySQL 的经验,发现它功能不足,而且还遇到了这里记录的一些怪异之处:http://sql-info.de/mysql/gotchas.html

我们有信心 PostgreSQL 足够快,可以满足这种要求苛刻的应用程序,因此我们选择了它。我们已经知道它具有强大的功能集,非常稳定,文档齐全,易于使用和管理。

techdocs: 你提到客户理解你想从 tcl 切换到 Perl,他们是否对从 Oracle 切换到其他数据库解决方案有任何保留意见?你如何说服他们使用 PostgreSQL?

Mark Stosberg: 我和另一名工作人员花了几个小时研究 PostgreSQL、MySQL、Oracle 和 MS-Access 的相对优势。我们最终制作了这份文档

http://support.summersault.com/why_postgresql.html

它仍然有点粗糙:例如,我们审查的具体版本没有记录。随着时间的推移,它可能已经变得有点不准确了。

我们的直接联系人本身并不是技术人员。但是,他们确实有一些其他 IT 顾问来帮助做出像这样的关键决策。这些是我们真正需要说服的人。

有了我们的摘要报告,PostgreSQL 并不难推销。从那以后,我们的数据库选择一直没有问题。作为开发人员,我们一直对它很满意,客户也对它满足他们的性能期望感到满意。

techdocs: 一旦决定使用哪些新技术,听起来你把大部分时间都花在了重写应用程序代码上,而不是移植它;这是否是一个公平的评估?

Mark Stosberg: 是的。项目开始时,我们认为第一阶段将是使用当前范式复制当前功能。当我们与客户进行更多咨询时,我们发现他们真正想要的是相当不同的——与现有系统相比,有很多增加、减少和更改。最后,我怀疑选择重写并没有浪费任何时间。

我刚刚使用了程序“sloccount”来比较旧代码库和新代码库的大小。旧代码库包含大约 135,000 行代码。我们的重写代码不到 37,000 行。这减少了近 100,000 行,仅为原代码库的四分之一!我认为新解决方案将更容易维护。:)

这种尺寸缩减不能简单地归因于从 tcl 转换为 Perl。以前,该网站基于一个大型工具包,他们只使用了其中一小部分功能。尽管如此,其中一些代码是相互关联的,导致了整体复杂性。

此外,我们正在使用来自 CPAN 的许多 Perl 模块,这些模块不包括在该计数中。

techdocs: 你是否发现使用 Perl/PostgreSQL 组合来重现任何东西特别困难,而使用 Oracle/tcl 会更容易处理?

Mark Stosberg: 没有。使用 Perl,我们可以利用来自 CPAN 的预先存在的优秀模块来帮助我们完成工作。没有 Oracle 概念难以在 PostgreSQL 中重现。

techdocs: 说到预先存在的模块,你们是否需要使用任何“contrib”和/或外部 PostgreSQL 模块,例如 PostGIS、Tsearch2 或 Slony?

Mark Stosberg: 来自“contrib”的“earthdistance”包是我们搜索“您附近的宠物”的核心。我很容易忘记它,因为我们从 PostgreSQL 7.0 开始就一直在使用它,而且使用起来毫不费力,效果很好。:)

在我有机会在 MySQL 中实现一个“经销商定位器”应用程序之前,该应用程序可以利用这种地理距离函数。如果没有它,构建起来要困难得多,而且我认为它的扩展性不如将这种函数编译到数据库中。

复制支持是我们研究的数据库要求之一。我们发现 PostgreSQL 在这里有多种选择。但是,我们还没有需要实现复制来支持负载。我们有一台功能强大的双处理器 RAID 服务器,目前运行良好。

我很高兴知道 PostgreSQL 的复制选项在我需要它们的时候就在那里。

techdocs: 我一直认为开源软件的基石之一是它从开发和支持角度为你提供了大量的选择,让你可以获得你需要的任何数量的资源。你获得 PostgreSQL 支持的经验是什么?

Mark Stosberg: 我们实际上从未需要正式支持 PostgreSQL。我们从 6.5 版本开始使用它,发现它非常可靠,文档质量很高。

当我们需要帮助时,我们只需在其中一个邮件列表中询问,就获得了非常好的结果和快速的回复。有一次,在我向其中一个全球列表询问后,我收到了来自 Nick Fankhauser 的回复,他就在街对面。他的业务也依赖于 PostgreSQL。(Nick 维护 PostgreSQL 和 JDBC 常见问题解答:http://www.fankhausers.com/PostgreSQL/jdbc/)。

很高兴知道我们可以获得本地支持。我相信我们所在的城市和县政府也正在使用 PostgreSQL,当地医院也在使用。

如果我们以后需要正式的外部支持,我知道 PostgreSQL 网站上有一份其他 PostgreSQL 顾问的清单,如果需要,我们可以与他们签订合同。

techdocs: 嗯,了解你对 PostgreSQL 的使用以及它是如何帮助 1-800-Save-A-Pet.com 的员工真是很有趣。对于可能正在考虑从 Oracle 切换到 PostgreSQL 的其他人,你有什么最后的建议吗?

Mark Stosberg: 这是技术性的,但可能会有所帮助:我们必须弄清楚如何将数据从远程机器上的 Oracle 传输到本地机器上的 PostgreSQL。我们知道该过程将是交互式的——数据转换最初会失败,然后进行改进并重新启动。

我们也不想在远程机器上安装 PostgreSQL,该机器仍在生产环境中用于遗留网站。我们的解决方案是将数据放在远程机器上的 SQLite 中。SQLite 转储文件可以直接导入 PostgreSQL。

这使我们能够更快地工作,因为我们在改进事物时不必通过网络与两个不同的数据库进行通信。