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

MongoDB 详细教程,这一篇就够啦

文章目录

  • 1. 简介
  • 2. 特点
  • 3. 应用场景
  • 4. 安装(docker)
  • 5. 核心概念
    • 5.1 库
    • 5.2 集合
    • 5.3 文档
  • 6. 基本操作
    • 6.1 库
      • 6.1.1 增
      • 6.1.2 删
      • 6.1.3 改
      • 6.1.4 查
    • 6.2 集合
      • 6.2.1 增
      • 6.2.2 删
      • 6.2.3 改
      • 6.2.4 查
    • 6.3. 文档
      • 6.3.1 增
      • 6.3.2 删
      • 6.3.3 改
      • 6.3.4 查
        • 1. 语法
        • 2. 对比语法
        • 3. AND
        • 4. OR
        • 5. AND & OR
        • 6. 数组数据查询
        • 7. 模糊查询(正则表达式)
        • 8. 排序
        • 9. 分页
        • 10. 总条数
        • 11. 去重
        • 12. 指定返回字段
  • 7. $type
  • 8. 索引
    • 8.1 说明
    • 8.2 使用
  • 9. 聚合
    • 9.1 说明
    • 9.2 使用
  • 10. 整合 SpringBoot
    • 10.1 pom
    • 10.2 yml
    • 10.3 coding
  • 11. 副本集
  • 12. 分片集群

前置要求 :

  • RDBMS 关系型数据库
  • Linux
  • SpringBoot

1. 简介

MongoDB 是一个 基于分布式文件存储 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个 介于关系数据库和非关系数据库之间 的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

它支持的数据结构非常松散,是类似 jsonbson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

MongoDB服务端可运行在Linux、Windows平台,支持32位和64位应用,默认端口为27017

推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。

2. 特点

  • 面向集合存储,易存储对象类型的数据
  • 支持查询,以及动态查询
  • 支持 RUBY, PYTHON, JAVA, C++, PHP, C# 等多种语言
  • 文件存储格式为 BSON (对 JSON 的扩展)
  • 支持复制和故障恢复和分片
  • 支持事务
  • 索引 - 提高查询效率
  • 聚合
  • 关联查询

3. 应用场景

  • 游戏应用 : 使用云数据库MongoDB作为游戏服务器的数据库存储用户信息。用户的游戏装备、积分等直接以内嵌文档的形式存储,方便进行查询与更新。
  • 物流应用 : 使用云数据库MongoDB存储订单信息,订单状态在运送过程中会不断更新,以云数据库MongoDB内嵌数组的形式来存储,-次查询就能将订单所有的变更读取出来,方便快捷且一目了然。
  • 社交应用 : 使用云数据库MongoDB存储用户信息以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。并且,云数据库MongDB非常适合用来存储聊天记录,因为它提供了非常丰富的查询,并在写入和读取方面都相对较快。
  • 视频直播 : 使用云数据库MongoDB存储用户信息、礼物信息等。
  • 大数据应用 : 使用云数据库MongoDB作为大数据的云存储系统,随时进行数据提取分析,掌握行业动态。

4. 安装(docker)

# 拉取镜像
docker pull mongo
# 创建容器
docker run --name mongodb -d -p 27017:27017 mongo:latest --auth
# 查看所有容器
docker ps -a
# 进入容器
docker exec -it d96de8c77c72(CONTAINER ID) bash
# 连接 mongo 客户端(前提: 在容器内)
mongo
# 设置 root 权限
use admin;
db.createUser({user: 'nuo',pwd: 'xiaonuo123..+',roles: ['root']
});
# 认证
db.auth("nuo", "xiaonuo123..+");
# 查看数据库信息(前提: 进入 mongo 客户端)
show dbs;
# 退出 mongo 客户端
exit
# 再次 exit, 退出容器
exit
# 停止容器
docker stop d96de8c77c72(CONTAINER ID)
# 启动已有容器
docker start d96de8c77c72(CONTAINER ID)

5. 核心概念

关系型数据库 VS mongodb

5.1 库

mongodb 中的库就类似于传统关系型数据库中库的概念,用来通过不同库隔离不同应用数据。mongodb中可以建立多个数据库, 每一个库都有自己的集合和权限,不同的数据库也放置在不同的文件中。

默认的数据库为 “test” , 数据库存储在启动指定的data目录中。

5.2 集合

集合就是MongoDB 文档组, 类似于 RDBMS (关系数据库管理系统: Relational Database Management System)中的 '表' 的概念.集合存在于数据库中,一个库中可以创建多个集合。每个集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

5.3 文档

文档集合中一条条记录,是一组键值( key-value )对(即 BSON ).MongoDB 的文档不需要设置
相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也
是 MongoDB 非常突出的特点。

6. 基本操作

# 清屏
cls;

6.1 库

保留库说明 :

  • admin : 从权限的角度来看,这是"oot"数据库。要是将一 个用户添加到这个数据
    库,这个用户自动继承所有数据库的权限。-些特定的服务器端命令也只能从这个数
    据库运行,比如列出所有的数据库或者关闭服务器。
  • local : 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config : 当Mongo用于分片设置时,config数据库 在内部使用,用于保存分片的相关
    信息。

6.1.1 增

# 创建并使用
use xxx;

6.1.2 删

# 默认删除当前库, 但删除后其实还在当前库里边, 只是数据没了
db.dropDatabase();

6.1.3 改

没有直接的操作

# 方案一: 拷贝数据库后,删除原来的数据库
db.copyDatabase('old_name', 'new_name');
use old_name;
db.dropDatabase();
# 方案二: 利用renameCollection命令, 如果有多个集合,循环处理就好了
db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})

6.1.4 查

# 查看当前使用的数据库
db;
# 查看所有数据库(如果没有数据默认是不显示的)
show databases; 
# or
show dbs;

6.2 集合

6.2.1 增

# 1. 显式创建
db.createCollection('collection', [options]);
# 'collection': 集合名称 
# [options] : 可选参数(不填则为默认) 
# eg.
db.createCollection('user');
db.createCollection('user', {capped: true, size: 5000, max: 100});
2. 隐式创建-向不存在的集合插入数据
db.user.insert({"name": "nuo"});

[options]: 可选参数

6.2.2 删

# user: 集合名称
db.user.drop();

6.2.3 改

db.adminCommand({renameCollection: "demo.test", to: "demo.user"})

6.2.4 查

# 获取数据库中所有集合(表)
show collections;
# or
show tables;

6.3. 文档

6.3.1 增

# 1. 单条文档(数据)
db.user.insert({"name": "nuo"});
# bson 格式, key 可以不写 "",eg.
db.user.insert({name: "nuo"});# 2. 多条文档(数据)批量插入
db.user.insertMany([{name: "abc", _id:2},{name: "123"}],writeConcern: 1, # 写入策略, 默认 1, 即要求确认写操作, 0 是不要求ordered: true  # 指定是否按顺序写入, 默认 true
);
db.user.insert([{name: "abc", _id:1},{name: "123"}]
);
# 3. 脚本插入
for (let i = 0; i < 10; i ++) {db.user.insert({userId: i});
}

注意 :在 mongodb 中,每个文档都有一个 ‘_id’ 作为唯一标识,‘_id’ 默认会自动生成,如果手动指定则将使用手动指定的指作为 ‘_id’ 的值。

6.3.2 删

db.collection.remove (<query>,{justOne: <boolean>,writeConcern: <document>}
}

参数说明 :

  • query : 可选删除的文档的条件。
  • justOne : 可选如果设为 true 或 1 ,则只删除一个文档,如果不设置该参数,或使用默认值false,则删除所有匹配条件的文档。
  • writeConcern : 可选抛出异常的级别,一般不用管。

eg.

# 删个别
db.user.remove({name:'nuo1'}, {justOne:false});
# 删除所有
db.collection.remove({});

6.3.3 改

db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>}
);

参数说明:

  • query : update的查询条件, 类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(她.,i.n…). 等,也可以理解为sql
    update查询内set后面的
  • upsert: 可选,这个参数的意思是,如果不存在update的记录, 是否插入objNew,true
    为插入,默认是false,不插入。
  • multi: 可选,mongodb默认是false,只更新找到的第一 条记录,如果这个参数为true,
    就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

eg.

# 将符合条件的全部更新成后面的文档,相当于先删除在更新
db.user.update({name: 'nuo2'}, {name: 'nuo1', bir: new Date()});# 保留原来数据更新,但是只更新符合条件的第一条数据
db.user.update({name: 'nuo1'}, {$set: {name: 'nuo3'});# 保留原来数据更新,更新符合条件的所有数据
db.user.update({name: 'nuo1'}, {$set: {name: 'nuo3'},{multi:true});# 保留原来数据更新,更新符合条件的所有数据没有条件符合时插入数据(saveOrUpdate)
db.user.update({name: 'nuo1'}, {$set: {name: 'nuo3'}, {multi: true, upsert: true});

6.3.4 查

1. 语法

db.collection.find(query, projection);

参数描述 :

  • query : 可选,使用查询操作符指定查询条件
  • projection : 可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略) 。

MongoDB 查询文档使用find() 方法。find() 方法以非结构化的方式来显示所有文档,如果你需要以易读的方式来读取数据,可以使用 pretty() 方法以格式化的方式来显示所有文档,语法格式如下 :

db.collection.find().pretty();

2. 对比语法

如果你熟悉常规的SQL数据,通过下表可以更好的理解MongoDB的条件语句查询:
对比语法

3. AND

db.collection.find({k1: v1, k2: v2, ...}).pretty();

类似于WHERE 语句: WHERE key1=value1 AND key2=value2

4. OR

MongoDB OR条件语句使用了关键字$or,语法格式如下:

db.collection.find($or: [{k1: v1}, {k2: v2}]
).pretty();

类似于WHERE语句: WHERE k1=v1 or k2=v2

5. AND & OR

类似SQL语句为: ' where age < 18 AND (name = ' nuo1’ OR name = ' nuo2' )

db.user.find({"age": {$lt: 18}, $or: [{name: 'nuo1'}, {name: 'nuo2'}]
}).pretty();

6. 数组数据查询

# 测试数据
db.user.insert({"age": 3,"like": ["看电视","读书"],"name": "nuo11"
});
--执行数组查询
> db.user.find({like: "看电视"})

7. 模糊查询(正则表达式)

db.user.find( {name:/nuo/});

类似SQL中为'where name like '%name% '

8. 排序

1 : 升序
-1: 降序

db.collection.find().sort( {name:1, age:1}),

类似SQL语句为: 'order by name, age '

9. 分页

db.collection.find().sort( {条件}) .skip(start).limit( rows);
类似于SQL语句为: ' limit start, rows'

10. 总条数

db.collection.count();
db.collection.find({"name": "nuo1"}).count();

类似于SQL 语句为: 'select count(id) from

11. 去重

db.collection.distinct('字段')

12. 指定返回字段

db.collection.find({query}, {name: 1, age: 1})

1 : 返回
0 : 不返回
注意:1和0不能同时使用

7. $type

$type 操作符是基于 BSON 类型来检索集合中匹配的数据类型,并返回结果
$type

db.col.find({title: {$type : 2}}). pretty();
# or
db.col. find({"title" : {$type: 'string' }}). pretty();

8. 索引

8.1 说明

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中, 索引是对数据库表中一列或多列的值进行排序的一种结构。

索引从根本上说,MongoDB中的索引与 其他数据库系统中的索引类似。MongoDB在集合层面上定义了索引,并支持对MongoDB集合中的任何字段或文档的子字段进行索引。

8.2 使用

# db.collection.createIndex(keys, options);
# 1 : 升序
# -1: 降序
db.test.createIndex( {"title" : 1, "description" : -1});

说明 : 语法中Key 值为你要创建的索引字段,1为指定 按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
options

# 1. 查看集合索引
db.collection.getIndexes();
# 2. 查看集合索引大小
db.collection.totalIndexSize();
# 3. 删除集合所有索引
db.collection.dropIndexes();
# 4. 删除集合指定索引
db.collection.dropIndex("索引名称);

复合索引

  • 说明 : 一个索引的值是由多个key进行维护的索引的称之为复合索引
  • 注意 : mongoDB 中复合索引和传统关系型数据库一致都是左前缀原则
db.collection.createIndex( {"title": 1, "description": -1})

复合索引
复合索引

9. 聚合

9.1 说明

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)。

9.2 使用

{title: 'MongoDB Overview', description: 'MongoDB is no sql database',by_user: 'runoob.com',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
},
{title: 'NoSQL Overview', description: 'No sql database is very fast',by_user: 'runoob.com',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 10
},
{title: 'Neo4j Overview', description: 'Neo4j is no sql database',by_user: 'Neo4j',url: 'http://www.neo4j.com',tags: ['neo4j', 'database', 'NoSQL'],likes: 750
}
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

聚合表达式

10. 整合 SpringBoot

10.1 pom

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

10.2 yml

spring:data:mongodb:host: localhostport: 27017database: demousername: nuopassword: xiaonuo123..+

10.3 coding

相关注解

查

@SpringBootTest
class MongodbApplicationTests {@Autowiredprivate MongoTemplate mongoTemplate;@Testvoid contextLoads() {}/** * TODO: 创建集合*/ @Testvoid creatCollection() {System.out.println(mongoTemplate.createCollection("nuo"));}/*** TODO: 删除集合*/@Testvoid dropCollection() {mongoTemplate.dropCollection("nuo");}/*** TODO: 增*  - 插入重复数据时 :*       insert: 报 DuplicateKeyException 提示主键重复;*       save  : 对已存在的数据进行更新.*  - 批处理操作时:*       insert: 可以一次性插入整个数据, 效率较高;*       save  : 需遍历整个数据, 一次插入或更新, 效率较低.*/@Testvoid add() {mongoTemplate.save(new User(100, "nuo", "123"));mongoTemplate.insert(new User(101, "nuo", "123"));}/*** TODO: 删*/@Testvoid del() {mongoTemplate.remove(Query.query(Criteria.where("username").is("test")), User.class);}/*** TODO: 改*/@Testvoid put() {mongoTemplate.updateMulti(Query.query(Criteria.where("username").is("nuo")), Update.update("username", "test"), User.class);}/*** TODO: 查*/@Testvoid query() {}}

11. 副本集

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图

副本集特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

12. 分片集群

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

为什么使用分片?
\

  • 复制所有的写入操作到主节点
  • 延迟的敏感数据会在主节点查询
  • 单个副本集限制在12个节点
  • 当请求量巨大时会出现内存不足。
  • 本地磁盘不足
  • 垂直扩展价格昂贵

分片构建图

Shard :

  • 用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

Config Server :

  • mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

Query Routers :

  • 前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

相关文章:

MongoDB 详细教程,这一篇就够啦

文章目录1. 简介2. 特点3. 应用场景4. 安装&#xff08;docker&#xff09;5. 核心概念5.1 库5.2 集合5.3 文档6. 基本操作6.1 库6.1.1 增6.1.2 删6.1.3 改6.1.4 查6.2 集合6.2.1 增6.2.2 删6.2.3 改6.2.4 查6.3. 文档6.3.1 增6.3.2 删6.3.3 改6.3.4 查1. 语法2. 对比语法3. AN…...

python为什么慢

解释性 python是动态类型解释性语言&#xff0c;不管使用哪种解释器 因为“解释性语言”这个概念更多地是指代码的执行方式&#xff0c;而不是编译方式。在解释性语言中&#xff0c;代码在执行时会一行一行地解释并执行&#xff0c;而不是预先编译为机器语言。而即使使用了PyP…...

Android kotlin 组件间通讯 - LiveEventBus 及测试(更新中)

<<返回总目录 文章目录 一、LiveEventBus是什么二、测试一、LiveEventBus是什么 LiveEventBus是Android中组件间传递消息,支持AndroidX,Event:事件,Bus:总线 范围全覆盖的消息总线解决方案 进程内消息发送App内,跨进程消息发送App之间的消息发送更多特性支持 免配…...

linux服务器时间同步

Linux服务器时间同步 需求&#xff1a;两台以上服务器之间的时间同步&#xff0c;以其中一台服务器为时间源&#xff0c;其余服务器同步这台时间源服务器的时间 其中&#xff0c;时间源服务器需要有访问外网权限&#xff0c;不然时间源服务器无法同互联网同步最新的时间&#…...

扒系统CR8记录

目录 终极改造目标 过程记录 参考 为了将一套在线安装的系统&#xff0c;在不了解其架构、各模块细节的基础上&#xff0c;进行扒弄清楚&#xff0c;作以下记录。 终极改造目标 最终的目标&#xff0c;就是只通过CreMedia8_20230207.tar.gz解压 install 就把业务包安装了&…...

面试题(基础篇)

1、你是怎样理解OOP面向对象的面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征&#xff1a;&#xff08;1&#xff09;继承&#xff1a;继承是从已有类得到继承信息创建新类的过程&#xff08;2&#xff09;封装&#xff1a;通常认为封装是把数据和操作数据的方法…...

如何利用ReconPal将自然语言处理技术应用于信息安全

关于ReconPal 网络侦查一直是网络安全研究以及渗透测试活动中最重要的阶段之一&#xff0c;而这一阶段看起来很容易&#xff0c;但往往需要很大的努力和很强的技术才能做好来。首先&#xff0c;我们需要使用正确的工具、正确的查询/语法以及正确的操作&#xff0c;并将所有信息…...

攻略 | 6步帮助中小微企业开拓东盟机电产品市场

如何帮助中小微外贸企业在东盟市场拓展机电产品一般贸易&#xff1f;随着全球化的发展&#xff0c;越来越多的中小微外贸企业开始涉足国际贸易。对于机电产品行业而言&#xff0c;东盟市场是一个非常重要的出口目的地。本文将为您介绍如何帮助中小微外贸企业在东盟市场拓展机电…...

Linux服务器磁盘分区、挂载、卸载及报错处理

整体操作是&#xff1a;先对磁盘进行格式化&#xff0c;格式化后挂载到需要的挂载点&#xff0c;最后添加分区启动表&#xff0c;以便下次系统启动时自动挂载。一、linux分区1、Linux来说wulun有几个分区&#xff0c;分给哪一目录使用&#xff0c;他归根结底只有一个根目录&…...

JavaScript基础语法入门

一. JS简介 JavaScript , 简称JS, JS最初只是为了进行前端页面开发, 但随这后来JS越来越火之后, JS就被赋予了更多的功能, 可以用来开发桌面程序, 手机App, 服务器端的程序等… JS是一种动态类型, 弱类型的脚本语言, 通过解释器运行, 主要在客户端和浏览器上运行, 比如Chrome…...

Linux基础命令-ln创建链接文件

文章目录 ln 命令介绍 命令格式 基本参数 参考实例 1&#xff09; 创建文件的硬链接 2&#xff09;创建文件的软链接 3&#xff09;创建链接文件时&#xff0c;相同目标文件创建备份文件 命令总结 ln 命令介绍 先看下帮助文档中的含义 NAME ln - make links …...

Day21【元宇宙的实践构想07】—— 元宇宙与人工智能

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 &#x1f91e; 作者&#xff1a;那就叫我亮亮叭 &#x1f4d5; 专栏&#xff1a;元宇宙 0.0 写在前面 “元宇宙”在2021年成为时髦的概念。元宇宙到底是什么&#xff1f;元宇…...

MySQL的InnoDB 三种行锁,SQL 语句加了哪些锁?

InnoDB 三种行锁&#xff1a; Record Lock&#xff08;记录锁&#xff09;&#xff1a;锁住某一行记录 Gap Lock&#xff08;间隙锁&#xff09;&#xff1a;锁住一段左开右开的区间 Next-key Lock&#xff08;临键锁&#xff09;&#xff1a;锁住一段左开右闭的区间 哪些语句…...

Java培训:深入解读函数式接口

函数式编程是一种编程规范或一种编程思想&#xff0c;简单可以理解问将运算或实现过程看做是函数的计算。 Java8为了实现函数式编程&#xff0c;提出了3个重要的概念&#xff1a;Lambda表达式、方法引用、函数式接口。现在很多公司都在使用lambda表达式进行代码编写&#xff0c…...

scratch潜水 电子学会图形化编程scratch等级考试一级真题和答案解析2022年12月

目录 scratch潜水 一、题目要求 1、准备工作 2、功能实现 二、案例分析...

DNS服务器部署的详细操作(图文版)

DNS服务器的部署 打开虚拟机后查看已经开放的端口&#xff0c;可以看到没有TCP53、UDP53&#xff0c;说明DNS服务端口没有打开 打开我的电脑—双击CD驱动器— 选择安装可选的Windows组件 选择网络服务—域名系统&#xff08;DNS&#xff09;— 点击下一步后会弹出如下弹…...

Compose – List / Detail: Basics实现

Compose – List / Detail: Basics实现 在androidx中有SlidingPanelLayout可以实现折叠屏的列表详情功能&#xff0c;但在Compose 中还没有官方的实现&#xff0c;那么下面我们用Compose做一些实现。 List / Detail 我们追求的基本行为是当 UI 具有项列表时。当用户点击列表…...

【Java】TCP网络编程(字节/符流)

文章目录概念TCP网络编程ServerSocketsocket使用区别和原理演示概念 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的协议&#xff0c;用于在计算机网络中可靠地传输数据。TCP是Internet协议族中的一个核心协议&#xff0c;它在传输层提供可靠、有序、基于流的传输服…...

Linux之init.d、rc.d文件夹说明

备注&#xff1a;Ubuntu没有rc.d文件夹&#xff0c;原因看问题四 Linux的几个重要文件 rc.d&#xff0c;init.d文件夹的说明 今天在研究mysql的安装的时候&#xff0c;最后一步要创建一个软连接&#xff0c;使得mysql服务可以自启动&#xff0c;代码如下&#xff1a; ln -s…...

数据结构与算法(六):图结构

图是一种比线性表和树更复杂的数据结构&#xff0c;在图中&#xff0c;结点之间的关系是任意的&#xff0c;任意两个数据元素之间都可能相关。图是一种多对多的数据结构。 一、基本概念 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成&#x…...

Kubernetes07:Service

Kubernetes07:Service 1、service存在的意义 因为Pod的IP是不断变化的&#xff0c;所以需要注册service防止pod失联 1&#xff09;为了防止Pod失联&#xff08;服务发现&#xff09; 2、定义一组Pod访问策略&#xff08;负载均衡&#xff09; 2、Pod和Service的关系-------通…...

Qt音视频开发18-不同视频打开无缝切换

一、前言 在轮询视频的时候&#xff0c;通常都是需要将之前的视频全部关闭&#xff0c;然后打开下一组视频&#xff0c;在这个切换的过程中&#xff0c;如果是按照常规的做法&#xff0c;比如先关闭再打开新的视频&#xff0c;肯定会出现空白黑屏之类的过度空白区间&#xff0…...

智能驾驶词典 --- 自动驾驶芯片梳理

0 前言 与智能驾驶相关的芯片主要分为自动驾驶芯片&#xff08;边缘端&#xff09;和智能座舱芯片两大类&#xff0c;另外衍生的相关芯片种类还有计算集群芯片&#xff08;云端&#xff09;&#xff0c; 1 自动驾驶芯片梳理 目前业内具有代表性的智驾芯片产品梳理如下。 1…...

在NVIDIA NX 配置OpenCV多版本冲突和解决的总结

Nvidia Jetson NX 环境 直接刷JetPack5.1的镜像&#xff0c;会得到如下环境 Ubuntu20.04cuda11.4TensorRT8.4cudnn8.4opencv4.5.4 而且这些源一般是从nv-xxxx等源下载的&#xff0c;打开软件Software&Update可以更该是否从这些源安装deb包。同时意味着&#xff0c;我们…...

记录pytorch安装 windows10 64位--(可选)安装paddleseg

安装完paddlepaddle之后&#xff0c;就可以安装paddleseg了。一、安装Git可以参考这个网址&#xff1a;https://blog.csdn.net/u010348546/article/details/124280236windows下安装git和gitbash安装教程二、安装paddleseghttps://github.com/PaddlePaddle/PaddleSeg记得翻墙啊这…...

UWB到底是什么技术?

什么是空间感知能力 所谓的空间感知能力&#xff0c;就是感知方位的能力。更直接一点&#xff0c;就是定位能力。说白了&#xff0c;利用UWB技术&#xff0c;手机和智能设备可以更精准地实现室内定位&#xff0c;不仅可以感知自己的位置&#xff0c;还可以感知周边其它手机或设…...

NCRE计算机等级考试Python真题(八)

第八套试题1、数据库设计中反映用户对数据要求的模式是___________。A.概念模式B.内模式C.设计模式D.外模式正确答案&#xff1a; D2、一个工作人员可使用多台计算机&#xff0c;而一台计算机被多个人使用&#xff0c;则实体工作人员与实体计算机之间的联系是___________。A.多…...

STM32之中断和事件

中断和事件什么是中断当CPU正在执行程序时&#xff0c;由于发生了某种事件&#xff0c;要求CPU暂时中断当前的程序执行&#xff0c;转而去处理这个随机事件&#xff0c;处理完以后&#xff0c;再回到原来被中断的地方&#xff0c;继续原来的程序执行&#xff0c;这样的过程称为…...

MySQL索引类型(type)分析

type索引类型 system > const > eq_ref > ref > range > index > all 优化级别从左往右递减&#xff0c;没有索引的⼀般为’all’。推荐优化目标&#xff1a;至少要达到 range 级别&#xff0c; 要求是 ref 级别&#xff0c; 如果可以是 const 最好&#xff…...

Linux | 2. 用户管理

如有错误&#xff0c;恳请指出。 1. 设置文件权限 权限设置如下&#xff1a; root表示文件所有者&#xff0c;stud1表示文件所属组。其他用户无法访问。更改指令是chown。 更改目录文件所属组&#xff1a;chown .lab lossfound/更改目录文件所有者&#xff1a;chown lab loss…...

php做电商网站/网站友情链接有什么用

paste -d | 第一个文件 第二个文件| 分隔符...

网站维护服务内容/百度热榜实时热点

为什么80%的码农都做不了架构师&#xff1f;>>> 原文链接&#xff1a;http://www.itproportal.com/features/go-ruby-swift-and-java-is-it-time-to-learn-a-new-devops-language/ 各个年龄段的学生一直被鼓励&#xff08;甚至被要求&#xff09;学习多种语言。但是…...

网站建设法语/2022年新闻大事

目录 0. 相关文章链接 1. ODS层 2. DIM层和DWD层 2.1. 选择业务过程 2.2. 声明粒度 2.3. 确定维度 2.4. 确定事实 3. DWS层与DWT层 4. ADS层 5. 总结 0. 相关文章链接 离线数仓文章汇总 1. ODS层 在ods层注意如下3点即可&#xff1a; 保持数据原貌不做任何修改&a…...

淘宝客怎么自建网站做推广/搜索引擎优化排名培训

UESTC 1652 题意&#xff1a;中文题 思路&#xff1a;遍历每一公里&#xff0c;然后计算每个车道对后一公里做出的贡献&#xff0c;最边上的车道特判&#xff0c;如果计算当前车道可以由前1公里的哪些车道做出贡献那么需要特判很多&#xff0c;但是如果计算当前车道对后1公里做…...

部门网站建设/世界最新新闻

算法10---二叉搜索树存在重复数据插入的实现 当用TREE-INSERT将n个具有相同关键字的数据项插入到一棵初始为空的二叉查找树中时&#xff0c;该算法的渐近性能如何&#xff1f;我们可以对TREE-INSERT做一些改进&#xff0c;即在第5行的前面测试key[z] key[x]&#xff0c;在第11…...

珠海网站建设怎样/海南seo快速排名优化多少钱

电缆调制解调器又名线缆调制解调器(Cable Modems) , 是种可以同时连接有线电视网络和宽带网络的网络设备。通常在运营商向用户同时提供广播电视节目和互联网时会安装此类设备&#xff0c;目前大多数地区都在广泛使用此类设备。日前来自丹麦的安全团队发现使用博通芯片组的电缆…...