Linux中ES的安装
文章目录
- 一、ES是什么
- 1.1、ES概念介绍
- 1.2、技术架构
- 1.2.1、Lucene介绍
- 1.3、ES的工作原理
- 1.4、ES的适用场景
- 二、安装前的配置
- 2.1、创建普通用户
- 2.2、调整文件描述符数量和虚拟内存
- 2.3、设置shell会话的资源限制(软限制和硬限制)
- 2.4、增加虚拟内存的设置
- 2.5、使虚拟内存配置立即生效
- 三、ES安装
- 3.1、下载与解压
- 3.2、配置文件修改
- 3.3、依赖安装
- 3.4、启动ES服务
一、ES是什么
1.1、ES概念介绍
ES(Elasticsearch)是一种基于Lucene的搜索服务器,具有实时分布式存储、搜索和分析引擎的功能。
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,可以快速地对大数据进行存储、搜索和分析。它是基于Java开发的,作为Apache许可条款下的开放源码发布,成为流行的企业级搜索引擎。
ES不仅具备强大的搜索能力,还支持模糊查询和相关性搜索,这使得它在处理大量数据时表现出色。相对于传统数据库,ES能够更高效地进行模糊查询,因为它内部使用倒排索引(inverted index)结构,这种结构特别适用于快速的文本搜索。倒排索引将数据分词并建立索引,使得搜索时能够快速找到相关文档,而不是遍历整个数据集。
1.2、技术架构
ES的技术架构是一个高度可扩展的分布式系统,旨在处理大规模的数据搜索和分析任务。
ES的底层依赖于Lucene,这是一个高性能、全功能的搜索引擎库。然而,Lucene的使用门槛较高,需要开发者具备一定的信息检索知识,并且直接集成到应用程序中。为了简化这一过程,ES应运而生,它使用Java编写,内部采用Lucene进行索引和搜索,并提供一套简单的RESTful API供用户使用。
在ES的架构中,集群不需要依赖任何外部组件即可实现高可用性(HA)。集群中的节点通过自建的选举算法来选择master节点,无需额外的系统如Zookeeper。
-
节点类型:
- Master节点:负责保存和更新集群的元数据,包括集群配置、节点信息、索引设置等。这些信息同步到所有节点,以保持数据的一致性。
- Data节点:负责数据的存储和查询操作。这些节点实际持有数据分片,执行数据的读写操作。
- Coordinator节点:负责路由索引请求和聚合搜索结果集,以及分发批量索引请求,起到负载均衡的作用。
Ingestor节点:类似于Logstash,用于处理和转换输入数据。
-
Master选举:
- 选举策略:如果集群中已存在master,则认可该master;如果不存在,则从具有master资格的节点中选举出ID最小的节点作为master。
- 选举时机:包括集群启动时和现有master离开集群时。后台线程会定时检测master的状态,若master异常离开,则会重新进行选举。
- 选举流程:通过“过半原则”避免脑裂问题,即任何新的master必须得到超过半数节点的票数才能当选,确保集群稳定性。
-
数据存储:
- 分片与副本:ES通过分片方式实现数据的分布式存储,每个索引被分成若干个分片,均匀分布在不同节点上。同时,通过副本分片提高数据的可用性和并发处理能力。
- 写入过程:数据先写入主分片,成功后异步复制到副本分片。通过translog保证数据的持久性,确保服务器宕机时数据不丢失。
-
数据查询:
- 查询过程:任意节点都可以作为查询请求的协调节点,将请求转发到相关分片进行查询,最后汇总各个分片的结果返回给客户端。
- 负载均衡:通过合理配置分片数量和副本数,实现数据存储的负载均衡和高可用性。
1.2.1、Lucene介绍
Lucene是一个高性能、可扩展的开源Java库,用于实现全文检索和搜寻功能。
Lucene最初由Doug Cutting开发,他也是Hadoop的创始人之一。作为一个开源项目,Lucene主要由Apache软件基金会支持,并在Java开发社区中广泛使用。它提供了一个强大的应用程序接口(API),允许开发者在自己的应用程序中实现全文索引和搜索功能。
Lucene的核心功能包括全文搜索和索引建立,这两者是实现高效数据检索的基础。在全文搜索中,Lucene能够对非结构化数据进行快速查找和匹配,这得益于其内部使用的“倒排索引”结构。倒排索引是一种数据结构,通过将文档内容分词并建立索引,从而快速定位相关文档位置,而不需要遍历整个数据集。
-
索引过程
- 分词组件(Tokenizer):处理输入的文档,将其分解成单词或词元(Tokens),去除标点符号和停用词(如英文中的"the"、"an"等)。例如,文章 “Tom lives in Guangzhou, I live in Guangzhou too.” 经过分词后得到的结果为:[Tom] [lives] [Guangzhou] [I] [live] [Guangzhou]。
- 语言处理组件:对得到的词元进行进一步处理,如转换为小写、词根还原(reduce to root form)等。处理完的结果为:[tom] [live] [guangzhou] [i] [live] [guangzhou]。
- 索引组件(Indexer):将处理后的词构建成索引,索引结构包含关键词、文章号[出现频率]、出现位置等信息。例如,关键词 “guangzhou” 可能被存储为:
关键词 | 文章号[出现频率] | 出现位置 |
---|---|---|
guangzhou | 1[2] | 3, 6 |
-
搜索过程
- 词典查找:用户输入查询字符串后,Lucene会在词典中进行二元查找,定位到该词的频率文件和位置文件。
- 结果返回:通过指针读出所有文章号,并在具体文章中根据出现位置找到该词,最终返回结果给用户。这种索引方式使得Lucene在首次建立索引时可能较慢,但之后的搜索会非常迅速。
Lucene不仅提供强大的索引和搜索能力,还具有高扩展性。其索引结构主要采用FST(有限状态机)实现,这一结构具有查询速度快、内存占用少、结合内存和磁盘存储的优点。这使得Lucene能够支持大规模数据的检索,同时在内存利用率和查询速度上都有优异表现。
1.3、ES的工作原理
ES(Elasticsearch)的工作原理基于分布式、可扩展的架构和倒排索引机制,能够实现高效的数据存储和检索功能。
- 分布式架构
- 节点类型:ES集群由多个节点组成,这些节点可以分成不同的类型,包括Master节点、Data节点、Coordinator节点和Ingestor节点。Master节点负责保存和更新集群的元数据信息,如集群配置、节点信息、索引设置等。Data节点则负责数据的存储和查询操作。
- 分片与副本:为了支持大规模数据,ES将索引划分为多个分片,每个分片可以独立存储和处理数据。同时,每个分片可以有多个副本,用于提供数据冗余、故障恢复和读取负载均衡。
- 数据写入流程
- 内存缓冲区与Translog:当文档被写入ES时,它们首先被放置在内存中的一个缓冲区中,并同时记录到事务日志(Translog)中以确保数据的持久性。
- 刷新操作:随着时间的推移,缓冲区中的数据会积累到一定量,此时需要将这些数据刷新(Refresh)到Lucene的索引中,形成新的段(Segment)。刷新操作会创建一个新的Lucene段,并将缓冲区中的数据写入这个段中。
- Flush操作:与刷新不同,Flush操作会将内存中的数据以及Translog中的更改持久化到磁盘上。这是通过一个称为Flush的操作完成的,该操作将所有缓冲的数据和Translog内容写入磁盘。
- 数据搜索过程
- 倒排索引:ES使用Lucene作为其底层的搜索库,Lucene构建倒排索引来加速搜索过程。倒排索引将文档中的单词映射到包含这些单词的文档列表,从而实现快速查找和检索。
- 查询执行:当客户端发送搜索请求时,请求首先到达一个协调节点。协调节点解析查询语句,确定需要访问的分片,并将请求转发给相应的数据节点。数据节点在本地执行查询,并将结果返回给协调节点,协调节点聚合来自各个数据节点的结果,并进行排序、分页等处理,最终将结果返回给客户端。
- 倒排索引结构
- 词条:索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文则是分词后的一个词。
- 词典:是词条的集合,记录单词到倒排列表的关联关系,一般通过B+树或哈希表实现。
- 倒排列表:记录了单词对应的文档结合,由倒排索引项组成,包括文档ID、词频(TF)、位置和偏移信息,用于实现相关性评分、语句搜索和高亮显示。
- 数据副本机制
- 同步机制:一旦文档被写入到主分片,主分片会开始将数据同步到其对应的副本分片上。这个过程是异步进行的,因此写入请求可以在主分片处理完毕后就返回给客户端。
- 写入确认:当主分片和足够数量的副本分片都成功写入了文档后,协调节点会收到确认信息并向客户端发送成功的响应。
ES通过其分布式架构、倒排索引机制以及复杂的写入和查询流程,确保了数据的高效存储和快速检索。这种设计不仅提高了系统的可用性和稳定性,还带来了良好的扩展性和灵活的配置选项,适应了现代大数据环境下的各种复杂应用场景。
1.4、ES的适用场景
-
全文搜索
- 网站搜索:ES在网站搜索中表现出色,能够提供快速、准确的搜索结果。例如,电商网站的商品搜索功能可以通过ES实现,支持对商品名称、描述、类别等信息的高效检索。
- 文档管理系统:在文档管理系统中,ES能够实现对大量文档的快速搜索和分类。例如,企业的内部知识库可以通过ES来构建,员工可以迅速找到需要的资料。
- 电子商务搜索:电商平台通过ES提供强大的商品搜索功能,用户可以进行关键词搜索、过滤和排序,快速找到所需商品。例如,京东、淘宝和拼多多等电商平台都使用ES来处理海量商品数据的搜索。
-
实时分析
- 实时监控系统:ES能够实时处理和分析数据,适用于实时监控系统。例如,企业的实时销售数据可以通过ES进行追踪和分析,帮助管理层及时调整销售策略。
- 业务分析:在业务分析中,ES提供了低延迟的数据存储和查询功能,使得企业能够实时分析业务数据,发现潜在的机会和问题。例如,金融行业可以利用ES进行交易数据的实时分析和预警。
- 物联网数据处理:ES在物联网场景中也有广泛应用,能够处理来自传感器和设备的大量实时数据。例如,工厂的生产线可以通过ES监控设备状态,实时分析生产数据,提高生产效率。
-
日志和事件数据分析
- 系统监控:ES常用于系统监控,通过收集和分析各种日志数据,帮助识别系统问题和优化系统性能。例如,公司的IT部门可以使用ES构建日志分析平台,实时监控服务器和应用程序的运行状态。
- 应用日志分析:在应用日志分析中,ES能够汇总和分析来自不同来源的应用日志,帮助开发者定位问题和改进应用。例如,软件开发团队可以使用ES分析应用的错误日志,快速定位并修复bug。
- 安全事件管理:ES在安全事件管理中也有重要应用,能够收集和分析安全事件数据,帮助企业及时发现和应对安全威胁。例如,网络安全公司可以使用ES构建SIEM(安全信息和事件管理)系统,实时监测网络攻击和异常行为。
-
机器学习
- 异常检测:ES的机器学习功能可以自动检测数据中的异常和异常行为,有助于及时发现潜在的问题。例如,银行的信用卡欺诈检测系统可以通过ES来实现,自动识别异常交易行为。
- 预测维护:在工业领域,ES的机器学习功能可以用于预测设备的维护需求,减少设备故障和停机时间。例如,制造企业可以利用ES分析设备的运行数据,预测并提前进行设备维护。
- 用户行为分析:在用户行为分析中,ES可以分析用户的行为数据,挖掘用户的兴趣和偏好,提升用户体验和营销效果。例如,新闻推荐系统可以利用ES分析用户的阅读历史,推荐感兴趣的内容。
-
地理数据应用
- 地图服务:ES支持地理空间索引和搜索,可以在地图服务中应用,提供基于位置的搜索和可视化功能。例如,旅游平台可以使用ES构建地图搜索功能,帮助用户查找附近的景点和餐馆。
- 物流管理:在物流管理中,ES可以用于优化配送路线和调度。例如,快递公司可以利用ES实现智能路由规划,提高配送效率。
- 位置服务:位置服务中,ES可以帮助管理和分析大量的地理数据,提供基于位置的服务和推荐。例如,共享单车平台可以使用ES管理车辆的位置信息,优化车辆分布和调度。
-
安全信息和事件管理
- 网络安全监控:ES在网络安全监控中扮演着重要角色,能够实时分析网络流量和日志,识别潜在的网络威胁。例如,企业的安全团队可以使用ES构建网络安全防护系统,实时监测并应对网络攻击。
- 入侵检测:在入侵检测系统中,ES能够分析各种安全事件数据,识别异常行为和潜在的入侵行为。例如,金融机构可以使用ES构建入侵检测系统,保护客户资金和数据安全。
- 威胁分析:ES还可以用于威胁分析,帮助安全专家分析复杂的安全事件,找出潜在的攻击模式和源头。例如,国家安全部门可以使用ES分析大量的网络情报数据,识别并防范潜在的恐怖威胁。
二、安装前的配置
2.1、创建普通用户
由于ES禁止使用root用户启动,需要创建一个普通用户来运行ES
- 创建一个组
[root@iZbp129gypomkv7w7deqpqZ ~]# groupadd elasticsearch
- 创建一个普通用户并配置密码
[root@iZbp129gypomkv7w7deqpqZ ~]# useradd esroot
[root@iZbp129gypomkv7w7deqpqZ ~]# passwd esroot
Changing password for user esroot.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.
- 将新用户添加到elasticsearch用户组
[root@iZbp129gypomkv7w7deqpqZ ~]# usermod -G elasticsearch esroot
- 给esroot用户设置sudo权限
在 在root ALL=(ALL) ALL一行下面添加esroot ALL=(ALL) ALL
[root@iZbp129gypomkv7w7deqpqZ /]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
esroot ALL=(ALL) ALL
2.2、调整文件描述符数量和虚拟内存
[root@iZbp129gypomkv7w7deqpqZ /]# ulimit -n 65536
[root@iZbp129gypomkv7w7deqpqZ /]# ulimit -u 4096
2.3、设置shell会话的资源限制(软限制和硬限制)
在文本最后添加下面两段代码
[root@iZbp129gypomkv7w7deqpqZ /]# vi /etc/security/limits.conf
shcms soft nofile 65536
shcms hard nofile 65536
2.4、增加虚拟内存的设置
添加vm.max_map_count=262144
[root@iZbp129gypomkv7w7deqpqZ /]# vi /etc/sysctl.conf
vm.swappiness = 0
kernel.sysrq = 1
vm.max_map_count=262144net.ipv4.neigh.default.gc_stale_time = 120# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_slow_start_after_idle = 0
2.5、使虚拟内存配置立即生效
[root@iZbp129gypomkv7w7deqpqZ /]# sysctl -p
vm.swappiness = 0
kernel.sysrq = 1
vm.max_map_count = 262144
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_slow_start_after_idle = 0
三、ES安装
3.1、下载与解压
- 创建一个software文件夹
[root@iZbp129gypomkv7w7deqpqZ home]# mkdir software
- 下载
[root@iZbp129gypomkv7w7deqpqZ software]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
--2024-08-11 14:56:47-- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
Resolving artifacts.elastic.co (artifacts.elastic.co)... 34.120.127.130, 2600:1901:0:1d7::
Connecting to artifacts.elastic.co (artifacts.elastic.co)|34.120.127.130|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 296454172 (283M) [application/x-gzip]
Saving to: ‘elasticsearch-7.6.1-linux-x86_64.tar.gz’100%[================================================================================================================================================>] 296,454,172 6.65MB/s in 37s 2024-08-11 14:57:25 (7.56 MB/s) - ‘elasticsearch-7.6.1-linux-x86_64.tar.gz’ saved [296454172/296454172]
- 解压
[root@iZbp129gypomkv7w7deqpqZ software]# mkdir /opt/es
[root@iZbp129gypomkv7w7deqpqZ software]# ls /opt
es
[root@iZbp129gypomkv7w7deqpqZ software]# tar -zxvf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /opt/es/
elasticsearch-7.6.1/
elasticsearch-7.6.1/lib/
elasticsearch-7.6.1/lib/elasticsearch-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-x-content-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-cli-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-core-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-secure-sm-7.6.1.jar
elasticsearch-7.6.1/lib/elasticsearch-geo-7.6.1.jar
elasticsearch-7.6.1/lib/lucene-core-8.4.0.jar
3.2、配置文件修改
- 需要先切换到esroot用户
[root@iZbp129gypomkv7w7deqpqZ /]# su - esroot
[esroot@iZbp129gypomkv7w7deqpqZ ~]$
- 创建log和data目录
[esroot@iZbp129gypomkv7w7deqpqZ ~]$ sudo mkdir -p /opt/es/elasticsearch-7.6.1/log
[sudo] password for esroot:
[esroot@iZbp129gypomkv7w7deqpqZ ~]$ sudo mkdir -p mkdir -p /opt/es/elasticsearch-7.6.1/data
[esroot@iZbp129gypomkv7w7deqpqZ ~]$ ls /opt/es/elasticsearch-7.6.1/
bin config data jdk lib LICENSE.txt log logs modules NOTICE.txt plugins README.asciidoc
[root@iZbp129gypomkv7w7deqpqZ ~]# cd /opt/es/elasticsearch-7.6.1/config
[root@iZbp129gypomkv7w7deqpqZ config]# ls
elasticsearch.yml jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles
[root@iZbp129gypomkv7w7deqpqZ config]# rm -rf elasticsearch.yml
[root@iZbp129gypomkv7w7deqpqZ config]# ls
jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles
[root@iZbp129gypomkv7w7deqpqZ config]# vi elasticsearch.yml
[root@iZbp129gypomkv7w7deqpqZ config]# cat elasticsearch.yml
cluster.name: my-cluster
node.name: my-node
path.data: /opt/es/elasticsearch-7.6.1/data
path.logs: /opt/es/elasticsearch-7.6.1/log
network.host: 0.0.0.0
- cluster.name: my-cluster:这是设置集群名称,用于标识这个 Elasticsearch 集群。所有的节点都将共享这个名称。
- node.name: my-node:这是设置每个节点的名称。在集群中,每个节点都需要一个唯一的名称,以便能够相互识别
- path.data: /opt/es/elasticsearch-7.6.1/data:这是设置数据文件的存储路径。Elasticsearch 将使用这个路径来存储索引和快照
- path.logs: /opt/es/elasticsearch-7.6.1/log:这是设置日志文件的存储路径。Elasticsearch 将使用这个路径来存储日志文件
- network.host: 0.0.0.0:这是设置节点的网络主机。这意味着节点将监听所有网络接口。这对于分布式环境中的节点是必要的,因为它们需要能够与其他节点通信
jvm.options文件可以根据自己的实际情况修改配置:-Xms2g 是一个 Java 虚拟机(JVM)选项,用于设置Java堆的初始大小(最小值)。在这个例子中,初始堆大小被设置为 2GB(2048MB)。
3.3、依赖安装
ES的某些版本对JDK有特定要求,需要确保系统中JDK的版本与ES版本兼容。ES 7.x以上通常内置了JDK环境,不需要本地JDK支持。如果需要指定JDK版本,可以在ES的bin目录中修改elasticsearch脚本,设置正确的JAVA_HOME路径。
- 安装java环境
[root@iZbp129gypomkv7w7deqpqZ yum.repos.d]# vi CentOS-Base.repo
[root@iZbp129gypomkv7w7deqpqZ yum.repos.d]# cat CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirror.centos.org/centos/$releasever/os/$basearch/mirror.lst
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
[root@iZbp129gypomkv7w7deqpqZ yum.repos.d]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel extras mysql-connectors-community mysql-tools-community mysql57-community updates
Cleaning up list of fastest mirrors
[root@iZbp129gypomkv7w7deqpqZ yum.repos.d]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
[root@iZbp129gypomkv7w7deqpqZ /]# yum install java-11-openjdk-devel
[root@iZbp129gypomkv7w7deqpqZ /]# source /etc/profile
[esroot@iZbp129gypomkv7w7deqpqZ /]$ vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
3.4、启动ES服务
[esroot@iZbp129gypomkv7w7deqpqZ /]$ su esroot
[esroot@iZbp129gypomkv7w7deqpqZ /]$ cd /opt/es/elasticsearch-7.6.1/bin
[esroot@iZbp129gypomkv7w7deqpqZ /]$ ./elasticsearch
相关文章:
Linux中ES的安装
文章目录 一、ES是什么1.1、ES概念介绍1.2、技术架构1.2.1、Lucene介绍 1.3、ES的工作原理1.4、ES的适用场景 二、安装前的配置2.1、创建普通用户2.2、调整文件描述符数量和虚拟内存2.3、设置shell会话的资源限制(软限制和硬限制)2.4、增加虚拟内存的设置…...
Redis远程字典服务器(5) —— hash类型详解
目录 一,hash基本情况 二,hash常用命令详解 2.1 hset,hget,hexists,hdel 2.2 hexists,hdel 2.3 hkeys,hvals 2.4 hgetall,hmget 2.5 hlen,hsetnx 2.6 hincrby&am…...
MySQL | 行锁——记录锁、间隙锁 、临键锁、插入意向锁
1、InnoDB中的行锁 行锁(Row Lock) 也称为记录锁,顾名思义,就是锁住某一行(某条记录row)。需要注意的是,MySQL服务器层并没有实现行锁机制,行级锁只在存储引擎层实现。 优点&#x…...
【网络编程】TCP通信基础模型实现
tcpSer.c #include <myhead.h> #define SER_IP "192.168.119.143" // 设置IP地址 #define SER_PORT 6666 // 设置端口号 int main(int argc, const char *argv[]) {// 1.创建socketint serfd socket(AF_INET, SOCK_STREAM, 0);// 参数1表示ipv4// 参数2表…...
css rem之2024
话题开始前 我们都知道1rem是等于html fontSize标签的字体大小的,我们主要用来做移动端网页设计稿等比例在手机上面的显示。 看到的问题 这个html fontsize的大小是通过js动态计算的,而这个js的运行时晚于html渲染的,所以会导致一个问题&am…...
python自动化笔记:pytest框架
目录 一、pytest介绍二、测试用例命名规则2.1、pytest命名规则2.2、python命名规范 三、pytest运行方式3.1、主函数方式3.2、命令行方式3.3、通过pytest.ini的配置文件运行(常用) 四、跳过测试用例4.1 无条件跳过4.2 有条件跳过 五、用例的前后置&#x…...
wpf 路径动画 举例
先,我们需要在XAML中定义一个Path,这个Path将定义动画的路线。然后,我们将使用DoubleAnimationUsingPath来沿着这个路径移动一个元素(比如一个矩形)。 <Window x:Class"WpfApp.MainWindow" xmlns"…...
【C++】classes and object 2.8 取地址及const取地址操作符重载
这两个默认成员函数一般不用重新定义 ,编译器默认会生成。 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; class Date { public:Date* operator&(){return this;}const Date* operator&()const{return this;} privat…...
milvus helm k8s开启监控
https://milvus.io/docs/monitor.md 文章写的很清晰 ,我这边做一下个人补充,初版可能只是配置,具体的grafana 监控报表后期补一下。 架构如下: values.yaml 配置 enabled: true 改为true metrics:enabled: trueserviceMonitor:…...
牛奶饮用学习笔记
1. 常见牛奶类型 1.1 蒙牛-每日鲜语-0脂肪鲜牛奶 项目每100mL NRV%能量146kJ 能量计算 250 mL 146 kJ / 100 mL 365 kJ 250\text{mL}\times146\text{kJ}/100\text{mL} 365\text{kJ} 250mL146kJ/100mL365kJ 1.2 伊利-舒化-高钙型无乳糖牛奶 项目每100mL NRV%能量269kJ …...
php防止页面重复刷新或者重复提交
2.核心代码 显示的逻辑: //获取防止刷新的唯一标识符,start $intFlag substr(md5(time()),6); $strFlag BAOXIAOSS_.$my_user_id.$intFlag; $smarty->assign(check_is_agin_post, $strFlag); //获取防止刷新的唯一标识符,end注意:前端页面提交加入…...
Springboot3 配置sql打印到控制台
一、pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>3.1.2</version></dependency> 二、application.yml com.lingyang.system # log4j2配…...
深入理解 GO 语言并发
1. 使用并发 在深入了解 Go 如何处理并发之前,先查看并发的概念。在计算机发展的早期阶段,计算机系统只有一个处理器负责执行所有指令。由于这种体系结构,计算机程序被编写成以串行的方式运行,在这种方式下,程序按照预定义的顺序逐个指令地执行。 随着计算机程序变得越来越…...
leetcode39组合总和
题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选…...
【JPCS独立出版,EI稳定检索】2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024,9月27-29)
2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024)将于2024年9月27-29日在中国成都举办。 此次会议将围绕工业机器人、机电技术、机械及制造等领域的最新研究成果展开讨论,并广泛邀请了国内外领域内的著名专家与学者。会议旨在搭建一个…...
Fal.ai Flux 1-Pro/Viva.ai/哩布哩布AI:AI绘图部分免费工具+原图提示词Prompt
目录 #1 找软件 #2 懂提示词 #3 更难的一步,会英文 我个人认为,想要玩文生图,你要会3个步骤: #1 找软件 主流文生图软件:Midjourney、Stable Diffusion、Dall-E 3 巧了,我用的都是小众、免费的画笔工…...
C++学习笔记----2、使用C++进行优雅编程(十)---- 格式化
许多人因为编程风格的问题被搞得焦头烂额,就因为对于在if中使用几个空格争论不休,导致友谊的小船说翻就翻。如果公司有相应的编程规范,只能说你比较幸运。因为有可能你不喜欢这些规范,但做为一个正常人来讲,至少有规范…...
双指针| Java | (hot100) 力扣283, 11, 15, 42做题总结
leetcode 11 盛最多水的容器 双层for循环暴力 超出时间限制 class Solution {public int maxArea(int[] height) {int h0;int v0;for(int i0; i<height.length; i) {for(int ji1; j<height.length; j) {h Math.min(height[i],height[j]);v Math.max(v, h*(j-i));}}…...
matlab求解方程
【MATLAB】求解含有三角函数的方程_matlab求解三角函数方程-CSDN博客 Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别_matlab root-CSDN博客 非线性方程(组):MATLAB内置函数 solve, vpasolve, fsolve, fzero, roots [MATLAB] - GentleMin - …...
MySQL基础--视图,存储过程
介绍 视图是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的 SQL 逻辑,不保存查询结果,所以我…...
学习记录第二十六天
进程运行 1,子进程和父进程做相同的事----创建子进程 执行任务 2,子进程做与父进程不同的事 ----fork exec exec族 l VS v :主要是第二个参数的传参方式不同 p :表示寻找可执行文件 是通过PATA环境变量 e : 表示可以给…...
Polars简明基础教程十一:可视化(一)
到本次讲座结束时,你将能够: 使用Polars的内部plot方法从Polars创建图表使用外部绘图库从Polars创建图表了解这些库如何支持Polars 通常,需要可视化库的最新版本来实现最大程度的兼容性 import polars as plimport hvplot as hv import ma…...
实战项目:贪吃蛇游戏的实现(上)
前言 Hello, 今天我们来一起完成一个实战项目:贪吃蛇。 相信大家都不会对这个游戏感到陌生,贪吃蛇游戏是久负盛名的游戏,他和俄罗斯方块,扫雷游戏等游戏位列世界经典游戏之列。这次我们旨在通过实战项目贪吃蛇的实现,…...
SHT30温湿度传感器全解析——概况,性能,MCU连接,样例代码
常见温湿度传感器测量范围:(价格仅供参考,具体性能要看折线图) 型号DHT11DHT20AHT10AHT20AHT30SHT20价格¥ 2.49¥3.04¥ 1.9¥1.4¥ 1.3¥5.5温度测量范围20—90%RH0—100%RH0—100%RH0—…...
SQL server 同环比计算模板
1、计算 月 年 季度的环比和同比 计算公式如下: 环比增长率 (本期数 - 上期数) / |上期数| 100% 同比增长率 (本期数 - 同期数) / |同期数| * 100% --- dbo.ads_erp_finance_gross_profit_actual_invoice_yoy_m…...
python发送外部请求
在Python中,服务器发送外部请求是一个常见的操作,尤其是在需要集成不同服务或API时。有多种库可以帮助你完成这项任务,但最流行和广泛使用的库之一是requests。以下是如何使用requests库在Python服务器中发送外部请求的基本步骤: …...
c++并发编程面试题
1. C中lock_guard和unique_lock的区别? 在C中,lock_guard和unique_lock都是用于管理互斥锁的类,它们提供了一种 RAII(Resource Acquisition Is Initialization)机制来确保锁在作用域结束时自动释放。尽管它们的目的相…...
K8S上安装LongHorn(分布式块存储) --use
要在 Kubernetes上安装 LongHorn,您可以按照以下步骤进行操作: 准备工作 参考 官网教程将LongHorn只部署在k8s-worker5节点上。https://github.com/longhorn/longhorn 安装要求 Each node in the Kubernetes cluster where Longhorn is installed must f…...
2024年前端技术发展趋势分析
2024年的前端技术发展趋势继续受到快速变化的技术环境和不断增长的用户期望的影响。以下是2024年前端技术发展的几个关键趋势: 1. Web 组件和自定义元素 Web 组件技术(包括 Shadow DOM、HTML Templates 和 Custom Elements)正在成为构建可重…...
spring boot 笔记大杂烩
一,springboot项目创建 springboot创建时idea会打开start.spring.io失败报错 可以手动打开这个页面,然后选择maven项目,然后修改group和name名然后添加依赖web,然后生成项目包,解压缩后用idea打开就能用了 运行后报错…...
怎么做网站底部版权信息/目前最牛的二级分销模式
开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> JavaScript Web 应用程序和 Web 服务器容易受到称为正则表达式(regex)拒绝服务(ReDoS)的特定类型的漏洞/攻击。当攻击者将大量复杂的…...
防疫网站网页设计/网络营销推广8种方法
词向量模型 Word2Vec Skip-gram 模型是图嵌入模型 Random Walk 中要使用到的模型,因此先学习 Word2Vec 神经网络语言模型 NNLM 目标:根据给定的词序列,预测下一个会出现的词,如给定 “他”,“是”,“一个…...
深圳酒店设计公司/班级优化大师官方网站
接前贴:今年(2021年)7月4日至24日,我指导电子信息工程专业18级的12位同学进行小学期的课程实践。其中,王同学、万同学、高同学等3位同学完成了基于广东高云(GOWIN Semiconductor)FPGA的DDS实现。…...
杭州学网站建设/seo怎么做?
整体目标 在这一篇中,我们将使用Jenkins在此基础上构建一条完整的持续交付流水线,并且让团队不同成员能够基于该流水线展开基本的协作。开发: 持续提交代码并能够通过持续集成(CI)过程快速获取反馈,在通过C…...
温州 网站建设/站长之家新网址
电脑蓝屏是在上网的时候再常见到的现象了,造成电脑蓝屏的原因很多,所以微软在操作系统中设计了蓝屏代码,让大家电脑在出现蓝屏的时候能够及时的发现是什么原因造成了蓝屏。一般蓝屏代码都位于屏幕提示文字的第一段或者倒数第三段,…...
网站如何验证登陆状态/湖北seo公司
参数化决策树 在参数化决策树之前,我们先来简单复习一下回归树的原理。对于决策树而言,每个被放入模型的任意样本最终一个都会落到一个叶子节点上。对于回归树,通常来说每个叶子节点上的预测值是这个叶子节点上所有样本的标签的均值。但值得…...