netTiers 数据库模式向后兼容性

Posted

技术标签:

【中文标题】netTiers 数据库模式向后兼容性【英文标题】:netTiers database schema backwards compatibility 【发布时间】:2012-02-06 23:44:27 【问题描述】:

我发现 netTiers 生成的代码依赖于精确的数据库模式,并且对变化非常无情。例如,向现有表添加一列 - 如果在表中间的某处添加一列,除非重新编译 netTiers,否则您将在运行时看到转换错误。这是因为列是按序号访问的,而不是按名称访问的。 (查看更改日志,我发现这是为了提高性能)

过去这不是问题,但在我当前的项目中,我们正在尝试构建一个零停机升级的系统。我们面临的挑战是数据库升级,如果我们可以在不影响代码的情况下更新数据库,那就太好了。

是否有人使用 netTiers 遇到过类似的问题或研究过类似的要求?

更改模板以按名称访问列是否更能容忍以前的架构版本?如果是这样,对我来说,我认为这对性能有一点影响(这里引用了 3% DataReader ordinal-based lookups vs named lookups)

【问题讨论】:

【参考方案1】:

如您所述,.NetTiers 在 DataReader 中使用基于序数的查找。让 .NetTiers 正常运行的唯一方法是始终将新列添加到现有表的末尾,并且永远不要重组表字段顺序。

通过这样做,您的 v1 代码仍将适用于在表末尾附加了新列的表,而您的 v2 代码将适用于新添加的列。

【讨论】:

以上是关于netTiers 数据库模式向后兼容性的主要内容,如果未能解决你的问题,请参考以下文章

Python 2 和 3 csv 模块文本二进制模式向后兼容

HTML 如何在以前的(IE7,IE5)渲染模式中设置IE8以实现向后兼容性

如何在先前(IE7,IE5)渲染模式下设置IE8以实现向后兼容性

具有向后兼容性的数据快照维护和开发

Schema Registry 中的向后兼容性问题和不确定性

标准模式与混杂模式