7-11总结与作业

来源:7-11 【总结与作业】关于广告数据索引的设计与实现的介绍及作业

慕容勇琪

2020-12-05

作业1:ConcurrentHashMap、ConcurrentSkipListSet都是 JUC下针对线程安全所实现的数据结构,在广告检索系统中针对频繁的检索来保证数据的安全性,在检索系统这类存在并发过程的项目中,不推荐将其替换为HashMap、HashSet。
作业2:在district上 省市都是String 而且市属于省以下 add方法能不能就是添加一次省的一条记录再添加一次市的记录 这样子可以单独查找针对省的或者针对市的 不过这样子感觉就很容易导致作业4的问题而且在delete中一旦删除市的索引就得删除对应省的索引,就可能出现要传两个字段,简单构思一下 针对这种数据结构 要么对delete方法进行重构,要么还得额外添加一个map用来存储省市关系 或者用其他类型的数据结构,这类问题到时候我会在设计前端检索平台的时候找老师请教一下的
作业3:如您在视频中所说,DataTable是一个针对我们定义检索服务的一个缓存类 ,或者说是在检索服务类与ioc容器之间定义的一个工具类,这个类能让我们更加方便的提取到我们所需要的检索服务的bean对象,我大概的理解。
作业4:暂时构想是使用redis,以这章来说的话,可能会出现索引过多造成内存溢出(虽然我也不确定会不会),这样子的话 ,后期代码可以在检索系统启动后初始化全量索引后将所有的全量索引全部存放至redis中,然后应该就可以抛弃掉dataTable 而使用redistemplate从redis缓存中获取对应的索引了。
如果回答的有问题和漏洞的话请老师指正一下。

写回答

1回答

张勤一

2020-12-07

同学你好:

    作业1:这里有个误区,“广告检索系统中针对频繁的检索保证数据安全性”,这里其实是不对的,因为检索并不修改数据,所以,如果仅仅是检索,那么,换成 HashMap、HashSet 当然也是没问题的。最主要的原因是监听 Binlog 的过程中,不断的在更新索引数据(而这些操作是多线程的),所以,需要使用并发数据结构;

    作业2:其实,你这里说到了重点,district 信息都是使用 String 类型去存储的,这里其实可以做很好的优化。你可以定义字典表,使用 int 去存储这些字段以及它们之间的关联关系。包括在比对方面,int 的效率也会比 String 快好几倍,会有很大的性能提升;

    作业3:DaaTable 确实是一个缓存类,这个你的理解是没问题的;

    作业4:确实如此,如果广告数据量非常的大,放到本地的 JVM 里面肯定不合适,我们需要考虑使用分布式缓存。那么,Redis 就是很好的缓存系统。但是,此时,需要考虑广告索引数据结构的序列化和反序列化问题,效率会比本地 JVM 数据结构慢很多。


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

2
0

Spring Cloud微服务架构 设计实现广告系统

广告营销系统,未来大中型企业的标配

2136 学习 · 927 问题

查看课程

相似问题

11-9作业回答

回答 1

7-11作业

回答 1

3-10 作业

回答 1

作业回答

回答 1