查看: 6663| 回复: 11
跳转到指定楼层
上一主题 下一主题
收起左侧

[题目讨论] Yelp 的搜索设计

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
Yelp里location、comments的增加应该远远小于搜索。所以应该定位是读频繁的分布式系统。

据查,该公司的tech stack是LAMP和ELK。

加减用户和商家的讯息当然非关系型数据库莫属。

MYSQL可以做基于LONGITUDE和LATITUDE的distance search,可以按照Quad Region来shard。当然Quad Region应该均匀(非连续)分布在多个DB cluster里,不过感觉城市的变迁不太容易控制,极容易就会造成shard的分布变得极其不均匀。

所以我认为更好的方法可能是把Quad Region放到NoSQL里。Cassandra、Mongo或者HBase一类。按照Region的GeoHash ID字符串翻转作为KEY。wx5ew9ue 变成 eu9we5xw。每个Region里面放入所有的商家(包括其tags)。

QuadTree的大小也会有变化。农村或者野外可能很大,都市会分的很小很细。大都市的繁华地带会分的尤其细致。尤其是有的摩天大楼里面商家很多就更会要求region的分布不是大小均匀的。

QuadTree可能需要记录特殊情况,比如特殊的EDGES的关系,这样一条大河隔开两岸,或者山上山下,或者国境线,或者岛屿内陆,YELP的推荐可能会有变化。

地点的search应该通过quadtree查找相邻的region,得到region里的符合tag的所有企业后,和从MYSQL前的cache里得到的其它信息整合后送给用户。




用户的点赞和comments可以异步进入关系型数据库。

同时title,description,和comments可以加入搜索引擎比如ElasticSearch。文字的搜索前做些words的处理。



评分

参与人数 3大米 +4 收起 理由
Williem + 1 很有用的信息!
jackxpeng + 2 很有用的信息!
sizem + 1 赞一个

查看全部评分


上一篇:分布式🔒
下一篇:系统设计手绘:Design Instagram
推荐
zsz1990ustc 2019-12-22 00:38:23 | 只看该作者
全局:
到底是用geohash还是quadtree? 看到不同版本用的不同。
如果yelp数据同时写入ELK的话,ElasticSearch本身就用geohash。

回复

使用道具 举报

推荐
jackxpeng 2019-9-27 05:46:42 | 只看该作者
全局:
"加减用户和商家的讯息当然非关系型数据库莫属。"
你是说 “加减用户和商家的讯息当然非   关系型数据库 莫属。” 还是 “加减用户和商家的讯息当然   非关系型数据库 莫属。”???

我想你是说NoSQL?

回复

使用道具 举报

推荐
 楼主| 14417335 2019-7-16 01:28:03 | 只看该作者
全局:
chenld 发表于 2019-7-15 12:18
可以详细的解释一下吗? 我看懂了每个字,但是真的看不懂意思啊

主要是希望便于sharding。如果key的头几个字符过于单一化,那么sharding的时候就会出现负责单一化的key的server压力过大。
回复

使用道具 举报

🔗
tank_z 2019-4-1 06:42:14 | 只看该作者
全局:
用户的点赞和comments可以异步进入关系型数据库。

为什么点赞跟comments要放入关系型数据库而不是放NoSQL?
想引申另外个问题,像youtube这种like跟view数目更新频繁的,放在RDBMS合适吗?
回复

使用道具 举报

🔗
 楼主| 14417335 2019-4-1 07:48:29 | 只看该作者
全局:
tank_z 发表于 2019-4-1 06:42
为什么点赞跟comments要放入关系型数据库而不是放NoSQL?
想引申另外个问题,像youtube这种like跟view数 ...

主要是觉得量不大,还有moderation的问题。
如果每个comment的who when都放入关系型数据库,假设comment不是太多的话,写入RDBMS还是可行的。
赞的次数归并与一个int就可以了。
comment需要写成一条记录。有删除的问题。比如用户贴广告的。阿拉伯女遗孀重金求子,请电。。。

如有不同思路还望展开说说。
回复

使用道具 举报

🔗
yangliu0510 2019-4-24 14:28:29 | 只看该作者
本楼:
全局:
赞!
回复

使用道具 举报

🔗
chenld 2019-7-15 23:26:14 | 只看该作者
全局:
"按照Region的GeoHash ID字符串翻转作为KEY"----------可以解释一下为何要翻转吗
回复

使用道具 举报

🔗
 楼主| 14417335 2019-7-16 01:04:25 | 只看该作者
全局:
chenld 发表于 2019-7-15 10:26
"按照Region的GeoHash ID字符串翻转作为KEY"----------可以解释一下为何要翻转吗

目的是为了key的多样性。不至于集中。
回复

使用道具 举报

🔗
chenld 2019-7-16 01:18:23 | 只看该作者
全局:
14417335 发表于 2019-7-16 01:04
目的是为了key的多样性。不至于集中。

可以详细的解释一下吗? 我看懂了每个字,但是真的看不懂意思啊
回复

使用道具 举报

🔗
Williem 2019-10-2 20:49:58 | 只看该作者
全局:
jackxpeng 发表于 2019-9-27 05:46
"加减用户和商家的讯息当然非关系型数据库莫属。"
你是说 “加减用户和商家的讯息当然非   关系型数据库  ...

按照中文来讲难道一般不应该是 "非你莫属" 吗
额....难道是 "非你 莫属"?
2333333

而且distance search也应该是rdb
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表