【发布时间】:2018-08-29 23:37:24
【问题描述】:
我正面临设计一个酒店网站的预订系统的情况,该网站可以处理成千上万的酒店房间及其可用性。类似于 Expedia 网站。
此可用性需要存储在本地,我需要查询这些酒店房间的可用性。
到目前为止,我已经达到了以下结构:
- room_type 的划分,将是其特征的组合,例如是否有景观,或房间中的最大人数,例如:with view/3 people 将是一个单独的类型,而其他类型将是:有视野/4人,无视野2人,有视野/4人等\
- 每个房间都将分配给一个 room_type 用于在前端进行演示。例如:我不会显示单个房间记录(例如:房间 201),但我会显示我有该类型的可用房间。
- 所以我会有一个房间“table”和一个 room_type“table”,每个房间都有一个类型。
- 然后是从今天到未来 6 个月的房间(行)和日期(列)矩阵。
其中 1 表示该日期有空房,0 表示已预订。因此,如果要检测某个日期范围内的 room_type 是否可用,我必须:
- 此类型的每个房间;
- 扫描所需日期之间的所有列;
- 如果有房间在该行中没有找到 0,则表示该房间可用,因此表示该房间类型在该日期范围内可以显示为可用。
在上表中,假设日期范围为 2017 年 10 月 10 日至 2017 年 10 月 14 日(美国格式),唯一可用的房间是酒店 C 的 101 号房间。
然后我可以为客户预订该房间,因此客户在入住期间无需更换房间。
我的问题是:
- 是否有任何存储器可以在内存中容纳像这样的大矩阵? (MySQL、Redis、PostgreSQL、Cassandra、MongoDB 等)
- 如果我应该使用 RDBMS,应该使用哪种?我应该使用传统的 RDBMS 吗?或者这种“类矩阵结构”是否更适合另一种新型 NoSQL 数据库。
- 这些巨大的高访问量网站是如何构建其数据的“矩阵式结构”吗? (例如:Expedia、Booking.com、Trivago 等)或者是否有更好的方法可以更快地查询日期范围?
我担心现在没有选择正确的结构,并在以后网站需求量大且房间数量更多时偶然发现性能问题。
谢谢。
【问题讨论】:
标签: database-design architecture nosql scalability database-performance