我们有一个中央只读MySQL 数据库,其中包含地理数据等。它被各种项目使用。作为重构的一部分,我正在考虑建立一个数据库版本控制系统。到目前为止的粗略想法:
当前数据库是版本
1
。它位于:1.database.example.com:3306/database_1
当将来数据库结构以不兼容的方式更改时,版本号将增加到
2
,并且新数据库在以下位置可用:2.database.example.com:3306/database_2
这允许一个接一个地更新项目,从 interface with
1.database.example.com
到 interface with2.database.example.com
. 由于域名不同,因此可以使用不同的数据库服务器2.database.example.com
,甚至不基于 MySQL 的数据库服务器。
那有意义吗?是否有标准或推荐的方法来“控制”只读数据库?
一绝:你要“版”什么?接口还是数据?
对界面进行版本控制
如果你只想对接口进行版本控制,你应该(必须)管理一个单一的数据库,并在不同的接口上以不同的格式提供它。否则你会遇到一致性问题,如果你的数据应该改变(甚至地理数据改变 - 变化的罕见性使得它更容易受到一致性问题的影响,因为这种情况很少发生以至于人类往往会犯错误)。
在这种情况下,我会为不同的界面使用一个单一的数据库和视图。这更难设置,但从长远来看可以避免头痛。
另一种方法是通过 cronjob 定期复制数据,如果这种更改很少发生,这可能会浪费资源。
您还可以实现一个脚本,并以某种方式确保它在某些数据更改时始终执行。(这很容易受到人为错误的影响。)
对数据进行版本控制
如果您想对包括数据在内的所有内容进行版本控制,那么您的方法对我来说似乎很好。尽管使用另一个数据库而不是完全不同的服务器实例可能更有效。