请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

8-12作业回答

作业1:加载全量索引时,为什么要将数据库表中的数据导出到文件中,而不是直接从数据库中读取 ?

答:数据量太大的时候,从数据库中读取索引再建立索引,这样效率太低了,而且数据量太庞大的时候将索引存到内存中显然是不可取的,所以需要存到磁盘上,不过这里我有一个问题,按理来说磁盘IO的速度远小于内存访问速度,那么在项目初始化的时候读文件然后反序列化table对象,然后再建立索引,这样的效率会不会很低,文件中数据量大的话那项目初始化岂不是要很长时间?

作业2:你可以将全量数据导出的功能改写为一个微服务吗 ?需要考虑功能抽象,因为后续可能添加其他的维度扩展表。

答: 这个的话 新建子模块,

  1. pom中引入common和sponsor依赖,并引入starter-web,eureka-client,mysql,jpa,jdbc等依赖
  2. 配置yml, 包括 端口号,spring-name,jpa,datasource,eureka
  3. 将DumpDataService类放到该模块下,controller调用dumpAdTableData方法

作业3:广告数据之间存在层次划分,隐式的表达了数据之间的依赖关系,你能想到更好的数据结构去表达它们吗 ?

答:没想到更好的… 感觉依赖关系和索引结构的设计算是检索系统比较难的地方

正在回答

1回答

张勤一 2019-02-20 23:25:56

同学你好:

    非常感谢你的回答,给出的答案也非常好!下面,我对这几个问题作出解释:

作业1:加载全量索引时,为什么要将数据库表中的数据导出到文件中,而不是直接从数据库中读取 ?

当多实例部署的时候,如果多实例同时从数据库中读取全量数据,会给数据库造成巨大的压力。关于数据保存在文件中,IO 耗时的问题大可不必担心,计算处理能力肯定不是瓶颈。


作业2:你可以将全量数据导出的功能改写为一个微服务吗 ?需要考虑功能抽象,因为后续可能添加其他的维度扩展表。

你的回答已经非常好了!新建子模块,重复使用的对象作出抽象,并给出对应的 service 就可以了。


作业3:广告数据之间存在层次划分,隐式的表达了数据之间的依赖关系,你能想到更好的数据结构去表达它们吗 ? 

首先,层次之间的依赖关系不能改变。但是,有些数据结构我们可以修改实现,例如地域维度方面,目前的设计只能支持省和市都提供的情况。但是,如果我想检索一个省的广告数据,就需要把各个市都列出来,这显然是不合理的。所以,可以考虑将地域索引数据重定义,支持省和市的匹配。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持! 

6 回复 有任何疑惑可以回复我~
  • 他所说的这个导出数据的微服务写个service写个controller不符合逻辑吧?我觉得应该像kafka模块那样写个runner标注服务启动时调用才对啊,前端不会额外发请求导出数据吧?这应该在服务构建后请求调用前就要开始了啊
    回复 有任何疑惑可以回复我~ 2022-12-25 10:39:14
  • 好奇慕圣的问题答案
    回复 有任何疑惑可以回复我~ 2024-10-20 20:33:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信