Python:与复杂的数据仓库交互

时间:2010-09-23 20:40:56

标签: python django-models sqlalchemy data-warehouse olap

我们一直在努力研究我们问题的全维数据库模型,现在是时候开始编码了。我们以前的项目使用了由字符串操作构建的手工制作的查询。

在python和复杂的数据库布局之间进行接口是否有最佳/标准的做法?

我简要地评估了SQLAlchemy,SQLObject和Django-ORM,但是(我可能很容易遗漏一些东西)它们似乎针对微小的Web类型(OLTP)事务进行了调整,我正在进行高容量分析(OLAP) )交易。

我的一些要求,可能与平时有所不同:

  1. 相对快速地加载大量数据
  2. 快速轻松地更新/插入少量数据
  3. 轻松处理大量行(5年内每分钟300个条目)
  4. 允许对架构进行修改,以备将来要求使用
  5. 编写这些查询很简单,但编写代码以使数据排成一行非常繁琐,特别是随着模式的发展。这看起来像计算机可能擅长的东西?

3 个答案:

答案 0 :(得分:6)

不要对你的要求感到困惑。一种尺寸并不适合所有人。

  

相对快速地加载大量数据

为什么不为此使用数据库的本地加载器?使用Python准备文件,但使用数据库工具加载。你会发现这非常快。

  

快速轻松地更新/插入少量数据

开始弯曲数据仓库的规则。除非您在谈论主数据管理以更新维度的报告属性。

这就是ORM和网络框架的用途。

  

轻松处理大量行(5年内每分钟300个条目)

同样,这就是您使用Python前端处理管道的原因,但实际的INSERT是由数据库工具完成的。不是Python。

  

轻松改变架构(以及python接口),以满足未来的需求

您几乎没有用于自动执行此功能。它肯定是“编程”的最低优先级任务。您通常会手动执行此操作以正确保存数据。

BTW,“通过字符串操作构建的手工制作的查询”可能是有史以来最大的错误。这些对于RDBMS解析器来说很难处理 - 它们比使用插入了绑定变量的查询要慢。

答案 1 :(得分:3)

我正在使用SQLAlchemy和一个非常大的数据仓库,我正在使用它来完成整个ETL过程。特别是在某些来源中我有一些复杂的转换规则或某些异构来源(例如Web服务)。我没有使用Sqlalchemy ORM,而是使用它的SQL表达式语言,因为我不需要在ETL过程中映射任何对象。值得注意的是,当我带来一些源代码的逐字副本时,我宁愿使用db工具 - 比如PostgreSQL转储实用程序 - 。你不能打败那个。 SQL表达式语言是最接近SQLAlchemy(或任何ORM用于手写SQL)的方法,但由于您可以以编程方式从python生成SQL,因此您可以节省时间,特别是如果您要遵循一些非常复杂的转换规则。 / p>

但有一件事,我宁愿手工修改我的架构。我不相信任何工具。

答案 2 :(得分:2)

SQLAlchemy肯定。与SQLAlchemy相比,所有其他ORM看起来都像是儿童玩具。特别是Django-ORM。什么是Hibernate to Java,SQLAlchemy是Python。