我正在向要维护的数据库提供客户端驱动程序。数据库中有很多表,它们具有定义良好的架构。 (在这种情况下为卡桑德拉)
有时会发生一些重大更改(由于产品和系统要求而异),并且客户端将“中断”,因为从某种意义上说,他们到目前为止所执行的查询对于较新的架构而言是不正确的。
我很好奇,是否有一种好方法可以“版本化”客户端以使用相应的表?
例如,一个幼稚的实现可以将版本号添加到表名,即,对于数据库中的每个表,将版本号附加到表名。
客户端将始终查询与该命名约定匹配的表。较新的破坏性版本将更改表名称以匹配较新的版本,并且客户端将进行相应的升级。
有没有更好的方法来解决这个问题?
答案 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字段,因为这是区分模式是一半加载还是脚本失败的唯一方法,这样就不会引发更多错误。希望能帮助到你!!