day06-小结

6-1 HashMap和ConCurrentHashMap的区别是什么?  ConCurrentHashMap底层结构在1.7和1.8有什么不同

        HashMap和ConcurrentHashMap是Java中的两种不同的哈希表实现。

        HashMap是线程不安全的,适用于单线程环境,而ConCurrentHashMap是线程安全的。

        在JDK1.7中,ConCurrentHashMap主要利用Unsafe操作+重入锁ReentrantLock+分段锁来保证线程安全。

        JDK1.8中,ConCurrentHashMap进行了一些改进,引入了CAS操作和synchronized来提高并发性能,取代了所分段技术。

6-2 假设你有一批历史积分数据要存储,数量在kw条左右 存入mysql 你的方案是什么  

        存储千万条的历史积分数据到mysq,需要考虑数据库设计、性能优化和数据导入等方面; 对于数据库的海量数据存储,方案有很多,常见的有分区、分表、分库、集群。

        在我的项目中我采用的是分表,以每个赛季为基准进行分表,水平分出不同的表,每张表中存入对应赛季的数据; 在查询时按照赛季查对应的表即可。

       这是我对于海量数据存储到mysql的方案。

6-3 请你说一说你的排行榜功能是如何实现的

        我们项目中排行榜是主要根据积分实现的,主要分为实时积分榜和历史积分榜。

实时积分榜由于查询量比较大,我们选择存在redis,使用其Zset结构,将日期作为key,将用户id和积分作为value,将积分作为分数从而实现自动排行。

        历史积分榜由于数据比较大,查询量不算很高,我们选择存在MySQL,在MySQL中为了防止单表数据量过多,我们采用了分表设计方案,具体来说就是一个赛季放在一张表里,这样等查询的时候根据赛季标识查询,只要查一张表即可。

6-4 历史赛季积分是如何生成的

        历史赛季积分简单来说就是将Redis中的实时榜单信息写入到MySQL数据库中。在每月1号凌晨,定时将Redis中数据写入MySQL数据库,我们使用XXL-JOB来定时完成

        XXL-JOB分为三个任务,首先,执行创建上个月的数据表,成功后,读取Redis数据,写入MySQL数据库,最后,清空Redis中的缓存。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值