在这里和周围阅读了几篇文章后,我意识到开发团队中的数据库版本控制实际上非常重要。
直到现在我一直在使用一个简单的dump whole database 每次有更新,如果只有一个表被改变有时我们可以只转储单个表然后重新导入。不是最好的,但它工作得很好,对于附加更改,我们还没有遇到任何问题。
现在,我在我正在处理的项目的 git 存储库中保存了一个 .mwb(Mysql Workbench 图表) 文件。
那我也用dbv用于 schema management,以及 git,每个分支都根据项目命名,并且运行良好。这使我能够对原理图更改进行版本化,并能够还原或回滚。
但是,表中包含的数据呢?如何维护?也许我最好还是坚持使用旧方法。我了解具有相同数据库结构但不同数据的项目很好,但是具有需要版本控制和管理的特定数据库数据的站点呢?
此外,对于需要更改数据库的已部署站点的基础又如何,这怎么可能是无缝的。有些人建议使用更新/更改脚本,并且在默认值等情况下效果很好。但是,如果我在需要更改每个网站数据库并保持数据完整的网站平台上进行了更改,该怎么办?
最佳答案
我主要从事业务应用程序开发和配置管理方面的工作。您的问题代表了这种环境中的挑战;例如,当您升级 Microsoft Word 时,您不需要立即将所有文档从 doc 更改为 docx。并且文档甚至具有更简单的结构全关系数据库。
商业应用不是这样;用户跳过发布,对数据模型进行未经授权的更改,系统需要继续运行并提供正确的数字...
我们为自己的应用程序(最大的应用程序大约有 600 个表)使用自行开发的 CASE 工具,其中包括分支/merge ,但该方法也可以手动完成。
数据模型可以用结构化的方式写下来。例如,作为表内容(CSV 将加载到具有元数据的表中)或作为检测正在使用的版本并在丢失时添加列和表的代码,包括重要的迁移。
这甚至允许多个用户同时更改数据模型。
当您使用自动检测时(例如,我们使用名为“verify_column”而不是“add_column”的调用),这甚至可以实现独立于客户开始升级的版本号的平滑迁移。这样的过程分析要更改的表并发出正确的 DDL,例如 alter table t1 add col1 number not null 或 alter table t1 modify col1 not null 当该列已经存在但可以为 null 时。
对于 Oracle 和 SQL Server,我可以为您提供一些示例过程。在 MySQL 中,我会使用客户端语言对此进行编码,最好是独立于操作系统以允许安装在 Windows 和 Linux 上运行。如果您有这方面的经验,也许可以使用 Apache Ant。
我们将表格分为四类:
类别“S”(种子数据)的表内容置于版本控制之下。我们通常将这些作为元数据注册到我们的案例工具中,然后命名为“数据集”,但您也可以使用例如 Microsoft Excel 甚至代码。
例如,在 Excel 中,您会有一个种子数据行列表。在 A 列中,您可以输入一个 Excel 函数,例如 =B..&"|"&C..& "|"& ... 连接所有内容并使其适合由加载程序工具加载。
例如在代码中,您可能有这样的调用:
verifySeed('TABLE_A', 'CODE', 'VALUE')
Excel 有点难以在版本控制下允许多个用户同时更改内容。使用代码的方法非常简单。
请记住还要添加功能以删除过时的种子数据。例如,通过明确列出过时的种子数据或自动删除表中存在但上次安装未触及的所有种子数据。
关于mysql - 数据而非架构的数据库版本/变更控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977688/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_