引言
项目进行中不可避免的两件事就是:
Erlang在设计之初就对此两件事进行了考虑,完全实现热升级。
Erlang的代码热替换特性
最近在做Live chat的项目, 基于Ejabberd开发。Ejabberd的模块管理显示了Erlang的代码热替换的特性。可以在不重启Ejabberd服务器的情况下进行模块级别代码的升级或者修改。并且Ejabberd管理界面提供了模块升级或修改的管理功能。假如需要升级某个模块,只需要将编译好的文件替换原来的文件,进入管理后台,进行升级操作。

对于PHP之类非编译类的语言,我们在需要修改代码的时候,可以直接将旧代码替换为新代码实现平滑升级,但是对于JAVA、C++之类的项目则需要停机更新。Erlang的这个特性是编译型语言的一大改进。
Mnesia如何修改现有的表结构
Mnesia是Erlang内置的分布式数据库。可以用内置函数进行数据库的操作或者用QLC进行数据CURD。我们都会经常遇到项目功能的升级,需求的增长,不可避免需要对原有的数据结构进行修改。
Mnesia提供了transform table的功能。假如不需要保留原有数据可以进行如下的数据库表的结构更新:

对于PHP/java 项目,一遍表结构都是自己设计,可以直接修改Mysql的表结构,同时对涉及代码进行更新。对于不同的PHP开发框架来说,有不同的流程,有些PHP开发框架内置了ORM特性,数据结构的修改很容易。假如没有类似特性则需要review所有的相关代码,进行修改。好在当今框架泛滥,找到合适的开发框架很简单。Python的Dojango框架由于受到Raise的影响对持续迭代开发做了很多考虑。
Subscribe in reader在此提及Drupal数据库表结构的更新,Drupal中一般用CCK做为字段管理工具。他有一个特性既是会自动的将多个相同类型的字段合并为一张新表, 但是假如此类型的字段只有一个则会存储在content表中。假如深入做Drupal开发,需要直接用SQL操作数据,不了解此特性会出很多错。


