Versioning

数据库系统在开发的过程中不断的演变,持续的添加新特性、修复 Bug 以及解决性能问题。最后的结果就是其二进制文件的格式也不断变化。在大部分时间里,存储引擎的版本需要同时支持不只一种的序列化格式 (比如当前的,跟之前的一种或多种格式,用来保持向后的兼容)。为了提供这个支持,我们需要知道所处理的文件属于哪个版本。

这可以以多种方式来完成,比如,Apache Cassandra 为文件名添加版本信息作为前缀。使用这种方式可以在不打开文件的前提下就知道其版本。在他的 4.0 版本中,数据文件的名字是以 na 作为前缀的,如 na-1-big-Data.db。而其更旧版本的文件则使用了不同的前缀:由 3.0 版本所写的文件使用的是 ma 前缀。

又或者将版本记录到单独的文件中,比如 PostgreSQL 将版本信息记录到 PG_VERSION 文件中。

版本信息还可以直接记录到索引文件的头部中,在这种方式中,头部的部分 (或整个头部信息) 需要使用与版本无关的格式进行编码,然后在确认目标文件的版本信息后,我们可以创建与该版本定义的读取器来处理他的内容。有些文件的格式则使用了某些魔法数字来确认其版本,这种方式我们会在稍后的 Magic Number 中讨论。