8-12作业回答
来源:8-12 【总结与作业】关于加载全量索引的介绍与说明

mapper
2019-02-20
作业1:加载全量索引时,为什么要将数据库表中的数据导出到文件中,而不是直接从数据库中读取 ?
答:数据量太大的时候,从数据库中读取索引再建立索引,这样效率太低了,而且数据量太庞大的时候将索引存到内存中显然是不可取的,所以需要存到磁盘上,不过这里我有一个问题,按理来说磁盘IO的速度远小于内存访问速度,那么在项目初始化的时候读文件然后反序列化table对象,然后再建立索引,这样的效率会不会很低,文件中数据量大的话那项目初始化岂不是要很长时间?
作业2:你可以将全量数据导出的功能改写为一个微服务吗 ?需要考虑功能抽象,因为后续可能添加其他的维度扩展表。
答: 这个的话 新建子模块,
- pom中引入common和sponsor依赖,并引入starter-web,eureka-client,mysql,jpa,jdbc等依赖
- 配置yml, 包括 端口号,spring-name,jpa,datasource,eureka
- 将DumpDataService类放到该模块下,controller调用dumpAdTableData方法
作业3:广告数据之间存在层次划分,隐式的表达了数据之间的依赖关系,你能想到更好的数据结构去表达它们吗 ?
答:没想到更好的… 感觉依赖关系和索引结构的设计算是检索系统比较难的地方
1回答
-
同学你好:
非常感谢你的回答,给出的答案也非常好!下面,我对这几个问题作出解释:
作业1:加载全量索引时,为什么要将数据库表中的数据导出到文件中,而不是直接从数据库中读取 ?
当多实例部署的时候,如果多实例同时从数据库中读取全量数据,会给数据库造成巨大的压力。关于数据保存在文件中,IO 耗时的问题大可不必担心,计算处理能力肯定不是瓶颈。
作业2:你可以将全量数据导出的功能改写为一个微服务吗 ?需要考虑功能抽象,因为后续可能添加其他的维度扩展表。
你的回答已经非常好了!新建子模块,重复使用的对象作出抽象,并给出对应的 service 就可以了。
作业3:广告数据之间存在层次划分,隐式的表达了数据之间的依赖关系,你能想到更好的数据结构去表达它们吗 ?
首先,层次之间的依赖关系不能改变。但是,有些数据结构我们可以修改实现,例如地域维度方面,目前的设计只能支持省和市都提供的情况。但是,如果我想检索一个省的广告数据,就需要把各个市都列出来,这显然是不合理的。所以,可以考虑将地域索引数据重定义,支持省和市的匹配。
欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!
622024-10-20
相似问题