调度应用程序的db4o查询优化

时间:2013-01-04 22:16:07

标签: java db4o

我刚开始在调度应用程序中使用db4o,我正在寻找一种有效的方法来检索在某些日期之间没有预订的房间。

所以,我有一组Room对象,每个对象都有一个Booking对象集合(可以为空)。预订具有开始日期和结束日期。我想说'获取所有在DateA和DateB之间没有预订的房间'。

我确信我可以使用Native Query执行此操作,但由于涉及日期范围(我的理解是NQ没有优化日期范围)并且我需要非常频繁地执行此查询(每秒多次执行此操作)可能更多10,000个房间 - 其中大多数没有预订)我正在寻找更有效的替代方案。

有没有办法用SODA来表达这个? 或者更好的方法来安排我的数据模型以解决这个问题?

1 个答案:

答案 0 :(得分:0)

是的,您可以使用SODA查询

来完成此操作
Date fromDate = null ; // assign reservation start dat
Date toDate = null ; // assign reservation upto
Query query = db.query();
query.constrain(Booking.class);
query.descend ("fromDate").constrain ( fromDate ).greater().equal ().
      and (query.descend ("toDate").constrain (toDate).smaller().equal());
ObjectSet<Booking> objectSet = query.execute();

查询所有未在fromDate和toDate之间预订的房间

 Query query = db.query();
query.constrain(Room.class);
query.descend ("bookingStartDate").constrain ( fromDate ).greater().equal ().and
(query.descend ("bookingEndDate").constrain (toDate).smaller().equal()).not();
ObjectSet<Room> objectSet = query.execute();

另请参阅: Building SODA Queries