【发布时间】:2012-06-13 19:22:51
【问题描述】:
我目前正在构建一个与酒店预订网站具有相似模型的应用程序。
目前正在考虑处理可用性搜索的方法。
我的模型看起来有点像下面:
酒店
_id
名称
说明
星级评分
地址
纬度
隆
然后我想到了一个类似这样的可用性集合:
可用性
hotel_id(如果可用性是它自己的集合)
日期
房间类型
room_max_occupancy
价格
日期将存储房间可用的一天
room_type 会是“Twin”“Double”之类的东西
room_max_occupancy 将是 2、3 等...
一个示例查询是:
6 月 1 日至 8 日入住的房间,可供 2 人入住。
对于“搜索结果”,我需要返回 hotel.name、hotel.description、hotel.star_rating。
我正在寻找为上述查询类型存储此数据的最有效方法?
可用性集合应该是它自己的集合,还是 Hotel 的子文档?
如果它是自己的集合,我是否应该将纬度添加到可用性中(以及 hotel_id)以提高搜索效率?
【问题讨论】:
-
在空间(磁盘/RAM)、插入或查找空闲房间方面效率最高?不应该有一个 Room 集合(其中可能包含可用/不可用时间跨度的列表)吗?
-
您是否关心多人同时搜索、查看空房情况,然后如果其他人抢了他们可能无法预订?
-
请注意几件事(我熟悉所讨论的域):您可能想要一个比 room_id 更细粒度的聚合来列出可用性。即:agent-offers 通常会考虑 room_id 之外的其他内容以将可用性链接到,例如:包含早餐、特殊多日(2 = 3 天)优惠等。因此,尽管 roomId 可能足以作为一种方式开始聚合可用性,它不允许您对潜在合作伙伴(例如 booking.com)扔给您的所有东西进行建模。