我们正在考虑将Terracotta用于我们的下一个项目。我对它在不需要单独的 DBMS 的情况下提供数据持久性的潜力很感兴趣。(另见 关于使用 Terracotta 作为持久性解决方案)
软件演进的一大痛点是使现有的生产数据符合新的数据模型。对于 RDBMS,您可能会在部署时使用 SQL 更改脚本。对于 Terracotta 支持的数据,我并不清楚如何处理非平凡的进化。
Terracotta 文档中有几段关于 Class Evolution 的段落,但它似乎是特定于 DSO 的,而且相当肤浅。
- 有哪些可能的方法来处理存储在 Terracotta 中的持久数据的数据模型演化?我对非 DSO 场景(即通过 Terracotta Toolkit API)特别感兴趣。
- Terracotta DSO 和 Toolkit API 对进化类定义的反应是否不同?
- 要了解类进化的局限性,了解 Terracotta 如何表示/传达对象数据会有所帮助;有规范吗?
- 也许 OODBMS 世界中存在适用于 Terracotta 的模式演化技术?
作为一个简单的例子,假设我Car
存储了一堆对象,并且我已经将类的modelYear
字段Car
从 aString
更改为 an int
。根据文档,这不是开箱即用的。我可以想象一个解决方案,Car
在应用程序启动期间我的旧类加载器由单独的类加载器加载,然后转换为新的Car
. 这会是一个好方法吗?为什么(不是)?