db4objects 的 Christof Wittig 和 Jerry Fiddler 访谈

作者:Nicholas Petreley

LJ:您能简单介绍一下 db4o 的历史吗?

Christof:db4o 是自 2000 年以来由 Carl Rosenberger 周围的一个小型开发者团队开发的原生 Java 和 .NET 对象数据库。与许多开源项目一样,db4o 的驱动力来自用户,他们认为迫切需要一种比基于关系范式或平面文件/序列化的现有解决方案更高效、性能更好的对象持久化解决方案。

Interview with Christof Wittig and Jerry Fiddler of db4objects

Christof Wittig

Interview with Christof Wittig and Jerry Fiddler of db4objects

Jerry Fiddler

2004 年,在该产品成功交付给少数早期客户后,我们认为它已准备好迎接黄金时期。我被邀请加入公司担任 CEO,以发展业务。我们将公司命名为 db4objects。公司总部位于硅谷。

db4objects 通过采用开源/双重许可模式(我们从 MySQL 中了解到),并通过从硅谷名人那里筹集资金,例如 Veritas 的创始 CEO Mark Leslie(以及我们的董事长);Sun Microsystems 的创始 CEO Vinod Khosla;以及 Wind River 的创始 CEO Jerry Fiddler,他于今年早些时候加入了我们的董事会,从而将 db4o 带给了大众。Jerry 今天和我在一起,以补充他对 db4objects 的见解。

LJ:什么是 db4o?您的客户最常如何使用它?

Christof:db4o 是一种可嵌入的对象持久化解决方案——由于这个术语很笨拙,我们称之为对象数据库。然而,数据库通常仅与 Oracle、Versant、AS/400——大型、单单元、服务器端解决方案以及 DBA 相关联。db4o 是一个可嵌入的组件,可帮助在分布式、多单元、客户端应用程序中持久化对象,在这些应用程序中没有 DBA——这就是为什么术语数据库是正确的,尽管在这里有点模棱两可。

目标应用程序范围广泛:设备(如复印机和消费电子产品)、移动应用程序(如送货上门系统)、打包软件(在 PC 上)和服务器端中间件,以及缓存(如铁路或管道的 SCADA 系统中)。

统一的方面是零管理、可靠性、即使在高度受限的资源下也能实现高性能,并且它必须是 Java 和 .NET 环境。

LJ:可以准确地说,db4o 市场的存在是由于 JVM 在嵌入式系统中的普及吗?

Jerry:是的。正如 Christof 所说,db4o 随 Java 和 .NET 而行。与其说是“嵌入式系统”,我更喜欢谈论“设备软件”。

传统上,大多数设备软件都是用 C 或 C++ 编写的,通常非常注重硬件而不是最佳软件实践。但是设备正变得越来越复杂,具有更多的内存、更快的 CPU,也许最重要的是,丰富的连接性。它们处理的软件和数据都变得更加复杂。软件需要提升一个档次,而 Java 和 .Net 提供了两种方法来实现这一点。RYO(自己动手)方法不再可行——它太笨重、太慢、不够敏捷,并且连接性不好。

在许多行业和应用类型中,尤其是在移动领域,您现在看到越来越多的服务器和 PC 的实践和技术被应用到小型设备上,这要归功于摩尔定律。

正是这种技术和实践的融合,使得 Java 嵌入式(以及带有 Windows mobile 的 .NET)迅速获得发展。而且,db4o 是该领域唯一优化的持久化解决方案数据库。这是我对这家公司如此兴奋的原因之一。

LJ:版本 6 的主要区别是什么?

Christof:性能,性能,性能。

LJ:就这些?

Christof:是的,大部分是这样。该领域的任何产品都应关注性能,因为这是开发人员最关心的问题。如果一个产品不关注该领域的性能,要么不是用户驱动的,要么根本没有性能。

对于新的 db4o 版本 6,不仅仅是快一点。版本 6 的响应时间最多快十倍,在某些情况下甚至快 250 倍。因此,这不仅仅是快一点,而是启用了一整套新功能(例如,复杂的 OR 查询)和应用程序(例如,对于小型设备,我们将内存消耗需求降低了高达 90%,并使其更具确定性)。

LJ:所有这些重大变化是如何发生的?

Christof:对此有一个技术性和组织性答案。

技术性答案是使用了新的 B 树索引架构,该架构首先在几个月前的 v5.5 中引入,我们可以利用它来实现这些惊人的结果。

组织性答案是将所有这些与开源联系起来的原因。我们的用户社区推动了此版本的产品路线图。他们最优先考虑的是性能,但也有许多其他不太引人注目但相关的改进,例如更快的碎片整理、新的服务器端游标技术以及改进的、不那么 Java 风格的 .NET API。

LJ:那么您是如何以用户驱动的方式协调版本 6 的?

Christof:我们从 2006 年初开始进行用户调查,收集了 1,000 多个回复和投票。然后,我们在 2006 年 7 月在伦敦举行的第一届 db4o 用户大会上与一些用户聚会,在那里我们详细说明了一些细节。在我们生产的同时,我们一直在获得反馈,有时间隔两个小时——因为这就是我们持续构建的发布周期!甚至我们的每周计划会议现在也通过 Skype 广播,因此核心开发团队始终与外部用户社区保持联系。

LJ:版本 6 中的更改有多少是商业开发人员输入的结果,又有多少是开源社区的输入?

Christof:我们不区分这一点。即使是签约的和付费的开发人员也与任何社区成员一样是我们社区的一部分。没有“我们”和“他们”;只有“我们”。这是一种协作方法。您通过功绩(想法和贡献)而不是等级、资历、头衔或政治来赢得您的发言权。

Jerry:这确实是 db4o 最令人兴奋的部分。在 Wind River,我们一直在努力寻找连接和吸引开发者社区的方法,但这始终是一个挑战。开源世界,尤其是 db4o,真正磨练了用户社区与公司之间的联系,使其以无缝且低摩擦的方式进行。

db4o 构建和培育其现在拥有 15,000 名注册开发人员的社区的方式令人惊叹。我认为这是当今在这个领域建立公司的唯一途径,而 db4objects 在言行一致方面做得非常出色。开源和社区协作不仅是一个标签,也是一个真正的承诺。用户社区是产品开发和支持不可或缺的一部分。

在我们的董事会会议上,我们感受到了这个无形的利益相关者(用户社区)就坐在那里——她对我们做什么以及如何分配资源有很大的发言权。

LJ:长期以来,我们一直听到数据库开发人员呼吁建立一个没有 SQL 开销的优秀数据库。我知道将 MySQL 或 PostgreSQL 之类的东西与基于 JVM 的数据库进行比较在很大程度上是苹果与橘子,因此如果这个问题看起来不公平,我深感抱歉。但是,您认为为什么您是第一个(如果不是第一个)倾听这种需求的人之一?

Christof:这是对开发人员而不是 DBA 的关注。我们与 DBA 及其企业 IT 组织相处不好。我们与开发人员“拥有”数据的应用程序相处得很好,就应用程序中的管理需求而言,而不是依赖于运行时数据库管理。想想您汽车中的软件。您期望您的供应商负责数据库管理,不是吗?或者,您想聘请 DBA 来整理您的中央汽车 CPU 吗?

那里有很多(关系型)数据库供应商看不到的应用程序(因为他们日复一日地与 CIO 和 DBA 交谈)。因此,尽管他们都有“轻量级”、“紧凑型”或“嵌入式”产品,但它们通常只是诱使您进入其完整服务器版本的诱惑产品。但是这些产品并未针对嵌入式进行优化,他们的销售组织也没有针对嵌入式进行优化。结果,没有一家大型供应商的市场份额超过 5-10%,而根据 VDC 的 Chris Lanfear 的研究,今天仍有 50% 的开发人员编写自己的持久化解决方案!

Jerry:将此与开源的力量相结合,这是一种全新的范式,本质上是软件的低成本生产和分发模型,然后您就可以看到,像 db4objects 这样的小型、专注的参与者(就像 Sleepycat、JBoss 或 MySQL 一样)可以在市场中产生真正的影响,尽管其最初的资源更为有限。

由于 db4o 与用户社区的联系如此紧密,因此开发人员知道用户喜欢并想要该软件。由于双重许可模式,开发人员可以立即使用该软件,而无需经过管理层和采购,至少在原型设计阶段是这样。然后,开发人员可以向管理层展示一个可工作的、可演示的项目。现在,CIO 真的没有决策可做了——这已经是一锤定音的事情了。它颠倒了整个决策过程。从 db4o 的角度来看,它实现了非常低的销售和营销成本,这反过来又反馈并促成了这种非常民主的用户和客户获取过程。与传统的软件销售和营销结构相比,这真的很可爱。

因此,从市场、开源视角和技术视角来看,时机都恰到好处。

LJ:您是否为那些想要使用 db4o 但又希望以与使用其他 SQL 数据库相同方式使用它的人提供 SQL 兼容层?

Christof:当然。但它不是一个层,而是一个称为 dRS(db4o 复制系统)的复制服务。

为什么您想在智能手机上使用 SQL 访问您的数据?您只能通过您的应用程序访问它。

但更好的是将此数据与后端系统同步,后端系统通常将数据存储在 Oracle 或 MySQL 的表中。然后,您可以在真正需要它的地方使用报表编写器或数据挖掘工具访问它。由 Hibernate 驱动的 dRS 提供与所有主要 RDBMS 的双向同步,使 db4o 完全兼容旧系统。

顺便说一句,这是社区如何推动我们产品决策的一个极好的例子。像我们之前的所有闭源对象数据库供应商一样,我们在内部考虑提供 SQL 访问层,因为人们希望在数据库评估中选中此项。销售团队经常迫使您做出不一定是最佳的决策——“我们必须有 SQL,否则我们就赢不了这笔交易。”

当我们提出这个想法时,我们的用户恳求我们不要这样做。他们不希望我们为了迎合一些根本不明白的管理者而扭曲 db4o。他们说,“使其与 dRS 数据兼容,但不要通过后门带回 SQL 的全部开销。我们不需要它!”

你能想象吗?这是开发人员对他们的管理者的一次反抗,管理者强迫他们使用根本无法让他们完成工作的工具。以前,我们 50% 的目标开发人员最终编写了自己的数据库!SQL 不好,但任何非 SQL 的东西都无法通过他们经理的办公桌获得批准。

然后开源出现了。开源使开发人员能够做出自主决策。他们现在可以向他们的经理展示一个概念验证,并展示:“看,我们可以比我们的竞争对手快 10% 出货,这归功于我无视了我们组织中仅限 SQL 的政策。”这就是真正创新的来源!

LJ:您的商业模式似乎与 Qt 和 MySQL 等事物有相似之处,它们都是双重许可的商业和开源项目。但是,我感觉也有关键的区别。您能详细说明这些区别吗?

Christof:我非常熟悉 MySQL,因为我是斯坦福大学的研究员,并且与之进行了广泛的合作。

MySQL 具有关系数据库,并且根据定义,它特别不适合嵌入式使用。大多数基于 SQL(一种 DBA 语言)的关系数据库都是为最终用户(DBA 及其 CIO)构建和销售的。RDBMS 作为 OEM 产品表现不佳,实际上,MySQL 网络订阅(一种最终用户产品)目前的收入正在超过 MySQL 传统的嵌入式业务。

我们的产品基于原生 Java 或 .NET(开发人员的语言),作为 OEM 组件销售给产品开发公司。作为开源产品,它对评估和优化很有吸引力。对于在非 GPL 产品中重新分发,人们然后选择商业许可证,该许可证没有 GPL 约束,但提供赔偿和特定的支持包。

LJ:您能给我一个 Java 代码示例,说明某人如何打开数据库表、查询表并获取一些字段吗?

Christof:哇。我只是 CEO...Jerry 你能帮忙吗?

好的,这是关于查询的内容,展示了我们如何为 Java 或 .NET 开发人员而不是 DBA 量身定制我们的产品。

这是一个纯 Java 查询,我们称之为“原生查询”,用于查询所有 20 岁以下且成绩为 A 的学生

List<Student> students = database.query<Student>(new Predicate(){
   public boolean match(Student student){
         return student.getAge() < 20
               && student.getGrade().equals(gradeA);}})

这是 JDOQL 中的等效查询,以 SQL 为例

String param = "String gradeParam"
String filter = "age < 20 & grade == gradeParam";
Query q = persistenceManager.createQuery(Student.class, filter);
q.declareParameters(param);
Collection students = (Collection)q.execute(gradeA);

你看到了什么?第一个是纯 Java,第二个是字符串。字符串是外星人。它们就像一首英语诗中的一首小小的中国诗——它们根本不适合。

原生 Java 有什么好处?我会给你两个理由,尽管还有更多

  1. 什么是类型安全——你知道 age 是数字字段吗?使用 db4o 你会知道的。IDE 会在您编写时给出类型不匹配错误。使用 JDOQL,您在运行时才会知道。因此,使用原生解决方案,您作为开发人员的效率更高。

  2. 如何重构——如果您需要将“age”更改为“_age”,使用 Java/db4o,使用您的 IDE(例如 Eclipse)只需一个简单的步骤。使用 JDOQL(以及任何其他类似的 JDBC,例如 EJBQL、HQL 以及您能想到的),您都会陷入困境,您需要手动完成(或根本不重构)。您不想对源代码进行查找/替换,是吗?

现在,不重构意味着增加错误、增加维护成本、减少软件的重用,正如我们都知道的那样。因此,归根结底还是开发人员的生产力。

使用 db4o,您可以更快地构建更好、更精简的代码。您可以五点下班回家。

不要误会我的意思:它不是万能解决方案,例如,构建连接到旧数据库的应用程序。但如果它合适,例如在移动应用程序中,那里没有旧系统,您真的不应该折断手指并引入所有根本没用的 SQL 复杂性,因为周围没有 DBA。

当然,您仍然可以将 SQL 用于合规性目的,但那时您可能会发现您的竞争对手更快、更敏捷、更精简、更少错误、性能更高、功能更丰富——使用 db4o。作为开发人员或公司,您都不想处于那种境地。

LJ:您能提到一些采用 db4o 的公司的例子吗?他们是如何使用该产品的?这种生产力是如何发挥作用的?

Christof:波音公司正在使用 db4o 为美国海军建造 P-8A 多任务海上飞机。波音公司表示,“db4o 提供了显着降低数据库管理和提高开发人员生产力的优势。db4o 帮助波音公司管理开发成本和进度,同时还降低了运营成本。”

东京的理光公司,销售额达 170 亿美元,刚刚决定使用 db4o 构建其未来的复印机型号。软件负责人 Testuo Ito 说,“db4o 为我们广泛的技术挑战和严格的质量标准提供了持久化解决方案。经过长时间的评估,我们发现 db4o 具有灵活性,可以适应我们的前沿架构,旨在提高我们在面向对象软件开发中的生产力。”

BOSCH Sigpack 是全球领先的全自动化包装技术公司,销售额达 8 亿美元,依靠 db4o 来交付其 Delta XR-31 机器人:“我们最关心的是缩短我们的调试时间。在数据后端使用 db4o 帮助我们在每个项目中实现了至少 10% 的时间节省效果。”

英特尔表示,“db4o 将使我们团队的应用程序开发变得更加容易。OR 映射器/SQL 数据库替代方案确实不允许我们完成我们需要的一切,并迫使我们扭曲我们的应用程序设计。相比之下,使用 db4o 实现是无缝的,并且在我们现有的架构内工作。”

还想要更多吗?

LJ:谢谢,这令人印象深刻。但这如何扩展?在过去的几年里,db4o 的采用率如何?

Christof:我们现在有 15,000 名注册开发人员,可能还有 2-3 倍的未注册开发人员——在短短两年内,下载量接近 1,000,000 次。到目前为止,我们已经达成了 200 笔商业设计中标交易。我们的增长率每年超过 100%。

LJ:这是一个相当快的采用率增长。鉴于新版本具有如此显着的性能提升,您预计这将在您未来的增长中发挥什么作用?我预计性能将是嵌入式系统中的一个巨大因素,因此我预计会大幅增长。但是,我是否遗漏了任何其他可能增加或减少采用率大幅飙升的因素?

Christof:性能至关重要,但范围很广。

例如,我们将为我们的客户端/服务器用户提供更好的性能。并不是说您在手机上将 db4o 作为客户端/服务器应用程序运行,而是有更多实例,其中多个(嵌入式)客户端连接到(嵌入式)数据库服务器。那里的情况很疯狂。这应该再次使我们对越来越多的用户具有吸引力。

LJ:由于您的市场大部分由嵌入式系统组成,我假设您的大多数注册用户都在他们销售的设备中使用 db4o。这意味着他们必须使用商业版本,对吗?如果我的假设是错误的,为什么?

Christof:不。

我们对嵌入式的定义——就像 IDC 的 Carl Olofson 一样——与设备不同。对我们来说,嵌入式意味着“最终用户不可见”。这是一个比设备软件更大的市场,尽管具有相似的特征。打包软件是嵌入式的一个很好的例子,但不是设备软件。严格来说,我们的 ISV 客户在 Handango 上为智能手机销售的移动应用程序不是“设备软件”,但仍然是嵌入式的。所有这些都是我们的核心市场。

在我们的社区中,我们也有最终用户,他们使用(有时“滥用”它进行原型设计)——小型系统、非营利组织、学术界。这很棒,因此我们让更多人喜欢 db4o,但有时他们会超出 db4o 设计的范围。

当有人想要重新分发 db4o 并且不想使用 GPL 来保护自己的知识产权时,商业部分就开始发挥作用了。这些人然后来找我们,寻找另一种更安全的许可选项,我们通过我们灵活的 OEM 商业条款提供该选项。他们还寻求赔偿和直接支持选项,当有人保证在 24 小时或更短的时间内回复时。

当然,我们也有 GPL 下的嵌入式用户,例如 ITAnyplace,这是一个开源移动平台,可将应用程序和内容扩展到移动设备。

任何用户都很重要并受到欢迎,因为她加强了我们的生态系统,并且是我们闭源竞争对手的损失收入。

LJ:您还有哪些其他可用于 db4o 的产品或附加组件?

Christof:我提到了 db4o 复制系统 (dRS),以提供与后端 RDBMS(例如 Oracle 和 MySQL)的兼容性。

另一个附加组件是 ObjectManager,这是一个 UI,它以完全重写的 v6.0 版本出现,其中包括许多用户对处理大型数据集的需求以及围绕数据库检查和应用程序调试的许多增强功能。

这些工具也是开源的,并且在双重许可下可用。

LJ:再次感谢您抽出时间与我们交谈!

Christof 和 Jerry:感谢您的关注和时间!

Nicholas Petreley 是Linux Journal的主编,也是一位前程序员、教师、分析师和顾问,他从事 Linux 相关工作和写作已超过十年。

加载 Disqus 评论