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

K8S中的数据存储之基本存储

基本存储类型

EmptyDir

  • 描述:当 Pod 被调度到节点上时,Kubernetes 会为 Pod 创建一个空目录,所有在该 Pod 中的容器都可以访问这个目录。
  • 特点
    • 生命周期与 Pod 绑定,Pod 删除时,数据也会丢失。
    • 适用于临时存储需求,如缓存或临时计算数据。
    • 支持多种存储类型(如 tmpfs)可以根据需求选择。

HostPath

  • 描述:将主机节点上的文件或目录挂载到 Pod 中的容器内。
  • 特点
    • 允许 Pod 访问宿主机的文件系统。
    • 数据存储在节点上,如果 Pod 被调度到不同的节点上,数据不可用。
    • 适用于单节点集群或测试环境中,不推荐在生产环境中使用。
    • 存在潜在的安全风险,因为容器可以访问宿主机的文件系统。

NFS

  • 描述:网络存储解决方案将存储分布到多个节点或机器,Kubernetes 可以使用这些存储系统作为 PV 后端。
  • 特点
    • 提供集群级别的共享存储,支持多个 Pod 挂载相同的卷。
    • 适用于需要共享数据的应用,如分布式数据库。
    • 支持高可用性、数据复制、故障恢复等功能。
    • 需要额外的配置和管理,通常适用于大型分布式应用或企业级场景。

EmptyDir详解

EmptyDir 是一种轻量级的存储选项,用于 Pod 内部容器之间的数据共享或临时存储。下面是一些关于 EmptyDir 的补充信息:

  • 生命周期:EmptyDir 的生命周期与 Pod 绑定。当 Pod 被创建时,EmptyDir 被创建并挂载到 Pod 中所有需要它的容器上。当 Pod 被删除时,EmptyDir 及其内容也会被删除。

  • 使用场景

    • 临时存储:对于需要临时写入和读取数据,但不要求数据持久化的场景,如缓存或会话数据。

    • 容器间数据共享:当 Pod 中运行多个容器需要共享文件时,EmptyDir 可以作为一个共享存储空间。

    • 数据处理:在数据被处理并存储到更持久的存储解决方案之前,可以临时存储在 EmptyDir 中。

  • 性能:EmptyDir 存储的性能通常与宿主机的磁盘性能相当,因为它直接存储在宿主机上。

  • 限制:由于 EmptyDir 与 Pod 的生命周期绑定,因此它不适合存储需要跨 Pod 持久化的数据。此外,EmptyDir 不保证数据的备份或复制,所以在 Pod 重启或重建时数据可能会丢失。

  • 配置:EmptyDir 可以通过 Pod 定义中的 spec.volumes 字段来配置,无需指定宿主机上的路径。

  • 安全性:EmptyDir 默认只对 Pod 内部的容器可见,提供了一定程度的隔离。

在一个Pod中准备两个容器nginx和busybox,然后声明一个Volume分别挂在到两个容器的目录中,然后nginx容器负责向Volume中写日志,busybox中通过命令将日志内容读到控制台。

[root@k8s-master ~]# vim volume-emptydir.yaml
[root@k8s-master ~]# kubectl apply -f volume-emptydir.yaml 
Error from server (NotFound): error when creating "volume-emptydir.yaml": namespaces "test" not found
[root@k8s-master ~]# kubectl create ns test
namespace/test created
[root@k8s-master ~]# kubectl apply -f volume-emptydir.yaml 
pod/volume-emptydir created
[root@k8s-master ~]# kubectl get pod -n test -o wide
NAME              READY   STATUS              RESTARTS   AGE   IP       NODE        NOMINATED NODE   READINESS GATES
volume-emptydir   0/2     ContainerCreating   0          35s   <none>   k8s-node1   <none>           <none>
[root@k8s-master ~]# kubectl get pod -n test -w
NAME              READY   STATUS              RESTARTS   AGE
volume-emptydir   0/2     ContainerCreating   0          40s
volume-emptydir   2/2     Running             0          56s
^C[root@k8s-master ~]# kubectl exec -it volume-emptydir -n test /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Defaulted container "nginx" out of: nginx, busybox
root@volume-emptydir:/# echo 'This is EmptyDir test' > /usr/share/nginx/html/index.html 
root@volume-emptydir:/# exit
exit
[root@k8s-master ~]# kubectl get pod -n test -o wide
NAME              READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
volume-emptydir   2/2     Running   0          80s   10.244.36.81   k8s-node1   <none>           <none>
[root@k8s-master ~]# curl 10.244.36.81
This is EmptyDir test
[root@k8s-master ~]# kubectl logs -f volume-emptydir -n test -c busybox 
10.244.235.192 - - [25/Jan/2025:09:39:19 +0000] "GET / HTTP/1.1" 200 22 "-" "curl/7.29.0" "-"
10.244.235.192 - - [25/Jan/2025:09:39:40 +0000] "GET / HTTP/1.1" 200 22 "-" "curl/7.29.0" "-"
10.244.235.192 - - [25/Jan/2025:09:39:41 +0000] "GET / HTTP/1.1" 200 22 "-" "curl/7.29.0" "-"

 通过curl命令进行访问,可以看到访问成功的日志信息;

 

HostPath详解

  • EmptyDir中数据不会被持久化,它会随着Pod的结束而销毁,如果想简单的将数据持久化到主机中,可以选择HostPath。

  • HostPath就是将Node主机中一个实际目录挂在到Pod中,以供容器使用,这样的设计就可以保证Pod销毁了,但是数据依据可以存在于Node主机上。

    • 数据持久性:与 EmptyDir 不同,HostPath 卷将 Node 主机上的一个目录挂载到 Pod 中,使得 Pod 内的容器可以访问和修改该目录上的文件。由于这些文件存储在 Node 主机上,因此即使 Pod 被删除,数据仍然可以在 Node 主机上保持。

    • 用途HostPath 适用于需要持久化数据的场景,例如数据库文件、配置文件等。然而,由于 HostPath 直接使用了 Node 主机的文件系统,可能会带来一些安全和管理上的挑战,例如权限管理、数据一致性等问题。

[root@k8s-master ~]#  vim volume-hostpath.yaml
[root@k8s-master ~]# kubectl apply -f volume-hostpath.yaml 
pod/volume-hostpath created
[root@k8s-master ~]#  kubectl get pod -n test -w
NAME              READY   STATUS    RESTARTS   AGE
volume-emptydir   2/2     Running   0          9m26s
volume-hostpath   2/2     Running   0          6s
^C[root@k8s-master ~]# kubectl describe pod volume-hostpath -n test
Name:         volume-hostpath
Namespace:    test
Priority:     0
Node:         k8s-node1/192.168.58.232
Start Time:   Sat, 25 Jan 2025 04:47:14 -0500
Labels:       <none>
Annotations:  cni.projectcalico.org/containerID: 12d55de1744ff89a73d0fb3c4f9cf45427847f3ca631f130147e2a41b9916c53cni.projectcalico.org/podIP: 10.244.36.82/32cni.projectcalico.org/podIPs: 10.244.36.82/32
Status:       Running
IP:           10.244.36.82
IPs:IP:  10.244.36.82
Containers:nginx:Container ID:   docker://c0c42dab2b85a9d336abcba543be34740ce44c19453d41435882cc4e356ea18eImage:          nginx:1.17.1Image ID:       docker-pullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a967c03dbbPort:           80/TCPHost Port:      0/TCPState:          RunningStarted:      Sat, 25 Jan 2025 04:47:16 -0500Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/log/nginx from logs-volume (rw)/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bqnr4 (ro)busybox:Container ID:  docker://ee04657f326faa26619d0ffe9acb277885aa792737aed9d3e343c570d17ff0a8Image:         busybox:1.30Image ID:      docker-pullable://busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3dPort:          <none>Host Port:     <none>Command:/bin/sh-ctail -f /logs/access.logState:          RunningStarted:      Sat, 25 Jan 2025 04:47:16 -0500Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/logs from logs-volume (rw)/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bqnr4 (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:logs-volume:Type:          HostPath (bare host directory volume)Path:          /root/logsHostPathType:  DirectoryOrCreatekube-api-access-bqnr4:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  25s   default-scheduler  Successfully assigned test/volume-hostpath to k8s-node1Normal  Pulled     23s   kubelet            Container image "nginx:1.17.1" already present on machineNormal  Created    23s   kubelet            Created container nginxNormal  Started    23s   kubelet            Started container nginxNormal  Pulled     23s   kubelet            Container image "busybox:1.30" already present on machineNormal  Created    23s   kubelet            Created container busyboxNormal  Started    23s   kubelet            Started container busybox
[root@k8s-master ~]#  kubectl get pod -n test -o wide
NAME              READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
volume-emptydir   2/2     Running   0          10m   10.244.36.81   k8s-node1   <none>           <none>
volume-hostpath   2/2     Running   0          98s   10.244.36.82   k8s-node1   <none>           <none>

 describe中看的pod调度到node1节点,在master节点执行curl进行访问,到node1节点下查看是否存在/root/logs目录,并查看日志信息:

[root@k8s-node1 ~]# ll /root/logs/
total 4
-rw-r--r--. 1 root root 95 Jan 25 04:49 access.log
-rw-r--r--. 1 root root  0 Jan 25 04:47 error.log[root@k8s-node1 ~]# tail -f /root/logs/access.log 
10.244.235.192 - - [25/Jan/2025:09:49:00 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
10.244.235.192 - - [25/Jan/2025:09:49:48 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

 

NFS

  • 虽然 HostPath 可以用于解决数据持久化的问题,但它并不适用于跨节点的数据共享和高可用性场景。一旦 Pod 从一个节点迁移到另一个节点,HostPath 卷中的数据就无法访问。这是因为 HostPath 卷依赖于特定节点上的文件系统,而不是一个独立的网络存储系统。

  • 为了解决这个问题,确保数据在节点迁移时仍然可用,通常推荐使用网络文件存储系统,如 NFS (Network File System) 或 CIFS (Common Internet File System)。这两种协议允许 Pod 访问远程存储系统上的数据,就好像它们是本地文件一样。

  • NFS 是一种网络文件系统协议,它允许客户端计算机访问服务器上的文件和目录,就像它们是本地文件一样。通过设置 NFS 服务器,您可以将 Pod 中的存储直接连接到 NFS 系统上。这样,即使 Pod 从一个节点迁移到另一个节点,只要网络连接正常,Pod 就可以继续访问数据。

需要在每个机器上都安装NFS

yum install nfs-utils -y
[root@k8s-master ~]# mkdir /nfstest
[root@k8s-master ~]# vim /etc/exports
[root@k8s-master ~]# systemctl restart rpcbind.service nfs-server.service[root@k8s-master ~]# vim volume-nfs.yaml 
[root@k8s-master ~]# kubectl apply -f volume-nfs.yaml 
pod/volume-nfs created
[root@k8s-master ~]# kubectl get pod -n test -w 
NAME         READY   STATUS              RESTARTS   AGE
volume-nfs   0/2     ContainerCreating   0          2s
volume-nfs   0/2     ContainerCreating   0          3s
volume-nfs   2/2     Running             0          3s
^C[root@k8s-master ~]kubectl get pod -n test -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
volume-nfs   2/2     Running   0          16s   10.244.36.88   k8s-node1   <none>           <none>
[root@k8s-master ~]# cd /nfstest/
[root@k8s-master nfstest]# ll
total 4
-rw-r--r--. 1 root root 95 Jan 25 05:18 access.log
-rw-r--r--. 1 root root  0 Jan 25 05:18 error.log
[root@k8s-master nfstest]# tai -f access.log 
-bash: tai: command not found
[root@k8s-master nfstest]# tail -f access.log 
10.244.235.192 - - [25/Jan/2025:10:18:20 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
10.244.235.192 - - [25/Jan/2025:10:18:47 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

在node1和node2节点执行如下命令:

[root@k8s-node1 ~]# showmount -e 192.168.58.231
Export list for 192.168.58.231:
/nfstest 192.168.58.0/24

在master节点使用curl命令进行测试,查看master节点/nfstest目录下是否存在访问日志:
 

[root@k8s-master ~]# curl  10.244.36.88
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@k8s-master nfstest]# tail -f access.log 
10.244.235.192 - - [25/Jan/2025:10:18:20 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
10.244.235.192 - - [25/Jan/2025:10:18:47 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

相关文章:

K8S中的数据存储之基本存储

基本存储类型 EmptyDir 描述&#xff1a;当 Pod 被调度到节点上时&#xff0c;Kubernetes 会为 Pod 创建一个空目录&#xff0c;所有在该 Pod 中的容器都可以访问这个目录。特点&#xff1a; 生命周期与 Pod 绑定&#xff0c;Pod 删除时&#xff0c;数据也会丢失。适用于临时…...

编码器和扩散模型

目录 摘要abstract1.自动编码器2.变分编码器&#xff08;VAE&#xff09;3.论文阅读3.1 介绍3.2 方法3.3 结论 4.总结参考文献 摘要 本周学习了自动编码器&#xff08;AE&#xff09;和变分自动编码器&#xff08;VAE&#xff09;的基本原理与实现&#xff0c;分析其在数据降维…...

PAT甲级-1024 Palindromic Number

题目 题目大意 一个非回文数&#xff0c;加上它的翻转数所得的和&#xff0c;进行k次&#xff0c;有可能会得到一个回文数。给出一个数n&#xff0c;限制相加次数为k次&#xff0c;如果小于k次就得到回文数&#xff0c;那么输出该回文数和相加的次数&#xff1b;如果进行k次还…...

FS8405 Release FS0B

复位场景&#xff1a;FS8405正常工作后&#xff0c;RSTB后期产生拉低复位信号。 1 故障与PGOOD、RSTB和FS0B引脚的联系 FS8405出现故障时&#xff0c;会对PGOOD、RSTB和FS0B引脚产生不同的影响&#xff0c;具体影响如下&#xff1a; 橙色标记&#xff0c;反应是不可配置的。…...

IGBT的损耗计算的学习【2025/1/24】

可以通过示波器实测IGBT电压电流波形&#xff0c;然后通过示波器的math功能将电压电流波形乘积后积分求损耗。 软开管&#xff1a;给了导通信号&#xff0c;但是电流并没有从此IGBT流过 IGBT&#xff08;绝缘栅双极晶体管&#xff09;的损耗主要分为 导通损耗 和 开关损耗 两部…...

Unity|小游戏复刻|见缝插针1(C#)

准备 创建Scenes场景&#xff0c;Scripts脚本&#xff0c;Prefabs预制体文件夹 修改背景颜色 选中Main Camera 找到背景 选择颜色&#xff0c;一种白中透黄的颜色 创建小球 将文件夹里的Circle拖入层级里 选中Circle&#xff0c;位置为左右居中&#xff0c;偏上&…...

No.1|Godot|俄罗斯方块复刻|棋盘和初始方块的设置

删掉基础图标新建assets、scenes、scripts文件夹 俄罗斯方块的每种方块都是由四个小方块组成的&#xff0c;很适合放在网格地图中 比如网格地图是宽10列&#xff0c;高20行 要实现网格的对齐和下落 Node2D节点 新建一个Node2D 添加2个TileMapLayer 一个命名为Board&…...

SSM框架探秘:Spring 整合 SpringMVC 框架

搭建和测试 SpringMVC 的开发环境&#xff1a; web.xml 元素顺序&#xff1a; 在 web.xml 中配置 DisPatcherServlet 前端控制器&#xff1a; <!-- 配置前端控制器 --> <servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>…...

2025.1.20——二、buuctf BUU UPLOAD COURSE 1 1 文件上传

题目来源&#xff1a;buuctf BUU UPLOAD COURSE 1 1 目录 一、打开靶机&#xff0c;查看信息 二、解题思路 step 1&#xff1a;上传一句话木马.php文件康康回显 step 2&#xff1a;蚁剑连接 三、小结 一、打开靶机&#xff0c;查看信息 这里提示到了文件会被上传到./uplo…...

【架构面试】三、高可用高性能架构设计

高可用高性能架构设计 面试要点引入&#xff1a;架构原理、分布式技术等是面试必考领域&#xff0c;高可用高性能需求考察频繁。面试常通过询问系统架构设计来考察能力&#xff0c;讲解架构设计过程就是证明系统高可用的过程&#xff0c;其中涉及SLA指标。SLA指标详解 定义与衡…...

11.渲染管线——光栅化阶段

光栅化阶段是渲染管线中的一个关键步骤&#xff0c;负责将3D模型转换成屏幕上的2D像素。用通俗易懂的方式来解释&#xff1a; 通俗解释&#xff1a;光栅化就像把3D模型“投影”到2D屏幕上 想象你是一个画家&#xff0c;正在把3D场景画到2D画布上&#xff1a; 3D模型到2D屏幕的…...

【数据分享】1929-2024年全球站点的逐月平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff01;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2024年全球气象站点…...

二叉树的深度

二叉树深度的定义&#xff1a; 二叉树的深度&#xff08;高度&#xff09;是指从根节点到最远叶子节点的最长路径上的节点数。例如&#xff0c;一个只有根节点的二叉树&#xff0c;其深度为1&#xff1b;如果根节点有两个子节点&#xff0c;且每个子节点又分别有两个子节点&…...

MySQL命令及用法(精华版)

目录 DDL&#xff08;数据定义语言&#xff09; 数据库操作 表操作 DML&#xff08;数据操作语言&#xff09; DQL&#xff08;数据查询语言&#xff09; 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 DCL&#xff08;数据控制语言&#xff09; 用户…...

R语言学习笔记之高效数据操作

一、概要 数据操作是R语言的一大优势&#xff0c;用户可以利用基本包或者拓展包在R语言中进行复杂的数据操作&#xff0c;包括排序、更新、分组汇总等。R数据操作包&#xff1a;data.table和tidyfst两个扩展包。 data.table是当前R中处理数据最快的工具&#xff0c;可以实现快…...

将 OneLake 数据索引到 Elasticsearch - 第二部分

作者&#xff1a;来自 Elastic Gustavo Llermaly 及 Jeffrey Rengifo 本文分为两部分&#xff0c;第二部分介绍如何使用自定义连接器将 OneLake 数据索引并搜索到 Elastic 中。 在本文中&#xff0c;我们将利用第 1 部分中学到的知识来创建 OneLake 自定义 Elasticsearch 连接器…...

Linux——冯 • 诺依曼体系结构

目录 一、冯•诺依曼体系结构原理二、内存提高冯•诺依曼体系结构效率的方法三、当用QQ和朋友聊天时数据的流动过程四、关于冯诺依曼五、总结 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 流程&#…...

Java进阶(一)

目录 一.Java注解 什么是注解&#xff1f; 内置注解 元注解 二.对象克隆 什么是对象克隆? 为什么用到对象克隆 三.浅克隆深克隆 一.Java注解 什么是注解&#xff1f; java中注解(Annotation)又称java标注&#xff0c;是一种特殊的注释。 可以添加在包&#xff0c;类&…...

appium自动化环境搭建

一、appium介绍 appium介绍 appium是一个开源工具、支持跨平台、用于自动化ios、安卓手机和windows桌面平台上面的原生、移动web和混合应用&#xff0c;支持多种编程语言(python&#xff0c;java&#xff0c;Ruby&#xff0c;Javascript、PHP等) 原生应用和混合应用&#xf…...

Qt 5.14.2 学习记录 —— 이십 QFile和多线程

文章目录 1、QFile1、打开2、读写3、关闭4、程序5、其它功能 2、多线程1、演示2、锁 3、条件变量和信号量 1、QFile Qt有自己的一套文件体系&#xff0c;不过Qt也可以使用C&#xff0c;C&#xff0c;Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。 管理写入读…...

基于光伏出力不确定性的梯级水光互补系统短期优化调度模型及Matlab代码复现研究报告

1023-(文章复现)梯级水光互补系统最大化可消纳电量期望短期优化调度模型matlab代码 参考资料《梯级水光互补系统最大化可消纳电量期望短期优化调度模型》 文中考虑光伏出力不确定性&#xff0c;以整体可消纳电量期望最大为目标&#xff0c;提出了梯级水光互补系统的短期优化调度…...

LiuJuan Z-Image Generator参数详解:CFG Scale=2.0与12步生成高质量人像

LiuJuan Z-Image Generator参数详解&#xff1a;CFG Scale2.0与12步生成高质量人像 想用AI生成一张惊艳的人像照片&#xff0c;却发现要么细节模糊&#xff0c;要么风格怪异&#xff0c;怎么调参数都达不到理想效果&#xff1f;如果你也遇到过类似问题&#xff0c;那今天这篇文…...

OpenClaw常用命令与在Windows下安装Tavily-Search

目录1. Windows安装Tavily-Search2. 启动与关闭2.1 正常流程2.2 故障处理3. 模型切换1. Windows安装Tavily-Search 确保目录位于C:\Users\用户名运行命令npx clawhub install openclaw-tavily-search在C:\Users\用户名\.openclaw创建文件.env用记事本打开.env&#xff0c;写入…...

OpenClaw故障自愈方案:Qwen3-32B镜像异常重启监控

OpenClaw故障自愈方案&#xff1a;Qwen3-32B镜像异常重启监控 1. 问题背景与解决思路 上周我的OpenClaw自动化助手突然"罢工"了——原本应该定时执行的日报生成任务没有按时完成。排查后发现是底层Qwen3-32B模型服务因OOM异常退出。这种情况在长期运行的AI服务中并…...

Elasticsearch踩坑记录:scaled_float字段查询结果和你想的不一样?

Elasticsearch中的scaled_float&#xff1a;为什么你的查询结果总是不准确&#xff1f; 刚接触Elasticsearch的开发者经常会遇到一个令人困惑的现象&#xff1a;明明存储的是精确的浮点数&#xff0c;查询时却返回了意料之外的结果。这背后往往与scaled_float字段类型的特殊处理…...

实战指南:用快马为django项目生成定制化vmware开发环境,开箱即用

实战指南&#xff1a;用快马为Django项目生成定制化VMware开发环境&#xff0c;开箱即用 在实际开发场景中&#xff0c;虚拟机环境需要与具体项目需求紧密结合。最近我在做一个Django项目时&#xff0c;发现每次换电脑或重装系统都要重新配置开发环境&#xff0c;特别浪费时间…...

基于PSO算法的海陆空多栖无人机路径规划探索

PSO算法&#xff0c;空中机器人路径规划&#xff0c;无人机路径规划 海陆空多栖环境路径规划&#xff0c;考虑海洋和大气中的能源消耗不同&#xff0c;还原环境特性&#xff0c;粒子群PSO算法在如今科技飞速发展的时代&#xff0c;无人机的应用场景越发广泛&#xff0c;从简单的…...

2-1爬取豆瓣电影数据

数据来源网站&#xff1a;https://movie.douban.com/chart import requests import json import timedef fetch_douban():all_movies []start 0limit 20print("开始爬取豆瓣电影榜单")headers {"User-Agent": "Mozilla/5.0","Referer&…...

STM32温湿度监控系统设计与实现

## 1. 工业生产线温湿度监控系统设计### 1.1 系统架构设计 基于STM32F103C8T6微控制器的工业级温湿度监控系统采用三层架构&#xff1a; - **感知层**&#xff1a;3个DHT22数字温湿度传感器 - **控制层**&#xff1a;STM32F103C8T6最小系统板 - **云平台层**&#xff1a;ESP826…...

HBuilderX + 极光推送踩坑实录:免费版为啥息屏收不到通知?手把手教你配置与避坑

HBuilderX与极光推送免费版避坑指南&#xff1a;破解息屏通知失效难题 早上八点&#xff0c;你的咖啡还没喝完&#xff0c;测试组的消息就炸开了锅——"昨晚推送的版本在息屏状态下根本收不到通知&#xff01;"作为使用HBuilderX开发跨平台应用的团队&#xff0c;这个…...