100M 内存怎么读取 1G 文件并统计重复数据
传统方式是使用一个 Map,将数据的值存储到 key 上,出现的次数存储到 value 上,但是现在数据量大可能没有重复就会出现内存不足。
解决方式
将数据切片成 1024*1024 的 1M 大小,这样解决了大小问题。然后遍历将切片数据,将出现的数据和值的 key 和 value 存储到磁盘上,每次对比变更刷新磁盘数据。当然性能一定比在内存计算要慢
订单延迟取消
- 定时轮询取消
- 定时任务轮询查询数据库要取消的订单
- 简单、适合小公司的单体业务
- 加大了服务器的压力、延时不准确、业务量大不推荐
- 采用时间轮询机制
- 将要取消的订单放到时间轮上,时间轮执行任务的适合会处理时间轮上的任务
- 相比上面方案提升性能
- 没办法持久化,服务重启要重新录入需要放到时间轮上订单数据
- MQ
- 采用 MQ 的消息延迟机制处理任务,底层采用的也是上面的时间轮询
- 销峰填谷,提升服务器性能
- 需要而外的服务
为什么 MySQL 使用 B + 树,Mongodb 使用 B 树
- MySQL(关系型数据库)用 B + 树:核心适配 范围查询、排序 需求,B + 树所有数据存于叶子节点,且叶子节点按顺序链表连接,范围查询 / 排序高效;非叶子节点仅存索引(不存数据),单节点能容纳更多索引,减少磁盘 IO 次数,契合关系型数据的结构化查询场景。
- MongoDB(文档型数据库)用 B 树:核心适配 随机读写、灵活文档查询,B 树每个节点既存索引也存数据,找到索引节点即可获取完整文档,随机读写更快;且 B 树节点空间利用率高,能更好适配 MongoDB 中文档(可能体积较大、结构灵活)的存储需求,减少跨节点查询开销。
正文完
发表至: PM
2025-09-26