业务背景:我们的open服务会从第三方获取到需要的源数据,将源数据进行业务整理,然后调用adapter服务进行数据推送。之前数据量都在一万以内甚至更少,所以没有遇到数据量过大导致服务重启问题,任务是后台定时任务对性能需求不大。
灰度机器资源:2核2G (后面升到4G)
问题:现某客户的明细账数据一月超二十几万条,直接干爆服务器
解决思路:使用mysql数据库和MQ
mysql存储源数据,通过MQ通知adapter服务读取mysql数据进行推数操作
问题:mysql数据性能瓶颈问题,批量插入几十万数据很慢
新的解决思路:使用MongoDB做中间数据存储
结果:批量插入两百多万数据,无丝毫压力
MongoDB介绍:
Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。
虽然是NoSql数据库,但也最接近关系型数据库
特点:
高性能、可扩展、易部署、易使用,存储数据非常方便
面向集合存储,容易存储对象类型的数据
重要概念:
数据库–MongoDB 中多个文档组成集合,多个集合组成数据库。一个MongoDB 实例可以承载多个数据库。它们之间可以看作相互独立,每个数据库都有独立的权限控制
集合–是一组文档,类似于关系数据库中的表。集合是无模式的,集合中的文档可以是各式各样的。例如,{“hello,word”:“Mike”}和{“foo”: 3},它们的键不同,值的类型也不同,但是它们可以存放在同一个集合中,也就是不同模式的文档都可以放在同一个集合中
文档- -MongoDB 中数据的基本单位,类似于关系数据库中的行(但是比行复杂)。多个键及其关联的值有序地放在一起就构成了文档
springboot使用MongoDB:
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
添加配置
spring.data.mongodb.uri=mongodb://192.168.10.41:27017/lps
#192.168.10.41为我的ip地址 27017为Mongodb端口号 lps是数据库 按需更改即可
添加实体类然后在注入MongoDB模板类,即可操作MongoDB
@Autowired
private MongoTemplate mongoTemplate;