城市数据库设计流程
城市功能
city 最高级
中国 其他州 (弄出 demo)
city 最低级
市;(限制任务的 city 为这个级别)
数据库
数据库字段
用途
定位城市:州—城市。 name, data_level,
推导出热门: 搜索次数。 中国—中国+1; 广州—广州+1;
导入数据
手动导入中国主要城市、美洲主要城市
最后
考虑如何自动导入
编写自动导入脚本
搜索各国行政区划分
其他主要大洲及国家。
如果只需要部分数据,由需求方提供最好,可以参考旅游网站的热门目的地
如果需要很多数据,通过 世界各国行政区域和城市人口 进行爬虫?
谷歌搜索 `全球行政区划分`,没有找到
谷歌搜索 `全球行政区划分 sql`,能够找到。
数据库关系
city 表关系
自联接外键关系
recruit 与 city 表关系
多对多
传递给前端
国内以及其他州的树结构
常驻城市
多对多
任务城市
多对多
搜索流程
单个city
- 传入 city=中国
- 搜索 city = City.object.filter(city=‘中国’)
- 展开 city 直到最低级,这里为中国所有城市
- 搜索含有这个城市的任务
多个 cities
- 传入 city=中国|日本
- 查找出中国,日本
- 展开中国、日本到一个 set 里面
- 含有这个城市的任务
获取 name 下级的所有城市
获取直到最后一个级别的城市。
同一个 root 下面的叶子级别也可能不相同。
限制
用户、任务中的城市级别只能选择 leaf 级别的。
这样会引起说明架构问题
缓存数据
由于要从数据库中递归查找,所以速度会很慢,要十几秒。由于这个时序性要求不高,可以使用redis做缓存。