【clickhouse】Centos7部署Clickhouse数据库

news2024/11/17 17:23:59

 

目录

1.clickhouse数据库安装说明

2.clickhouse数据库安装介质

3.clickhouse数据库安装前配置

3.1配置操作系统yum源(可选)

3.2配置NTP客户端

3.3配置sudo、NetworkManager、firewalld、selinux

3.4创建用户

3.5修改系统参数与限制

3.6修改主机名称与host文件

3.7关闭透明大页、调整CPU固定高频、关闭SWAP

4. clickhouse数据库安装

4.1创建目录

4.2安装数据库软件

4.3编辑配置文件

4.4启动数据库

4.5创建数据副本表

4.6创建分布式表

5. zookeeper集群安装

5.1安装要求

5.2创建目录

5.3 安装zookeeper,编辑配置文件

5.4 创建 zookeeper 用户

5.5 启动zookeeper集群


1.clickhouse数据库安装说明

clickhouse提供了集群机制支持,集群有两种实现方式,一是数据副本,即全量数据冗余到另外的机器,提供高可用保证。二是分布式表,即以表为单位将数据分散到多个节点上保存,用以解决单机存储不足问题。

生产环境通常使用数据副本架构,确保数据安全与生产业务的高可用性;对于分布式表,由于数据分布在多个节点,查询可能从多节点获取数据再组合加工,因网络延时等原因查询效率相对较低,也有数据不一致的风险,适用场景较少。

部署clickhouse采用数据副本架构,2台机器作为clickhouse专用服务器,即2个节点保存相同数据;3台机器部署zookeeper集群,为clickhouse数据同步提供服务。因zookeeper对数据延迟非常敏,而clickhouse数据库可能占用所用可用的系统资源,所以强烈推荐生产环境zookeeperclickhouse使用不同的服务器部署,或者已有zookeeper集群且未超载的情况下,复用现有的zookeeper

部署clickhouse所需服务器资源配置如下表,生产环境根据实际业务量调整资源配置,推荐使用SSD存储设备。

服务器名

ip

操作系统

cpu

内存

用途1

用途2

ch01

10.82.88.182

CentOS Linux release 7.9

8c

16G

clickhouse集群

zookeeper集群

ch02

10.82.88.183

CentOS Linux release 7.9

8c

16G

clickhouse集群

zookeeper集群

ch03

10.82.88.184

CentOS Linux release 7.9

8c

16G

 

zookeeper集群

2.clickhouse数据库安装介质

官方预构建的二进制文件通常针对x86_64进行编译,并利用SSE 4.2指令集,检查当前CPU是否支持SSE 4.2的命令。

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

服务器CPU检查通过,选择RPM包进行安装,数据库版本使用更加稳定的最新的LTS(Long Term Support)版本 22.8,下载以下3个安装包。

https://packages.clickhouse.com/rpm/stable/

clickhouse-common-static-22.8.9.24.x86_64.rpm

clickhouse-client-22.8.9.24.x86_64.rpm

clickhouse-server-22.8.9.24.x86_64.rpm

3.clickhouse数据库安装前配置

3.1配置操作系统yum源(可选)

通常操作系统以最小化方式安装,配置yum源可以为后续安装软件提供很大的便利。yum源推荐使用内网环境提供的地址,若无法获得,则挂载操作系统安装盘,配置本地yum源。注意yum源需要和操作系统版本相同,安装使用的操作系统为CentOS Linux release 7.9.2009,配置本地yum源操作如下。

挂载光盘文件 CentOS-7-x86_64-Everything-2009.iso,编辑repo文件,注意 "/run/media/root/CentOS\ 7\ x86_64" 替换为对应的挂载路径。

cat >/etc/yum.repos.d/Centos7_local.repo <<EOF

[CentOS7]

name=CentOS-server

baseurl=file:///run/media/root/CentOS\ 7\ x86_64

enabled=1

gpgcheck=0

EOF

3.2配置NTP客户端

根据现网使用的实际ntp server进行调整。

ip=xxx.xxx.xxx.xxx

ntpdate $ip

sed -i "s/server 3.centos.pool.ntp.org/server $ip/g" /etc/chrony.conf

sed -i "s/server 0.centos.pool.ntp.org/#server 0.centos.pool.ntp.org/g" /etc/chrony.conf

sed -i "s/server 1.centos.pool.ntp.org/#server 0.centos.pool.ntp.org/g" /etc/chrony.conf

sed -i "s/server 2.centos.pool.ntp.org/#server 0.centos.pool.ntp.org/g" /etc/chrony.conf

systemctl enable chronyd

systemctl start chronyd

systemctl status chronyd

3.3配置sudo、NetworkManager、firewalld、selinux

echo "clickhouse  ALL=(ALL)  NOPASSWD: /bin/su - root" >> /etc/sudoers

systemctl disable NetworkManager

systemctl stop NetworkManager

systemctl disable firewalld

systemctl stop firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

3.4创建用户

新建用户,替换命令中的密码,进行密码设置。

groupadd clickhouse

useradd -g clickhouse clickhouse

echo "umask 022" >> /home/clickhouse/.bash_profile

echo "xxxx" | passwd --stdin clickhouse

3.5修改系统参数与限制

cat >> /etc/security/limits.conf  << EOF

* soft nproc 65536

* hard nproc 65536

* soft nofile 655360

* hard nofile 655360

EOF

3.6修改主机名称与host文件

根据实际情况修改主机名,3台机器分别执行:

hostnamectl set-hostname ch01

hostnamectl set-hostname ch02

hostnamectl set-hostname ch03

cat >> /etc/hosts  << EOF

10.82.88.182 ch01

10.82.88.183 ch02

10.82.88.184 ch03

EOF

每台机器的名称和IP映射关系都需要写入到host文件中,zookeeper集群机器IP信息也需要写入到host文件。

3.7关闭透明大页、调整CPU固定高频、关闭SWAP

查看是否使用透明大页

cat /sys/kernel/mm/transparent_hugepage/enabled

查看CPU频率策略

cpupower frequency-info --policy

a.执行 tuned-adm list 命令查看当前操作系统的 tuned 策略。

b.创建新的 tuned 策略。

mkdir /etc/tuned/balanced-ch-optimal/

cat > /etc/tuned/balanced-ch-optimal/tuned.conf <<EOF

[main]

include=balanced

[cpu]

governor=performance

[vm]

transparent_hugepages=never

EOF

c.应用新的 tuned 策略。

tuned-adm profile balanced-ch-optimal

修改后检查:

cat /sys/kernel/mm/transparent_hugepage/enabled

cpupower frequency-info --policy

关闭swap

echo "vm.swappiness = 0">> /etc/sysctl.conf

swapoff -a && swapon -a

sysctl -p

调整内存分配策略

echo 0 | sudo tee /proc/sys/vm/overcommit_memory

至此,完成操作系统相关设置,下一章节进行数据库安装。

4. clickhouse数据库安装

数据库集群部署在节点ch01 (10.82.88.182)与ch02(10.82.88.183),需要在两个节点均执行以下操作。

4.1创建目录

创建clickhouse日志目录与数据文件目录,可根据实际情况调整。

mkdir -p /opt/clickhouse_logs

mkdir -p /opt/clickhouse

chown -R clickhouse:clickhouse /opt/clickhouse_logs

chown -R clickhouse:clickhouse /opt/clickhouse

4.2安装数据库软件

上传安装包,检查安装包md5值

md5sum clickhouse-common-static-22.8.9.24.x86_64.rpm

f3c6bb13102ca5418b778b9f6ce7c3bf  clickhouse-common-static-22.8.9.24.x86_64.rpm

md5sum clickhouse-client-22.8.9.24.x86_64.rpm

44bfe6eb388905c2037ce3e6717b3e4c  clickhouse-client-22.8.9.24.x86_64.rpm

md5sum clickhouse-server-22.8.9.24.x86_64.rpm

c1acc4debcc1fab2ee0257b8689d140a  clickhouse-server-22.8.9.24.x86_64.rpm

依次执行

rpm -ivh clickhouse-common-static-22.8.9.24.x86_64.rpm

rpm -ivh clickhouse-client-22.8.9.24.x86_64.rpm

rpm -ivh clickhouse-server-22.8.9.24.x86_64.rpm

在安装clickhouse-server-22.8.9.24.x86_64.rpm时需要输入数据库用户default的密码,请输入并记住密码,后续登录数据库需要使用。

 

至此,完成数据库软件安装。

数据库的默认配置文件目录是 /etc/clickhouse-server

默认日志目录是 /var/log/clickhouse-server/

默认数据文件目录是 /var/lib/ clickhouse

默认提供sytemclt启停,先不启动数据库,编辑配置文件后再启动数据库,数据库在启动时会自动初始化。

4.3编辑配置文件

clickhouse安装后生成两个配置文件,/etc/clickhouse-server/ config.xml 服务器级配置文件;/etc/clickhouse-server/ users.xml 用户级配置文件。

4.3.1编辑 /etc/clickhouse-server/config.xml

可以使用vi /etc/clickhouse-server/config.xml 修改文件,或者使用sed命令,注意本文件属性为只读,vi保存时需要使用 wq!

1)允许远程访问

<!-- <listen_host>::</listen_host> --> 去掉注释。

sed -i 's/<!-- <listen_host>::<\/listen_host> -->/<listen_host>::<\/listen_host>/g' /etc/clickhouse-server/config.xml

修改后入下图:

2interserver_http_host去掉注释,修改为本机IP,注意两节点IP不相同。

修改前:

<!--

<interserver_http_host>example.clickhouse.com</interserver_http_host>

-->

修改后ch01节点如下图:

 

修改后ch02节点如下图:

 

3)启用zookeeper

找到zookeeper相关内容,修改前如下图:

zookeeper相关内容默认处于注释状态,使用zookeeper则要去掉注释,并且修改host中example1,example2,example3分别为zookeeper集群3个节点的IP(10.82.88.182/183/184)。修改后如下图:

 

4)启用宏(macros

找到macros相关内容,修改前如下图:

 

macros相关内容默认处于注释状态,使用macros则去掉注释;修改example01-01-1为本节点的主机名,不同节点值不同,比如节点ch01把example01-01-1修改为ch01,节点ch02把example01-01-1修改为ch02。

ch01节点修改后如下图:

 

ch02节点修改后如下图:

 

5)修改目录

日志默认路径是 /var/log/clickhouse-server ,修改为/opt/clickhouse_logs,根据实际情况修改。

数据默认路径是 /var/lib/clickhouse ,修改为/opt/clickhouse,可根据实际情况修改。

修改命令:

sed -i 's/\/var\/log\/clickhouse-server/\/opt\/clickhouse_logs/g' /etc/clickhouse-server/config.xml

sed -i 's/\/var\/lib\/clickhouse/\/opt\/clickhouse/g' /etc/clickhouse-server/config.xml

4.3.2编辑 /etc/clickhouse-server/user.xml

以下参数需要调优,具体参数值根据实际情况进行调整。

background_pool_size :后台线程数,默认16,建议调整为cpu逻辑线程数的2倍(cpu逻辑线程数cat /proc/cpuinfo |grep processor|wc -l)。

background_distributed_schedule_pool_size :分布式后台任务线程数,默认16,建议改成cpu个数的2倍(线程数)。

max_memory_usage :单次查询可使用的内存最大值,clickhouse数据库专用服务器可以设置为服务器内存的60%以上。

max_memory_usage_for_all_queries : 所有查询可使用的内存最大值,建议与 max_memory_usage 相同。

max_bytes_before_external_group_by :group by 内存量使用量,建议设置为 max_memory_usage的一半,当group by使用内存超过设置值后会使用磁盘进行排序。

max_bytes_before_external_sort : order by 内存使用量,建议与max_bytes_before_external_group_by相同,当order by使用内存超过设置值后会使用磁盘进行排序。

执行如下命令:

sed -i '/<load_balancing>/i\            <max_memory_usage>10737418240</max_memory_usage>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <max_memory_usage_for_all_queries>10737418240</max_memory_usage_for_all_queries>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <max_bytes_before_external_group_by>5368709120</max_bytes_before_external_group_by>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <max_bytes_before_external_sort>5368709120</max_bytes_before_external_sort>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <background_pool_size>16</background_pool_size>' /etc/clickhouse-server/users.xml

sed -i '/<load_balancing>/i\            <background_distributed_schedule_pool_size>16</background_distributed_schedule_pool_size>' /etc/clickhouse-server/users.xml

增加default用户访问权限

sed -i 's/<!-- <access_management>1<\/access_management> -->/<access_management>1<\/access_management>/g' /etc/clickhouse-server/users.xml

执行后如下图:

 

 

4.4启动数据库

zookeeper启动后方可启动clickhouse数据库,若还未安装zookeeper集群,请先安装并启动。zookeeper安装部署请参见第5章。

systemclt 相关命令如下:

systemctl start clickhouse-server

systemctl stop clickhouse-server

systemctl restart clickhouse-server

systemctl status clickhouse-server

clickhouse-client登录命令:

clickhouse-client --host 10.82.88.182 -m --password xxxx

4.5创建数据副本表

副本的目的是保障数据的高可用。当一台clickhouse节点宕机了,可以从其他备份服务器获得相同的数据。clickhosue只有MergeTree系列的表引擎可以支持副本。针对MergeTree系列的表引擎,clickhouse都提供了对应的Replicated*MergeTree表引擎来支持数据副本。

    clickhouse的数据副本机制是表级别的,也就是说只针对表进行复制,一个数据库中可以同时包含复制表和非复制表。副本机制对于select查询是没有影响的,查询复制表和非复制表的速度是一样的。而写入数据时,clickhouse的集群没有主从之分,大家都是平等的。只不过配置了复制表后,insert以及alter操作会同步到对应的副本机器中。

搭建两节点clickhouse,通过zk进行数据同步,创建库表的操作需要在两节点执行。分别登录到两节点创建数据库和表,执行如下语句。

create database test;

use test;

create table t_stock(id UInt32,sku_id String,total_amount decimal(16, 2),create_time datetime) engine = ReplicatedMergeTree('/clickhouse/tables/test/t_stock','{replica}')  primary key id ;

建表语句语法:

create table table_name(...) engine=ReplicatedMergeTree('zoo_path','replica_name')

引擎使用 ReplicatedMergeTree ,zoo_path为 /clickhouse/tables/test/t_stock ,是ZooKeeper中该表的路径 ; replica_name为 {replica} ,是ZooKeeper 中的该表的副本名称。

复制表路径必须一致,"/clickhouse/tables"为固定前缀,"test"是库名,"t_stock"是表名

副本名称必须不相同,所以使用宏 {replica},创建时匹配配置文件中的值。

    在某个节点写入数据,数据会自动同步到另外一个节点。

insert into t_stock values(1,'10000',2000,'2022-12-12');

如果删除表drop table 需要加sync。

drop table t_stock sync;

4.6创建分布式表

    完成步骤4.1-4.4后,编辑配置文件/etc/clickhouse-server/config.xml,使用分布式表。找到config.xml中 remote_servers 部分,删除<remote_servers> </remote_servers>之间所有内容,加入以下内容。

        <bigdata>

            <shard>

                <weight>1</weight>

                <internal_replication>false</internal_replication>

                <replica>

                    <host>10.82.88.182</host>

                    <port>9000</port>

                               <user>default</user>

                               <password>xxx</password>

                </replica>

            </shard>

            <shard>

                <weight>1</weight>

                <internal_replication>false</internal_replication>

                <replica>

                    <host>10.82.88.183</host>

                    <port>9000</port>

                               <user>default</user>

                               <password>xxx</password>

                </replica>

            </shard>

        </bigdata>

<host>10.82.88.182</host>为clickhouse的IP,根据实际情况修改,<port>9000<port>,<user>default</user>是数据库用户,<password>xxx</password>是安装rpm包时输入的密码。配置了2个分片,分别节点为10.82.88.182和10.82.88.183,权重相等都是1,若有更多分片,可以再此基础上增加。每个节点均进行相同配置,然后重启数据库

登录到任意一台数据库,执行语句创建库表,语句使用“on cluster saxo”,在每个分片节点创建相同的库表,t_stock_local为本地表,是数据实际存储位置;t_stock_distributed为分布式表,是本地表的映射表。

分布式表中ENGINE = Distributed(saxo,test02,t_stock_local,hiveHash(sku_id)),saxo为集群名称,test02为数据库名,t_stock_local为本地表名,hiveHash(sku_id)分片键。

create database test02 on cluster saxo;

use test02;

CREATE TABLE t_stock_local on cluster saxo

(

id UInt32,

sku_id String,

total_amount Decimal(16, 2),

create_time DateTime

)

ENGINE = MergeTree()

PRIMARY KEY id

ORDER BY (id, sku_id);

CREATE TABLE t_stock_distributed on cluster saxo

(

id UInt32,

sku_id String,

total_amount Decimal(16, 2),

create_time DateTime

)

ENGINE = Distributed(saxo,test02,t_stock_local,hiveHash(sku_id));

insert into t_stock_distributed values (1,101,1000,'2022-12-08');

insert into t_stock_distributed values (2,102,1000,'2022-12-08');

insert into t_stock_distributed values (3,103,1000,'2022-12-08');

insert into t_stock_distributed values (4,104,1000,'2022-12-08');

insert into t_stock_distributed values (5,105,1000,'2022-12-08');

insert into t_stock_distributed values (6,106,1000,'2022-12-08');

insert into t_stock_distributed values (7,107,1000,'2022-12-08');

insert into t_stock_distributed values (8,108,1000,'2022-12-08');

insert into t_stock_distributed values (9,109,1000,'2022-12-08');

insert into t_stock_distributed values (10,110,1000,'2022-12-08');

insert into t_stock_distributed values (11,111,1000,'2022-12-08');

insert into t_stock_distributed values (12,112,1000,'2022-12-08');

往分布式表t_stock_distributed中写入数据,其他分片节点查询t_stock_distributed获取全量数据,同时查询到本地表t_stock_local只包含部分数据。

5. zookeeper集群安装

zookeeper集群安装节点为10.82.88.18210.82.88.18310.82.88.184,需要在3个节点均执行创建目录,安装软件、编辑配置文件、创建用户、启动集群等操作。

5.1安装要求

clickhouse要求zookeeper版本不低于3.4.5,下载最新稳定版本 apache-zookeeper-3.7.1-bin.tar.gz。下载链接:

https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz

       zookeeper需要JDK环境支持,自行安装一个jdk8即可

 

5.2创建目录

mkdir /opt/zookeeper/

mkdir -p /opt/zookeeper/cluster_clickhouse/data

mkdir -p /opt/zookeeper/cluster_clickhouse/log

5.3 安装zookeeper,编辑配置文件

tar -xvf apache-zookeeper-3.7.1-bin.tar.gz

mv apache-zookeeper-3.7.1-bin /opt/zookeeper/zookeeper-3.7.1

根据clickhouse官方推荐,调整zookeeper相关参数

cat > /opt/zookeeper/zookeeper-3.7.1/conf/zoo.cfg << EOF

dataDir=/opt/zookeeper/cluster_clickhouse/data/

dataLogDir=/opt/zookeeper/cluster_clickhouse/log/

clientPort=2181

tickTime=2000

initLimit=30000

syncLimit=10

maxClientCnxns=2000

maxSessionTimeout=60000000

autopurge.snapRetainCount=10

autopurge.purgeInterval=1

preAllocSize=131072

snapCount=3000000

server.1=10.82.88.182:2888:3888

server.2=10.82.88.183:2888:3888

server.3=10.82.88.184:2888:3888

EOF

节点ch01执行

echo 1 > /opt/zookeeper/cluster_clickhouse/data/myid

节点ch02执行

echo 2 > /opt/zookeeper/cluster_clickhouse/data/myid

节点ch03执行

echo 3 > /opt/zookeeper/cluster_clickhouse/data/myid

5.4 创建 zookeeper 用户

groupadd zookeeper

useradd -g zookeeper zookeeper

echo "umask 022" >> /home/zookeeper/.bash_profile

echo "xxxx" | passwd --stdin zookeeper

echo "zookeeper  ALL=(ALL)  NOPASSWD: /bin/su - root" >> /etc/sudoers

chown -R zookeeper:zookeeper /opt/zookeeper

5.5 启动zookeeper集群

三台机器分别执行su - zookeeper

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh start

启动完成后查看状态

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh status

应为1个leader,2个follower

集群启停命令

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh start

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh stop

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh restart

/opt/zookeeper/zookeeper-3.7.1/bin/zkServer.sh status

                ​​​​​​​        ​​​​​​​         

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云国际版旗舰级分销商-容器服务 ACK介绍

阿里云国际版容器服务Kubernetes版&#xff0c;简称容器服务ACK&#xff0c;是全球首批通过Kubernetes一致性认证的服务平台&#xff0c;提供高性能的容器应用管理服务&#xff0c;支持企业级Kubernetes容器化应用的生命周期管理&#xff0c;让您轻松高效地在云端运行Kubernete…

latex中的数学字体mathfont

最近遇到了调整latex中的数学字体的问题&#xff0c;虽然折腾一番发现我需要的就是默认字体&#xff08;靓仔无语&#xff09;&#xff0c;但是还是了解到了不少内容&#xff0c;记录一下。 你想要的是什么字体&#xff1f; 1、要是有tex源码&#xff0c;又不想看cls文件&…

C++ 跨平台文件读写

还在使用linux 自带的系统函数 fread 、fwrite么&#xff1f; 考虑一下使用C 的ifstream、ofstream 一套代码&#xff0c;多平台运行&#xff0c;解放需要使用宏定义做平台区分读写的麻烦。 ios::in 读文件ios::out 写文件&#xff08;覆盖写&#xff09;ios::binary 二进制方…

树状数组求逆序对

由于树状数组的数学原理证明是很复杂的&#xff0c;使用树状数组基本只需要知道它可以支持单点修改和区间查询即可。并且要知道&#xff0c;树状数组的作用是维护一段支持修改的区间和。 树状数组结构 下面是树状数组的图示&#xff1a; 真正的数据是a[1]-a[8]这段数组。上面…

零基础学FPGA(七):Altera FPGA管脚简述

日常唠嗑 同上一篇文章术语&#xff1a;Xilinx及Altera FPGA 配置名词区分&#xff0c;本篇文章也是短文&#xff0c;简述Altera FPGA芯片的管脚&#xff0c;供FPGA同行快速查阅信息。如果需要细入研究&#xff0c;可以网上检索看看&#xff0c;文章很多&#xff0c;写的也很详…

马哈鱼SQLFLow数据血缘分析器增量分析血缘任务

马哈鱼数据血缘分析器是一个分析数据血缘关系的平台&#xff0c;支持对大量复杂的数据快速准确的分析&#xff0c;支持分批增量分析血缘。 本文主要介绍如何利用马哈鱼增量分析任务。 使用步骤 登录sqlflow-api&#xff08;SQLFLow接口文档&#xff09;&#xff0c;http://1…

外汇天眼:本周监管状态已更新,以下平台请远离!

监管信息早知道&#xff01;外汇天眼将每周定期公布监管牌照状态发生变化的交易商&#xff0c;以供投资者参考&#xff0c;规避投资风险。 以下是监管牌照发生变动的交易商平台&#xff0c;注意警惕&#xff01; VS FX威胜 VS FX威胜&#xff0c;其宣称持有的美国NFA普通金融牌…

深入理解DOM

一、DOM 基本概念 DOM全称 Document Object Model&#xff0c;即文档对象模型&#xff0c;它允许脚本(js)控制Web页面、窗口和文档。 DOM 标准被分为 3 个不同的部分&#xff1a; 1、核心 DOM - 针对任何结构化文档的标准模型 2、XML DOM - 针对 XML 文档的标准模型 3、HT…

预制菜持续火热,食品制造企业如何利用APS自动排程实现生产管理标准化?

在今年预售榜单中&#xff0c;预制菜表现夺人眼球&#xff0c;在天猫“双11”活动的预售第一阶段强势出圈。在众多预售产品中&#xff0c;酸菜鱼已经成为消费者加购的爆品&#xff0c;成为雄霸“双11”预制菜预售榜单之首。 酸菜鱼是川菜的经典菜品&#xff0c;但现在已经突破地…

react源码中的fiber架构

先看一下FiberNode在源码中的样子 FiberNode // packages/react-reconciler/src/ReactFiber.old.js function FiberNode(tag: WorkTag, pendingProps: mixed, key: null | string, mode: TypeOfMode, ) {// Instancethis.tag tag;this.key key;this.elementType null;t…

Redis框架(六):大众点评项目 缓存更新策略 实现双写

大众点评项目 众点评项目 缓存更新策略 实现双写需求&#xff1a;缓存更新策略业务实现特殊情况展示SpringCloud章节复习已经过去&#xff0c;新的章节Redis开始了&#xff0c;这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则 基础实战的Demo和Coding上传到我…

GIS空间分析之密度分析

密度分析结果可以显示出点要素或线要素较为集中的地方。例如&#xff0c;每个城镇都可能有一个点值&#xff0c;这个点值表示该镇的人口总数&#xff0c;但是您想更多地了解人口随地区的分布情况。由于每个城镇内并非所有人都住在聚居点上&#xff0c;通过计算密度&#xff0c;…

网络安全学习路线,入门到入坟,史上最全网络安全学习路线整理

很多小伙伴在网上搜索网络安全时&#xff0c;会出来网络安全工程师这样一个职位&#xff0c;它的范围很广&#xff0c;只要是与网络安全挂钩的技术人员都算网络安全工程师&#xff0c;一些小伙伴就有疑问了&#xff0c;网络安全现在真的很火吗&#xff1f; 那么寒哥就带大家看…

美港探案:不理想的理想Q3,能否守得云开见月明?

12月9日&#xff0c;港股盘后理想汽车发布了2022年第三季度业绩报告。探员就迫不及待的去理想的官网上看了这份Q3业绩报告&#xff0c;整体数据很不理想&#xff0c;但是也都在探员的预料之内&#xff0c;但是探员对于理想依然是充满了热爱&#xff0c;在电动三傻中对理想也是情…

优美的曲线-turtlesim

从开环到闭环的旅程-CoCube 优美的曲线-译 2022年所公开博客案例所有项目&#xff0c;都在2020年之前完成&#xff0c;并且全部经过3轮以上测试。 当完美实现闭环之后&#xff0c;画曲线那就可以随心所欲啦。 想画什么&#xff0c;就能画什么。 核心代码&#xff1a; float …

DubboSPI使用以及使用方式源码解读

DubboSPI流程图 为什么Dubbo要自己实现SPI java spi 会一次性实例化扩展点所有实现&#xff0c;机制并不能根据获取自己想要的类 获取一个类的实现对象 javaSPI 具有局限性&#xff1a; 1、没法给实现类起别名 2、没法实现包装类。类似AOP的原理 3、没法实现自动注入 4、没法…

[附源码]Python计算机毕业设计SSM基于大数据的汽车流量监控(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ESP32 ESP-IDF + LVGL + SquareLine Studio 设计 UI 界面

陈拓 2022/12/10-2022/12/12 1. 概述 关于SquareLine Studio&#xff0c;乐鑫官方的ESP技术文章有介绍&#xff1a;在 ESP 开发板上开发 UI 不再复杂 - 知乎如果您尝试过在没有图形库的情况下开发 UI&#xff0c;那么您一定知道这有多困难。幸运的是&#xff0c;由乐鑫芯片驱动…

线性代数---第六章---二次型

1二次型方的系数为主对角线上的元素 我起码要会如何根据二次型写矩阵A 2规范形是系数为1&#xff0c;-1&#xff0c;0的标准型 3二次型的正惯性指数和负惯性指数 4任一个n阶实对称阵&#xff0c;必然既相似又合同于对角阵 5用配方法化二次型为标准阵 6 正交变换得到的对角阵上…

【产品分析】从用户体验五要素分析——微信读书

本文从用户体验五要素&#xff1a;表现层面、框架层 、战略层、范围层、结构层&#xff0c;对微信读书进行了分析。 前言 互联网发展的速度也加速了知识更新的速度&#xff0c;也许今天你还手握焦点技能&#xff0c;明天就可能被遗忘在角落。一应俱全的网课、铺天盖地的资讯加…