【问题标题】:Is there an idiomatic way of versioning clients to a database?是否有一种惯用的方式将客户端版本控制到数据库?
【发布时间】:2018-12-20 06:30:51
【问题描述】:

我正在为我正在维护的数据库提供客户端驱动程序。数据库有很多具有明确定义的模式的表。 (本例中为 Cassandra)

有时会出现一些重大更改(源于产品和系统要求),并且客户端会“中断”,因为他们迄今为止执行的查询对于新架构而言将是不正确的。

我很想知道是否有一种干净的方式来“版本化”客户端以使用相应的表?

例如,一个简单的实现可以将版本号添加到表名,即对于 db 中的每个表,将版本号附加到表名。

客户端将始终查询与此命名约定匹配的表。较新的破坏版本会更改表名称以匹配较新的版本,并且客户端将相应地升级。

有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: cassandra schema database-schema database-migration cassandra-3.0


    【解决方案1】:

    还可以为您的数据库添加 1 个版本和存储在您的客户端上的 1 个版本,当您进行重大更改时,您会更新数据库版本。 当客户端启动时会执行版本检查,如果版本不匹配,则可以进行自动升级。

    【讨论】:

      【解决方案2】:

      几个月前我遇到了同样的问题。我们必须根据我们的客户端应该支持的版本来加载模式。我们找到的解决方案如下:

      除了模式之外,还将创建一个包含以下字段的表 ---> version_no, ks_name, table_name, column_name, add/drop, is_loaded, primary key(version_no,(ks_name, table_name, column_name)) .注意:如果您有单个键空间,则可以删除该列或表名,可以将其本身写为 ks_name.table_name。

      然后,每当我们要加载新版本时,我们都会在该表中记录更改,当我们再次加载以前的模式时,脚本将确保旧的更改生效,以便它回滚到相同的先前版本的架构。确保更新 is_loaded 字段,因为这是区分模式是半加载还是脚本失败的唯一方法,这样它就不会再出现更多错误。希望能帮助到你!!

      【讨论】:

        猜你喜欢
        • 2014-11-21
        • 1970-01-01
        • 1970-01-01
        • 2015-12-01
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        相关资源
        最近更新 更多