非关系型数据库定义

2012年1月9日

当我们开始撰写《NoSQL精粹》这本书时,我们遇到了一个棘手的难题——我们到底要写些什么?NoSQL 数据库究竟是什么?目前还没有对这个概念的明确定义,没有商标,没有标准组织,甚至没有宣言。

这个词最初出现在2009年6月11日由 Johan Oskarsson 在旧金山组织的一次非正式聚会上。[1]在会议上,来自 Voldemort、Cassandra、Dynomite、HBase、Hypertable、CouchDB 和 MongoDB 的代表进行了演讲。这个词很快就流行起来,很少有人会认为只有在那次会议上提到的数据库才能被称为 NoSQL。

事实上,这个名字本身就有一个微妙之处:许多 NoSQL 的倡导者说,它并不意味着对 SQL 说“不”,而是意味着“不仅仅是 SQL”。在这一点上,我认为将单个数据库与 NoSQL 倡导者所认为的未来生态系统区分开来是有益的。当我们说“x 是一个 NoSQL 数据库”时,我认为将 NoSQL 解释为“不仅仅是”是愚蠢的,因为这会使这个词毫无意义。(那么你就可以理所当然地说 SQL Server (比如) 是一个 NoSQL 数据库。)所以我认为最好说“NoSQL 数据库”是一个“非 SQL”数据库。你应该将 NoSQL 生态系统单独解释为“不仅仅是”——尽管我更喜欢用多语言持久化来描述这种用法。[2]

即使排除了这个问题,定义 NoSQL 数据库仍然并非易事。任何不使用 SQL 的数据库都符合条件吗?那么像IMSMUMPS这样的老式数据库技术呢?没有 SQL 的关系型系统(比如早期的Ingres)呢?如果有人设法将 SQL 接口连接到最初的七个数据库之一,会发生什么?

因此,在我们的书中,我们认为 NoSQL 指的是最近涌现的一批特定数据库。这些数据库有一些共同的特征,但没有一个是定义性的。

  • 不使用关系模型(也不使用 SQL 语言)
  • 开源
  • 设计用于大型集群
  • 基于21世纪网络属性的需求
  • 无模式,允许在没有任何控制的情况下向任何记录添加字段

虽然我已经习惯了软件行业定义的模糊性,但我承认,看到又一个模糊的定义,我的心都凉了半截。但重要的是,这些数据库为我们在未来几十年构建应用程序的方式提供了一个重要的补充。缺乏明确的定义对它们未来的成功来说,只不过是一只蚊子叮咬而已。

注释

1: 虽然这是我们现在使用的“NoSQL”一词的起源,但这并不是人们第一次使用“NoSQL”这个词。这个词最初是在90年代后期被用作一个开源关系数据库的名称,该项目由 Carlo Strozzi 领导。这个名字并没有引起太多关注,而且除了术语上的巧合之外,与今天使用的“NoSQL”没有任何关系。

2: 如果我们采用“不仅仅是”的解释,那么我们应该写成“NOSQL”而不是“NoSQL”。我几乎总是看到它被写成“NoSQL”。