58、主从复制数据库+读写分离

mysql的主从复制和读写分离(面试问原理)

mysql的主从复制和读写分离:

主从复制 面试必问 主从复制的原理。

读写分离,MHA

一、主从复制

1.1、主从复制的模式:

1、mysql的默认模式:

异步模式:主库在更新完事务之后,会立即把结果返回给从服务器,并不关心从库是否接收到,以及从库是否处理成功。

网络问题可能没有同步,或者是其他因素导致同步失败。

快 效率高。

2、全同步模式:

主库在更新完事务之后,立即把结果返回到从库,所有的从库执行完毕之后才能继续下一个同步,安全,性能受到影响。

3、半同步复制

介乎异步和全同步之间,主库更新完事务之后,也是同步到从库,同步完成后有一个等待时间。

等待时间是一个tcp/ip的往返时间。5ms左右。

既在一定程度上保证了效率,也在一定程度上保证了数据的完整性。

在这里插入图片描述

主从复制的延迟怎么解决:

1、网络问题:防火墙的原因。

2、硬件设备问题,cpu内存和磁盘出了问题。

3、配置文件写错了。

配置文件当中设置的方式提高数据的安全性。

数据库的引擎要是innodb

1.2、双一设置:(银行面试)

innodb_flush_log_at_trx_commit=1

##每次提交都会刷新事务日志,确保事务的持久性。但是会影响性能。

sync_binlog=1

##每次提交事务,将二进制日志的内容保存到磁盘,确保日志的持久性,提高了安全性。

性能化设置:

sync_binlog=0

##数据在内存中,不保存,重启没了。

sync_binlog=20

最多提交几次事务会进行磁盘刷新,日志内容保存到磁盘。

innodb_flush_log_at_trx_commit=2

##每次更新保存在内存中,不进行刷新。

innnodb_buffer_pool_size

控制innodb缓冲池的大小,增大可以提高数据库的性能,但是占用的是系统内存,配置的时候要注意合理化时间。

主从复制如何实现:

实现是基于mysql的二进制文件,根据主库的二进制文件标志位,实现主和从的同步。

主从服务之间,服务器的时间要同步。

架构:

三台服务器

192.168.168.11 mysql 8.0 主

192.168.168.12 mysql 8.0 从

192.168.168.13mysql 8.0 从

看指标

在这里插入图片描述

Slave_IO_Running: Yes

从库和主机的读写是否正常。

Slave_SQL_Running: Yes

slave的mysql状态是否正常。

1.3、配置主从数据库

在这里插入图片描述

主库、从库:systemctl stop firewalld
setenforce 0yum -y install ntpdate##安装工具date##查看时间ntpdate ntp.aliyun.com获取阿里云的时间主数据库vim /etc/my.cnflog-bin=master-bin
binlog_format=MIXED
log-slave-updates=true
##允许从服务器从主库复制数据时可以写入从库自己的二进制日志当中。systemctl restart mysqld从数据库2vim /etc/my.cnfserver-id = 2
relay-log=relay-log-bin##从服务器 获取二进制日志的开头,开启从库的二进制日志relay-log-index=slave-relay-bin.index##二进制日志的索引文件的名称relay_log_recovery=1##配置从服务器在启动时是否执行二进制日志的恢复操作(和主库同步),1开启开启。systemctl restart mysqld从数据库3vim /etc/my.cnfserver-id = 3
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery=1systemctl restart mysqld主1从库2、3mysql -u root -p123456mysql> CREATE USER 'myslave'@'192.168.168.%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.02 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.168.%';
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)主库1:show master status;
##查看主库的状态,从库通过主库的信息,方便与主库建立连接从库2、3:CHANGE master to master_host='192.168.168.11',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=857;
##与主库创建连接stop slave;start slave;
##开启从库show slave status\G;
##查看从库的状态`Slave_IO_Running: Yes`##从库和主机的读写是否正常。`Slave_SQL_Running: Yes`##slave的mysql状态是否正常。

二、读写分离

读写分离:主从的架构当中,主库负责写,从库负责读。

在这里插入图片描述

2.1、读写分离的方式:

1、代码开发人员纯靠代码完成,涉及到数据库的

二次开发。性能好,不需要额外的硬件设备

2、中间层代理 代理服务器。在客户端和主从架构之间有一个代理服务器。代理服务器收到客户端的请求之后,通过客户端的sql语句来进行判断,读转到从,写转到主。

Amoeba:读写分离最常见的客户端代理软件。java代码开发的一个软件。

Master 服务器:192.168.168.11 mysql8.0
Slave1 服务器:192.168.168.12 mysql8.0
Slave2 服务器:192.168.168.13 mysql8.0
Amoeba 服务器:192.168.168.23 jdk1.6、Amoeba 代理服务器
客户端 服务器:192.168.168.24 mysql maridb 客户端

----------------------搭建 MySQL读写分离--------------------------------

----Amoeba服务器配置----
##安装 Java 环境##
因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。
cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin
//按yes,按entermv jdk1.6.0_14/ /usr/local/jdk1.6vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/binsource /etc/profile
java -version##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
//如显示amoeba start|stop说明安装成功##配置 Amoeba读写分离,两个 Slave 读负载均衡##
#先在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问主库1、slave2、3CREATE USER 'amoeba'@'192.168.168.%' IDENTIFIED WITH mysql_native_password BY '123456';GRANT REPLICATION SLAVE ON *.* TO 'amoeba'@'192.168.168.%';GRANT ALL PRIVILEGES ON *.* TO 'amoeba'@'192.168.168.%';flush privileges;#再回到amoeba服务器配置amoeba服务:
cd /usr/local/amoeba/conf/cp amoeba.xml amoeba.xml.bak
vim amoeba.xml									#修改amoeba配置文件
--30行--
<property name="user">amoeba</property>--32行-- 
<property name="password">123456</property>--115行--
<property name="defaultPool">master</property>--117-去掉注释-
<property name="writePool">master</property>
<property name="readPool">slaves</property>cp dbServers.xml dbServers.xml.bak
vim dbServers.xml								#修改数据库配置文件
--23行--注释掉  作用:默认进入test库 以防mysql中没有test库时,会报错
<!-- <property name="schema">test</property> -->--26--修改
<property name="user">amoeba</property>--28-30--去掉注释
<property name="password">123456</property>--45--修改,设置主服务器的名Master
<dbServer name="master"  parent="abstractServer">--48--修改,设置主服务器的地址
<property name="ipAddress">192.168.233.21</property>--52--修改,设置从服务器的名slave1
<dbServer name="slave1"  parent="abstractServer">--55--修改,设置从服务器1的地址
<property name="ipAddress">192.168.233.22</property>--58--复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.233.23</property>--65行--修改
<dbServer name="slaves" virtual="true">--71行--修改
<property name="poolNames">slave1,slave2</property>/usr/local/amoeba/bin/amoeba start &					#启动Amoeba软件,按ctrl+c 返回netstat -anpt | grep java							#查看8066端口是否开启,默认端口为TCP 8066
netstat -anpt | grep java
tcp6       0      0 127.0.0.1:60543         :::*                    LISTEN      13477/java          
tcp6       0      0 :::8066                 :::*                    LISTEN      13477/java          
tcp6       0      0 192.168.168.23:54400    192.168.168.13:3306     ESTABLISHED 13477/java          
tcp6       0      0 192.168.168.23:40406    192.168.168.11:3306     ESTABLISHED 13477/java          
tcp6       0      0 192.168.168.23:34946    192.168.168.12:3306     ESTABLISHED 13477/java          ----测试读写分离 ----
yum install -y mariadb-server mariadb
systemctl start mariadb.service#在主从服务器上开启查询日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log在客户端服务器上测试:
mysql -u amoeba -p123456 -h 192.168.233.10 -P8066		
//通过amoeba服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从--从服务器在主服务器上:
use db_test;
create table test (id int(10),name varchar(10),address varchar(20));在两台从服务器上:
stop slave;											#关闭同步
use db_test;
//在slave1上:
insert into test values('1','zhangsan','this_is_slave1');//在slave2上:
insert into test values('2','lisi','this_is_slave2');//在主服务器上:
insert into test values('3','wangwu','this_is_master');//在客户端服务器上:
use db_test;
select * from test;		//客户端会分别向slave1和slave2读取数据,显示的只有在两个从服务器上添加的数据,没有在主服务器上添加的数据insert into test values('4','qianqi','this_is_client');		//只有主服务器上有此数据//在两个从服务器上执行 start slave; 即可实现同步在主服务器上添加的数据
start slave;

测试结果:

主1从库2、3打开查询日志

tail -f /usr/local/mysql/data/mysql_general.log

insert into test values(‘3’,‘wangwu’,‘this_is_master’);

在这里插入图片描述

select * from test;

在这里插入图片描述

三、面试题

1、主从同步复制原理

主从同步复制原理主要涉及到数据库系统中的数据复制和同步机制,以确保数据在主服务器(主节点)和从服务器(从节点)之间保持一致。以下以MySQL和Redis为例,详细阐述主从同步复制的原理。

一、MySQL主从同步复制原理

MySQL的主从同步复制是其自带的功能,通过二进制日志(binlog)实现数据的复制和同步。具体原理如下:

  1. binlog记录变更

    • 当MySQL数据库执行数据的增、删、改操作时,这些事件会被记录到二进制日志(binlog)中。
    • binlog是数据库服务器启动的那一刻起,保存所有修改数据库结构或内容的一个文件。
  2. 日志发送

    • binlog中的日志内容会被发送到每台从服务器上。
  3. 从服务器接收并应用

    • 在从服务器上有两个线程:I/O线程和SQL线程。
    • I/O线程负责接收主服务器发送的binlog内容,并将其写入到中继日志(relay log)文件中。
    • SQL线程读取relay log文件内容,对数据更新进行重放,最终保证主从数据库的一致性。
  4. 同步方式

    • MySQL主从复制支持多种同步方式,包括异步复制、半同步复制和全同步复制。
    • 异步复制:主服务器不需要等待从服务器确认即可提交事务,提供较好的性能但数据一致性稍差。
    • 半同步复制:主服务器需要等待至少一个从服务器确认接收到事务的日志内容后才提交事务,提高数据一致性。
    • 全同步复制:主服务器需要等待所有从服务器都确认接收到事务的日志内容后才提交事务,数据一致性最高但性能影响最大。

2、读写分离你们使用什么方式?

中间层代理 代理服务器。在客户端和主从架构之间有一个代理服务器。代理服务器收到客户端的请求之后,通过客户端的sql语句来进行判断,读转到从,写转到主。

Amoeba:读写分离最常见的客户端代理软件。java代码开发的一个软件。 jdk1.6依赖环境。

3、如何查看主从同步状态是否成功

进入从的数据库,show slave status\G;

4、如果I/O不是yes呢,你如何排查?

查看配置文件是否有问题,查看mysql的uuid是否一致,若一致,进行修改。

show variables like "%uuid%";
##查看本机的uuid
select uuid();
##随机生成uuid
show variables like 'datadir';
##查看uuid配置文件的位置

5、show slave status能看到哪些信息(比较重要)

SHOW SLAVE STATUS命令在MySQL中用于查看主从复制(或主备复制)的状态信息。执行此命令后,会返回一系列与复制相关的属性和值,这些信息对于监控复制状态、诊断问题以及确保数据一致性至关重要。以下是一些通过SHOW SLAVE STATUS命令可以看到的关键信息:

  1. Slave_IO_State

    • 表示复制线程(IO Thread)的状态。例如,“Waiting for master to send event”表示IO线程正在等待主服务器发送事件。
  2. Slave_IO_Running

    • 表示复制IO线程是否正在运行。如果值为“Yes”,则表示线程正在运行;如果为“No”,则表示线程已停止。
  3. Slave_SQL_Running

    • 表示复制SQL线程是否正在运行。如果值为“Yes”,则表示线程正在运行;如果为“No”,则表示线程已停止。
  4. Seconds_Behind_Master

    • 表示从库与主库之间的延迟时间(以秒为单位)。如果值大于0,表示存在延迟;如果为0,则表示从库与主库同步是实时的;如果为NULL,则可能表示复制已经停止或未配置。
  5. Master_Host, Master_User, Master_Port

    • 分别表示主服务器的主机名、用户名和端口号,这些信息用于从库连接到主库。
  6. Master_Log_File, Read_Master_Log_Pos

    • 分别表示主服务器的二进制日志文件名和从库已经读取的二进制日志位置。这些信息有助于了解从库正在读取的主库日志信息。
  7. Relay_Log_File, Relay_Log_Pos

    • 分别表示从库的中继日志文件名和从库已经读取的中继日志位置。中继日志是从库用来存储从主库接收到的二进制日志事件的日志文件。
  8. Relay_Master_Log_File

    • 表示中继日志所记录的主服务器的二进制日志文件名,有助于确认中继日志与主库二进制日志的对应关系。
  9. Last_Errno, Last_Error

    • 分别表示上一次错误的错误代码和错误信息。这些信息对于诊断复制过程中的错误非常有用。
  10. Connect_Retry

    • 表示在发生连接错误后,重试连接的间隔时间(秒)。

执行SHOW SLAVE STATUS\G命令时,使用\G参数可以将结果以更易读的方式显示,每个属性占据一行,方便管理员阅读和解析。

6、主从复制慢(延迟)会有哪些可能?怎么解决?

  1. 硬件性能差异

    • 主库和从库之间的硬件性能差异可能导致复制延迟。例如,从库的CPU、内存或存储性能较低,可能无法及时处理复制过来的数据。
  2. 网络延迟

    • 网络带宽不足或网络延迟较高时,主库和从库之间的数据传输速度会受到影响,从而导致复制延迟。
  3. 主库负载过高

    • 主库上的写操作过多,或者执行了大型事务,会导致主库的binlog产生速度加快,而从库可能无法及时接收和处理这些binlog。
  4. 从库负载过高

    • 从库除了需要处理复制过来的数据外,还可能承担读操作,如果读操作过多,会占用从库的资源,导致复制处理速度变慢。
  5. SQL执行效率低

    • 从库上的SQL执行效率低,例如缺乏合适的索引、执行计划不合理等,会导致复制过程中的SQL执行时间延长。
  6. 复制策略选择不当

    • MySQL默认的复制是异步的,虽然性能较好但数据一致性较差;全同步复制虽然数据一致性好但性能较差;半同步复制介于两者之间,但也可能因网络延迟等原因导致延迟。
  7. 数据库配置不当

    • 数据库的某些配置参数设置不合理,如binlog格式、binlog缓冲区大小、innodb_flush_log_at_trx_commit等,可能影响复制性能。

解决方案

  1. 优化硬件性能

    • 升级从库的硬件配置,如增加CPU核心数、提升内存容量、使用更快的存储设备等,以提高从库处理数据的能力。
  2. 优化网络环境

    • 增加网络带宽、优化网络路由、减少网络延迟等,以提高主从库之间的数据传输速度。
  3. 减轻主库负载

    • 对主库进行读写分离,将读操作分担到从库上;对主库上的大事务进行拆分,减少单个事务的执行时间。
  4. 合理分配从库资源

    • 如果从库同时承担读操作和复制任务,需要合理分配资源,确保复制任务有足够的资源进行处理。
  5. 优化SQL执行效率

    • 对从库上的SQL语句进行优化,如添加合适的索引、调整执行计划等,以提高SQL执行效率。
  6. 选择合适的复制策略

    • 根据业务需求和数据一致性要求选择合适的复制策略。例如,对于实时性要求较高的系统,可以考虑使用半同步复制或全同步复制;对于实时性要求不高的系统,可以继续使用异步复制。
  7. 调整数据库配置

    • 根据实际情况调整数据库的相关配置参数,如binlog格式、binlog缓冲区大小、innodb_flush_log_at_trx_commit等,以优化复制性能。
  8. 使用并行复制

    • 在MySQL 5.6及更高版本中,支持并行复制功能。通过配置并行复制参数,可以允许多个从库线程同时处理binlog中的事件,从而提高复制效率。

综上所述,主从复制慢(延迟)的原因可能涉及硬件、网络、负载、SQL执行效率、复制策略和数据库配置等多个方面。为了解决这个问题,需要从多个角度进行分析和优化。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Three.js 官方文档学习笔记

Address&#xff1a;Three.js中文网 (webgl3d.cn) Author&#xff1a;方越 50041588 Date&#xff1a;2024-07-19 第一个3D案例—创建3D场景 创建3D场景对象Scene&#xff1a; const scene new THREE.Scene(); 创建一个长方体几何对象Geometry&#xff1a; const geomet…

FTP、NFS、SAMBA系统服务

⼀、rsync托管xinetd 1 、为什么要进⾏服务托管 独⽴服务&#xff1a;独⽴启动脚本 ssh ftp nfs dns ... 依赖服务 : 没有独⽴的启动脚本 rsync telnet 依赖 xinetd 服务&#xff08;独⽴服务&#xff09; 2 、如何将 rsync 托管给 xinetd 服务去管理&#xff1f; 第⼀步&am…

VMware中Ubuntu磁盘空间的清理

最近发现Ubuntu占用空间过大&#xff0c;在网上找了一些方法&#xff0c;在这里总结一下。 1.删除快照 把不需要的快照删除&#xff0c;但要注意删除快照可能会影响到后续的快照链。每个快照依赖于前面的快照。如果删除一个中间快照&#xff0c;虚拟机可能无法找到完整的差异…

leetcode 513.找树左下角的值

1.题目要求: 代码块: 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。2.此题思路: 1.创建队列&#xff0c;出队函数和入队函数: //创建队列 typedef struct queuet{struct TreeNode* value;struct queue* n…

IB user verbs介绍

本文来自对内核源代码文档/Documentation/infiniband/user_verbs.rst的翻译和理解。 在Infiniband设备帮助下&#xff0c;跨计算机的两个进程可以相互访问对方的虚地址空间。在Linux操作系统上&#xff0c;支持进程能直接访问本地Infiniband设备的资源&#xff0c;从而实现跨机…

TeamViewer手机端APP提示:请先验证账户

当你在手机端下载安装了TeamViewerAPP后&#xff0c;需要你先登录个人账号&#xff0c;然后还会要求你验证账户&#xff0c;同时跳转到一个网址中&#xff0c;但是这个网址并没有自动跳转到验证账户的位置。 解决办法&#xff1a; 在手机浏览器中进入下面这个网址&#xff1a;…

鸿蒙语言基础类库:【@system.vibrator (振动)】

振动 说明&#xff1a; 本模块首批接口从API version 4开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。从API Version 8开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.vibrator]。该功能使用需要对应硬件支持&#xff0c;仅支持…

VMware虚拟机无法访问互联网

一、什么情况下需要访问互联网 在某些情况下&#xff0c;VMware虚拟机需要通过访问互联网去获取外部资源&#xff0c;例如进行yum安装或者wget拉取操作等等。 二、处理方法 2.1.检查虚拟机网络模式和服务状态 虚拟机的网络模式需要使用 NAT 模式。 VMware NAT Service服务…

Delphi 11.2 配置Android SDK 环境

打开 Delphi 11 点击 Tools–Options… 然后点击 Deployment–SDK Manager–Add… 这里如果配置64位就选 Android 64-bit&#xff0c;如果配置32位就选 Android 32-bit 点击 Select an SDK version–Add New… 有警告图标的就是有问题的项&#xff0c;需要手动更新一下&#xf…

微信小程序开发:项目程序代码构成

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

PostgreSQL创建表和自增序列

一、创建表&#xff1a; 注意&#xff1a; 1、在mysql没有序列的概念&#xff0c;id自增通过auto_increment实现&#xff1b; 2、pgsql没有auto_increment的概念&#xff0c;如何实现id自增&#xff1f;有两种方式&#xff1a; 方式一&#xff1a;创建序列&#xff0c;绑定…

Android lmkd机制详解

目录 一、lmkd介绍 二、lmkd实现原理 2.1 工作原理图 2.2 初始化 2.3 oom_adj获取 2.4 监听psi事件及处理 2.5 进程选取与查杀 2.5.1 进程选取 2.5.2 进程查杀 三、关键系统属性 四、核心数据结构 五、代码时序 一、lmkd介绍 Android lmkd采用epoll方式监听linux内…

SpringBoot连接PostgreSQL+MybatisPlus入门案例

项目结构 一、Java代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

客户案例 | 识货基于向量检索服务 Milvus 版搭建电商领域的向量数据检索平台

阿里云的Milvus服务以其性能稳定和功能多样化的向量检索能力&#xff0c;为识货团队在电商领域的向量检索场景中搭建业务系统提供了强有力的支持。该服务的分布式扩展能力不仅可靠&#xff0c;而且能够适应日益增长的数据规模。 一、客户介绍 识货&#xff0c;成立于2012年6月…

Selenium之execute_script()方法执行js脚本

目录 场景应用和使用 页面滚动 获取返回值 返回JavaScript定位的元素对象 修改元素属性 弹出提示框 场景应用和使用 在自动化测试中&#xff0c;部分场景无法使用自动化Selenium原生方法来进行测试&#xff1a; 滚动到某个元素&#xff08;位置&#xff09; 修改…

水利行业的智慧转型之路:分析智慧水利的核心要素与优势,展望其在提升水资源利用效率、保障水安全方面的广阔前景

目录 引言 一、智慧水利的核心要素 1. 物联网技术 2. 大数据与云计算 3. 人工智能与机器学习 4. 移动互联网与GIS技术 5. 标准化与信息安全 二、智慧水利的优势 1. 提高水资源利用效率 2. 增强水灾害防御能力 3. 提升水环境治理水平 4. 促进水利服务智能化 三、展望…

响应式商标知识产权企业网站源码系统 带模版以及搭建部署教程

系统概述 响应式商标知识产权企业网站源码系统是一款专门为商标知识产权企业打造的综合性网站平台。它融合了先进的技术和设计理念&#xff0c;旨在为企业提供一个全面展示自身形象、业务能力和专业服务的数字化窗口。 该系统采用了现代化的架构和开发方式&#xff0c;具备高度…

Mem0 - 个人 AI 的内存层

文章目录 一、关于 Mem0核心功能&#x1f511;路线图 &#x1f5fa;️常见用例Mem0与RAG有何不同&#xff1f; 二、快速入门 &#x1f680;1、安装2、基本用法&#xff08;开源&#xff09;3、高级用法&#x1f527;4、大模型支持 三、MultiOn1、概览2、设置和配置4、将记忆添加…

电脑基础知识 | 电脑的基本组成

电脑作为我们日常工作和娱乐的重要工具&#xff0c;扮演着举足轻重的角色。当我们谈论电脑的基本组成时&#xff0c;其实是在探讨电脑硬件和软件两个核心部分。硬件是电脑看得见、摸得着的物理设备&#xff0c;而软件则是运行在这些硬件之上的程序和指令。两者相辅相成&#xf…

数据结构(二叉树-1)

文章目录 一、树 1.1 树的概念与结构 1.2 树的相关术语 1.3 树的表示 二、二叉树 2.1 二叉树的概念与结构 2.2特殊的二叉树 满二叉树 完全二叉树 2.3 二叉树的存储结构 三、实现顺序结构二叉树 3.1 堆的概念与结构 3.2 堆的实现 Heap.h Heap.c 默认初始化堆 堆的销毁 堆的插入 …