【发布时间】:2014-01-31 10:21:32
【问题描述】:
我有一个类似于以下的数据模型:
Location 1-----*<> Vacation <>*------1 TravelAgency
<>
|*
|
|1
Airline
在sqlalchemy中以正常方式实现:
class Vacation(Base):
__tablename__ = 'vacation'
id = Column(Integer, primary_key=True)
location_id = Column(Integer, ForeignKey('location.id')
location = relationship("Location")
travel_agency_id = Column(Integer, ForeignKey('travel_agency.id')
travel_agency = relationship("TravelAgency")
airline_id = Column(Integer, ForeignKey('airline.id')
airline = relationship("Airline")
class Location(Base):
__tablename__ = 'location'
id = Column(Integer, primary_key=True)
data = Column(Integer)
class TravelAgency(Base):
__tablename__ = 'travel_agency'
id = Column(Integer, primary_key=True)
data = Column(Integer)
class Airline(Base):
__tablename__ = 'airline'
id = Column(Integer, primary_key=True)
data = Column(Integer)
由于需要多个连接,在包含数亿个对象的数据库中分析假期太慢了。在用尽了使用数据库配置选项加速连接操作的选项之后,我现在尝试使用数据库触发器来维护与其聚合连接的假期的物化视图。
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'vacation_materialized';
column_name
--------------
id
location_id
location$data
travel_agency_id
travel_agency$data
airline_id
airline$data
现在我正在权衡如何从这个视图重建假期、旅行社和航空公司对象。一种选择是使用 sqlalchemy 核心查询 Vacation_materialized 表,然后解析行并“手动”构造对象。是否有任何我应该研究的 ORM 功能可能会产生更“优雅”的解决方案?
【问题讨论】:
标签: sql sqlalchemy materialized-views