[电影订票] 一些疑问

回看完了电影订票的视频之后有以下的疑问,希望老师有空的时候可以解答一下。

  1. 在设计图的右侧我们画了5个不同的DB,但是在讲到存储的时候却是用的Table。这里想和老师确认一下,设计图中的5个DB其实应该是一个DB中的5个Table吗?还是确实是5个DB,但是一个DB只含有一个Table?这道题选用了SQL数据库,所以感觉5个Table放在一个DB也是一种选择?不知道老师在面试的时候是倾向于看到哪种方式。
  2. 在末段讨论到搜索流程的时候老师给出了以下的步骤:
    2.1 根据地理位置搜索电影院(Super Venue)
    2.2 每个电影院列出有票的电影(Movie)
    2.3 3. 每个电影里显示有票的场次(Event)
    我对这个流程不是很理解。
    2.1我的理解是用户一般是根据地理位置搜电影院的,所以我们从Super Venue Table中以geohash找到相关的电影院。
    2.2 不是很能理解。这里的Movie指的是Movie Table吗?在PPT里面讲到Movie Table只存了关于一个电影的metadata,不太能理解为什么有了电影院之后就能从Movie Table里面知道一个电影院有哪些有票的电影了
    2.3 可以理解,感觉是有了电影院和电影之后找到该电影在一个电影院有哪些场次
    另外想问一下,如果搜索流程是用Super Venue Table里的geohash的话,那么为什么我们还要在Events Table里面加geohash?
    我对于搜票的流程是这样理解的,不知道是否正确。直接根据Events Table里面的geohash先搜到相关的events,再对这些events过滤。比如用户想搜神奇女侠,那么就只拿movie id是神奇女侠的events。
  3. 利用geohash做sharding的话会有热点问题吗?比如订演唱会的票。因为一场演唱会只在一个地方进行,所以query全部都是指到一台机器上的,我们需要担心这个问题吗?
  4. 对于秒杀系统的优化。想问一下如果是秒杀一场演唱会,有上万张的票,那么这里应该怎么优化呢?课上说到缓存只用做读,不用做写,避免数据不一致的问题。那么当秒杀演唱会开始的时候感觉会有非常多的写写到数据库中,会不会直接打挂数据库?还是说对于这种数量很大的秒杀活动就是一开始直接引入消息队列,大量的写全部写到队列里面,然后数据库再根据自己的情况慢慢读?

问题有点多,谢谢老师!

  1. 指的是一个DB里有多个Table。
  2. 谢谢指出,这张搜索流程的课件写的有问题,像课上说,直接根据带 Geohash 的 Event Table 搜索就可以了,一步到位。你的理解是对的。
  3. 会有热点问题,所以 Geohash Sharding 的数据库或服务一般需要定期 load balance,把过热的地区的 load 分配到别的机器上,重新划分边界。一场演唱会不至于让数据库宕机,过大的地区的所有演唱会才是问题。
  4. 秒杀系统一开始就引入队列,所以写的流量是被限制的。这是秒杀系统的特点,从服务角度上,买票更加 async,需要等一等才会拿到结果,返回速度不如普通购买来的快。