OpenERP v6.1新特性解读 (三) 技术

内核优化

原来的osv_memory(如今名为TransientModel)作了很大改进,如今已是一个特殊的普通osv(如今名为Model),这意味着它确实存在数据库里面,可是它会在使用事后自动删除(例如某个统计计算完毕或者某些记录已经建立了)。这个改进有如下好处:python

  • 底层代码只有一个,更容易维护。
  • 具备相同的模型,这意味着约束(例如外键)都是可执行的
  • 更好的性能,数据库几乎彻底是无状态(仍然有一些缓存)

支持WSGI,能够在一个兼容WSGI的服务器上运行OpenERP server,再加上OpenERP几乎无态的特性。这意味着你能够在WSGI服务器上运行多个服务器进程:你终于能够用尽你的多核CPU!例如用 Gunicorn ,一切的维护都变得简单了,Gunicorn 将监控者进程。例如杀死一个已经挂起的进程,防止内存泄露影响系统。web

还有几件缩短建立账套时间的改进:能高效率使用框架加载翻译并写入。另外一个改进就是(转存和恢复)的账套时候的缓存。这些都在OpenERP online上实际使用过。数据库

在销售订单上作过性能测试:缓存

  • 安装一个新的英文账套
  • 安装一个新的带有语言包的账套
  • 再建立另一个新账套
  • 从web客户端读取一个合做伙伴
  • 一次读1000个订单
  • 读100x10个销售订单

计划任务的多线程处理

如今每个计划任务在后台都是生成一个线程,这样就不会由于一个计划任务在执行,就阻碍了另一个计划任务的执行。实现了在负载均衡的状况下多个服务器执行多个进程,每一个任务每次只会执行一次服务器

Unaccent

消除法语那些上面的声调,启动server的时候使用 --unaccent(对于国内用户可能不怎么须要这个 :D)多线程

给开发人员

6.1的对象自动实例化了,再也不须要显式调用
6.0.x负载均衡

class res_groups(osv.osv):
_name = 'res.groups'
_columns = {
'name': fields.char('Name'),
}
res_groups()

class res_users(osv.osv):
_name = 'res.users'
_columns = {
'name': fields.char('Name'),
'group_ids': fields.many2many('Groups', 'res.groups'),
}
res_users()

class res_groups2(osv.osv):
_inherit= 'res.groups'
_columns = {
'user_ids': fields.many2many('Users', 'res.users'),
}
res_groups2()

6.1框架

class res_groups(osv.osv):
_name = 'res.groups'
_columns = {
'name': fields.char('Name'),
'user_ids': fields.many2many('Users', 'res.users'),
}
class res_users(osv.osv):
_name = 'res.users'
_columns = {
'name': fields.char('Name'),
'group_ids': fields.many2many('Groups', 'res.groups'),
}
相关文章
相关标签/搜索