Odoo 与 Google App Engine NDB |从 postgresql 移植到 NDB
Odoo with Google App Engine NDB | Porting from postgresql to NDB
我计划将 Odoo 移植到 Google App Engine Web 应用程序。当我知道 Odoo 使用 postgresql. 时,是否可以从 Postgresql 移植数据库连接、查询和所有 db 到 NDB 以便我可以 运行 它在 Google App Engine 上?
这将是一项艰巨的工作 ;-) 我认为进行此类练习的唯一方法是查看如何重新实现 odoo ORM 引擎(为 odoo 定制),并评估这项工作。
https://github.com/odoo/odoo/blob/9.0/openerp/models.py
这是一个明确的本土 orm,体现了 relations/constraints 分组等...其中许多在数据存储中没有类似物。
因此所涉及的工作量会变得相当大。
odoo 中更高级别的抽象将取决于 orm 的模型方法,例如
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True):
"""
Get the list of records in list view grouped by the given ``groupby`` fields
:param cr: database cursor
:param uid: current user id
:param domain: list specifying search criteria [['field_name', 'operator', 'value'], ...]
:param list fields: list of fields present in the list view specified on the object
:param list groupby: list of groupby descriptions by which the records will be grouped.
A groupby description is either a field (then it will be grouped by that field)
or a string 'field:groupby_function'. Right now, the only functions supported
are 'day', 'week', 'month', 'quarter' or 'year', and they only make sense for
date/datetime fields.
....
很明显,其中大部分在数据存储中是不相关的或不可行的,直接 (groupby) 但可以在内存中完成 - 因此在您自己的 ORM 替换中。
在 ORM 中,您会看到很多计数正在进行(嗯,这在数据存储中效果不佳)。
此外,Odoo 将依赖于 RDBMS 的 locking/consistancy 模型,这与数据存储的最终一致性不同。因此,需要考虑一种基本方法。如果您创建大量祖先键来帮助保持一致性,您可能会发现会产生很多争用。那么你可能需要一些其他的锁定机制,可能是 memcache 中的 CAS。
因此您可能需要在 odoo 中寻找更高的抽象层来移植映射到数据存储的替换 ORM。我的猜测是没有统一的更高级别,但我没有看过 ;-)
我还没抬头看得更远;-)
似乎确实存在 odoo 数据结构和关系的模型,这可能意味着您可能会找到更高的抽象层并自动生成一组 类 代表来自 model/uml 或现有代码(逆向工程)。但是 none 然后处理任何可能使用 sql 的代码,直接,报告要求等......所有这些都变得更加困难,所以也许你需要一个数据存储和大查询的混合模型,和搜索应用程序。
我会找一个熟悉数据存储的人,仔细研究 Odoo ORM 和数据模型,进行可行性研究,并对核心领域的概念进行验证,以评估它是否可行,以及它是否真的有效。
祝你好运;-)
我计划将 Odoo 移植到 Google App Engine Web 应用程序。当我知道 Odoo 使用 postgresql. 时,是否可以从 Postgresql 移植数据库连接、查询和所有 db 到 NDB 以便我可以 运行 它在 Google App Engine 上?
这将是一项艰巨的工作 ;-) 我认为进行此类练习的唯一方法是查看如何重新实现 odoo ORM 引擎(为 odoo 定制),并评估这项工作。
https://github.com/odoo/odoo/blob/9.0/openerp/models.py
这是一个明确的本土 orm,体现了 relations/constraints 分组等...其中许多在数据存储中没有类似物。
因此所涉及的工作量会变得相当大。
odoo 中更高级别的抽象将取决于 orm 的模型方法,例如
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True):
"""
Get the list of records in list view grouped by the given ``groupby`` fields
:param cr: database cursor
:param uid: current user id
:param domain: list specifying search criteria [['field_name', 'operator', 'value'], ...]
:param list fields: list of fields present in the list view specified on the object
:param list groupby: list of groupby descriptions by which the records will be grouped.
A groupby description is either a field (then it will be grouped by that field)
or a string 'field:groupby_function'. Right now, the only functions supported
are 'day', 'week', 'month', 'quarter' or 'year', and they only make sense for
date/datetime fields.
....
很明显,其中大部分在数据存储中是不相关的或不可行的,直接 (groupby) 但可以在内存中完成 - 因此在您自己的 ORM 替换中。
在 ORM 中,您会看到很多计数正在进行(嗯,这在数据存储中效果不佳)。
此外,Odoo 将依赖于 RDBMS 的 locking/consistancy 模型,这与数据存储的最终一致性不同。因此,需要考虑一种基本方法。如果您创建大量祖先键来帮助保持一致性,您可能会发现会产生很多争用。那么你可能需要一些其他的锁定机制,可能是 memcache 中的 CAS。
因此您可能需要在 odoo 中寻找更高的抽象层来移植映射到数据存储的替换 ORM。我的猜测是没有统一的更高级别,但我没有看过 ;-)
我还没抬头看得更远;-)
似乎确实存在 odoo 数据结构和关系的模型,这可能意味着您可能会找到更高的抽象层并自动生成一组 类 代表来自 model/uml 或现有代码(逆向工程)。但是 none 然后处理任何可能使用 sql 的代码,直接,报告要求等......所有这些都变得更加困难,所以也许你需要一个数据存储和大查询的混合模型,和搜索应用程序。
我会找一个熟悉数据存储的人,仔细研究 Odoo ORM 和数据模型,进行可行性研究,并对核心领域的概念进行验证,以评估它是否可行,以及它是否真的有效。
祝你好运;-)