是否有惯用的方式将客户端版本控制到数据库?

时间:2018-07-12 06:27:32

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

我正在向要维护的数据库提供客户端驱动程序。数据库中有很多表,它们具有定义良好的架构。 (在这种情况下为卡桑德拉)

有时会发生一些重大更改(由于产品和系统要求而异),并且客户端将“中断”,因为从某种意义上说,他们到目前为止所执行的查询对于较新的架构而言是不正确的。

我很好奇,是否有一种好方法可以“版本化”客户端以使用相应的表?

例如,一个幼稚的实现可以将版本号添加到表名,即,对于数据库中的每个表,将版本号附加到表名。

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

有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

连同该模式一起,将创建另一个表,该表包含以下字段---> version_no,ks_name,table_name,column_name,添加/删除,is_loaded,主键(version_no,(ks_name,table_name,column_name)) 。注意:如果您只有一个键空间,则可以删除该列或表名本身可以写为ks_name.table_name。

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