微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spring boot集成mongodb 分片解决大数据存储问题

由于项目中涉及到某张表存在超额大数据记录集成分片过程:

  • 项目结构:
    • spring boot ---2.1.0.RELEASE

    • mongodb-plus-spring-boot-starter
  • mongodb版本:3.0.6

首先下载Mongodb 这边使用的是windows版的,liunx版本网上有很多怎么分片配置,先把文件包拷贝几份

原理基本看图就能明白

具体实现:

  • config.bat:
%cd%\mongodb-3.0.6-config\bin\mongod --dbpath=%cd%\mongodb-3.0.6-config\bin\datas\data --logpath=%cd%\mongodb-3.0.6-config\bin\datas\log\mongo.log --port 2222 

pause
  • mongos.bat(configdb 配置为config配置):
%cd%\mongodb-3.0.6-mongos\bin\mongos --port 1111 --configdb 127.0.0.1:2222

pause

其他shard均参照config.bat (shard1->127.0.0.1:3333,shard2->127.0.0.1:4444,shard3->127.0.0.1:5555)

先启动除mongos的mongdb,最后启动mongos

  • cmd进入mongos的/bin目录-------
mongo 127.0.0.1:1111/admin
  1. 连接上mongos 
  2. 添加分片
    db.runCommand({addshard:"127.0.0.1:3333",allowLocal:true})
    依次将shard2,shard3添加进mongos
  3. 开启数据库分片
    db.runCommand({"enablesharding","需要分片的数据库名"})

     

  4. 设置片键

片键是分片的关键,有范围分片,hashed分片(随机的分配),组合分片(组合分片是比较好的一种分片的选择,好的组合分片可以同时解决热点和随机读IO问题),标签分片(比如对于一些日志非查询文档,可以通过标签将其只插入到某个分片中)

这里选用的是组合分片

db.runCommand({"shardcollection":"xx数据库.xx数据表","key":{"字段":1,"字段":1}})

至此已经完成全部的配置-----查看配置状态db.printShardingStatus()

  • spring boot配置
  1. 我这里用的plus,可以在yml中配置连接数据,若用的spring-data-mongo可以忽略
  2. spring:
    
      #数据库配置
      data:
        mongodb:
          uri: mongodb://127.0.0.1:1111/ruian   这里配置的是mongos路由的路径就可以实现分片了
          option:
            min-connection-per-host: 0
            max-connection-per-host: 20000
            threads-allowed-to-block-for-connection-multiplier: 20
            server-selection-timeout: 30000
            max-wait-time: 120000
            max-connection-idle-time: 0
            max-connection-life-time: 0
            connect-timeout: 10000
            socket-timeout: 0
            socket-keep-alive: false
            ssl-enabled: false
            ssl-invalid-host-name-allowed: false
            always-use-m-beans: false
            heartbeat-socket-timeout: 20000
            heartbeat-connect-timeout: 20000
            min-heartbeat-frequency: 500
            heartbeat-frequency: 10000
            local-threshold: 15

    再代码中循环插入数据,在分片表中就可以看到实际效果

  • 配置中遇到的坑:

在添加片的时候,如果mongodb里面存在数据库则会出现添加失败

启动mongs路由的时候会出现 I SHARDING [Balancer] distributed lock 'balancer/PC
201611240804:1111:1557995632:41' unlocked.暂时不知道原因,但是不影响使用

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐