当前位置: 首页 > news >正文

开发网站wordpress主题:yusi v2.0

开发网站,wordpress主题:yusi v2.0,wordpress自动获取标签,珠宝网站建设一、概述 MongoDB是一种常见的Nosql数据库#xff08;非关系型数据库#xff09;#xff0c;以文档#xff08;Document#xff09;的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中#xff…一、概述 MongoDB是一种常见的Nosql数据库非关系型数据库以文档Document的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中MongoDB 的官方镜像会在容器首次启动时自动执行 docker-entrypoint-initdb.d/ 目录下的所有.js 文件注意只会在容器创建的第一次会执行如果是运行之前已有的容器则不会执行我们可以利用这一点来实现数据的迁移和自动化部署服务。 二、完整部署和迁移过程 1、删除之前的容器 因为js脚本仅会在初次创建容器启动时才会被执行。如果是已存在的容器重新运行js脚本是不会被执行的。所以如果之前有运行的容器需要删除。 命令 docker rm -f mongdb-with-js删除示例 2、编写Dockerfile脚本 因为我们要把我们指定的js文件压到官方的mongDB镜像中所以这里需要编写Dockerfile文件用来重新构建镜像。 Dockerfile示例 # 使用自定义的 MongoDB 镜像 FROM mongo:7.0.4# 维护者信息 MAINTAINER weisian# 设置时区为上海 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 将 object-mongo.js 文件复制到容器的初始化脚本目录 COPY ./object-mongo.js /docker-entrypoint-initdb.d3、编写用于初始化的js脚本 该js文件会被Dockerfile文件压入到镜像中。本例的js脚本就是需要初始化到库中的数据。 名称如 object-mongo.js 代码示例 console.log(start running js!!!); const db db.getSiblingDB(object_cloud); // 指定库的名称try {console.log(Switching to database: object_cloud);console.log(Inserting data into object_sensor_category...);// 在object_cloud库的object_sensor_category表中插入数据支持many和one两种方法const result db.object_sensor_category.insertMany([{_id : NumberLong(988405030841225243),sensorModel : DT-ZD-V1001,vibrateIndicators : [ rms, peak],params : {frequencyResponse : 22,sensitivity : 102},deleteFlag : false,createTime : ISODate(2024-06-20T03:28:43.030Z)},{_id : NumberLong(988405030841225244),sensorModel : DT-ZS-V1001,pointTypeList : [ {pointType : 1020,dataBizTypes : [ 1020]}],params : {workmanshipCollectInterval : 60,triggerCount : 30},createTime : ISODate(2024-06-20T03:28:43.030Z),createUser : 1543837863788879871}]);const result2 db.object_category.insertMany([{_id : NumberLong(988108368994373658),collectorChannelNum : 18,channelConfList : [ {channelType : 1020,sensorTypeList : [ NumberLong(988405030841225244)]}],manufacturerId : NumberLong(7382949823),workmanshipExist : [ NumberLong(1060)],sensorTypeList : [ NumberLong(988404952147693592), NumberLong(988405030841225242)],updateTime : ISODate(2024-06-19T07:49:53.351Z),updateUser : 1543837863788879871}]);} catch (e) {console.error(Error inserting data: e); }4、重新构建镜像 1、创建工作路径 随意创建一个目录即可。 上传前面编写的Dockerfile和object-mongo.js两个文件 2、重新构建镜像image-mongodb-js:1.0 命令 docker build -t image-mongodb-js:1.0 .3、查询镜像存在 5、启动mongodb服务 1、指定用户名root密码123456和镜像 命令 docker run -d --name mongodb-with-js -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAMEroot -e MONGO_INITDB_ROOT_PASSWORD123456 image-mongodb-js:1.02、查看启动日志 命令 docker logs mongodb-with-js可以看到object-mongo.js中打印的日志信息方便查看是否初始化js等操作信息。 6、客户端连接验证 使用如下的IP、端口用户名密码连接mongDb服务。 ip:27017 root/123456 可以看到登录成功且数据初始化完成。 7、过程中的几个命令记一下 进入容器 docker exec -it 415dc88956bd bash 停止并删除容器 docker rm -f mongodb-with-js 删除镜像 docker rmi image-mongodb-js:1.0 宿主机打开mongo shell窗口可执行原始的mongo命令在mongDB5.0及之后改为mongosh如果进入容器内直接*mongosh即可打开 docker exec -it mongodb-with-js mongosh以下几个为mong shell的脚本展示mongo服务中有哪些个数据库 show databases 切换数据库 use phm_local 展示当前数据库下的表 show collections 展示当前数据库下指定表中的数据 db.object_sensor_category.find().pretty(); 加载执行js脚本 load(/docker-entrypoint-initdb.d/phm-mongo.js)三、js脚本需要注意的点 1、Long类型的精度问题 在处理long类型时如果不用双引号框起来会造成精度丢失问题甚至报错。如下为正确和错误的示例。 正确示例 _id : NumberLong(988404952147693592),错误示例如 _id : NumberLong(988404952147693592),2、注意mongDb的版本 使用5.0之前和之后的mongDb版本js语法可能会不相同。 目前使用7.0.4版本可用语法如下 const db db.getSiblingDB(object_cloud); // 切换到object_cloud库 const result db.object_sensor_category.insertMany([]) // db库导入多条数据3、时间对象 时间对象需要改成以下格式注意后面也有双引号 createTime : ISODate(2024-06-20T03:28:24.269Z)四、通过代码做数据迁移 通过如下的代码也可以实现mongoDb数据的迁移工作。但这种方式要求必须同时连接到两个数据源对于一些线上环境往往是平常无法访问的。如果网络环境不通的情况下就只能先把数据导出后在迁移到目标环境中进行导入的工作上面的js初始化方式也是这种实现的逻辑但是不同在于js的方式实现了自动化部署即不需要人为再去操作迁移了 java代码示例如下 import com.alibaba.fastjson2.JSON; import com.mongodb.MongoClientSettings; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.*; import org.bson.Document; import java.util.Collections; import java.util.Iterator;public class MongoMigration {public static void main(String[] args) {String[] collections new String[]{ // 指定需要迁移数据的表object_category, // object_running_conf,object_sensor_category};for (String collection:collections){copyCollection(collection); // 遍历上面的表进行数据迁移}}private static void copyCollection(String collection) {// 源MongoDB配置String sourceHost ;int sourcePort 27017;String sourceDatabase object-cloud;String sourceUsername root; // 如果需要的话String sourcePassword 123456; // 如果需要的话// 目标MongoDB配置String targetHost ;int targetPort 38630; String targetDatabase object-cloud;String targetUsername root; // 如果需要的话String targetPassword 123456; // 如果需要的话// 连接到源MongoDBMongoClient sourceClient createMongoClient(sourceHost, sourcePort, sourceDatabase, sourceUsername, sourcePassword);MongoDatabase sourceDatabaseInstance sourceClient.getDatabase(sourceDatabase);MongoCollectionDocument sourceCollectionInstance sourceDatabaseInstance.getCollection(collection);// 连接到目标MongoDBMongoClient targetClient createMongoClient(targetHost, targetPort, targetDatabase ,targetUsername, targetPassword);MongoDatabase targetDatabaseInstance targetClient.getDatabase(targetDatabase);MongoCollectionDocument targetCollectionInstance targetDatabaseInstance.getCollection(collection);// 从源集合读取数据并写入目标集合FindIterableDocument documents sourceCollectionInstance.find();IteratorDocument iterator sourceCollectionInstance.find().iterator();int i0;while (iterator.hasNext()) {Document doc iterator.next();targetCollectionInstance.insertOne(doc);if (i100){ // 仅迁移前100条数据有些表数据量太大不需要可以放弃。如果需要全量这里要删除掉break;}}// 关闭连接sourceClient.close();targetClient.close();System.out.println(Data migration completed successfully!);}private static MongoClient createMongoClient(String host, int port, String database, String username, String password) {MongoCredential credential null;if (username ! null !username.isEmpty() password ! null !password.isEmpty()) {credential MongoCredential.createCredential(username, database, password.toCharArray()); }MongoClientSettings settings MongoClientSettings.builder().applyToClusterSettings(builder -builder.hosts(Collections.singletonList(new ServerAddress(host, port)))).credential(credential) // 如果需要认证.build();return MongoClients.create(settings);} }五、总结 通过MongDB官方镜像的特性会在容器首次启动时自动执行 docker-entrypoint-initdb.d/ 目录下的所有.js 文件可以利用这一点来实现mongDB的数据迁移或自动化部署服务。 学海无涯苦作舟
http://www.hkea.cn/news/14538753/

相关文章:

  • 中间商网站怎么做亚马逊查关键词搜索量的工具
  • 建设银行网站设计的优点美妆网站开发规划书
  • 阿坝州建设局网站刘志彬新冠止咳药物有哪几种
  • 网站风格设计原则青岛中小企业网站制作
  • 新民专业网站开发公司怎样查询江西省城乡建设厅网站
  • 服装公司网站建设方案太湖云建站网站建设
  • 网站域名价值查询自建网站该页无法显示
  • 做ppt配图好用的网站档案馆网站机房建设
  • 大型网站建设公司制作网站久久建筑网会员登陆中心
  • 展示系统 网站模板智慧新零售系统
  • 网站栏目内容和功能深圳全网推广推荐
  • wordpress站点地址写错免费的微网站
  • 专业网站设计建设服务广州网站推广费用
  • it培训机构学校班级优化大师官方免费下载
  • 苏州专业高端网站建设百度推广送企业网站吗
  • 个人网站免费搭建南昌做网站需要多少钱
  • 网站建设经费方案百度关键词搜索查询
  • 石家庄无极网站建设美工接单网
  • 网站开发文档合同苏州十大软件公司
  • 哪个网站美丽乡村做的比较好17网站一起做网店档口出租
  • 个人网站开发的论文网站后台修改图片集顺序
  • 网站开发与设计实训总结两千字谷歌seo和百度seo的区别
  • 徐州建站网页建设长治制作公司网站的公司
  • 软件网站开发合同做外贸网站机构
  • 东莞大岭山做网站公司自己做响应式网站难吗
  • 信誉好的电商网站建设网页设计与制作教程第5版
  • 常州做网站的公司有哪些手机网站建设的背景
  • 怎么创自己的网站股票海选公司用什么网站
  • 有域名如何做免费网站想建个图片网站
  • top后缀做网站好不好网络编程是做什么的