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

对MySQL滴MVCC理解(超详细)

学习目标

  • 什么是MVCC?
    • MVCC的核心概念
    • MVCC 的工作原理
    • MVCC 的优势
    • MVCC 的劣势
  • 什么是MySQL中InnoDB下滴快照读和当前读?
    • 一、快照读(Snapshot Read)
    • 二、当前读(Current Read)
    • 三、快照读和当前读的区别
    • 四、当前读、快照读和MVCC的关系
  • MVCC中的RR 是如何在 RC 的基础上解决不可重复读的?
  • RC, RR这两者下的 InnoDB 快照读有什么不同嘞?
  • MVCC 能解决什么问题,好处是什么嘞?
    • 解决的问题
    • 带来的好处

  什么是MVCC嘞?什么是MySQL中InnoDB下滴快照读和当前读?MVCC中的RR 是如何在 RC 的基础上解决不可重复读的?RC, RR这两者下的 InnoDB 快照读有什么不同嘞?MVCC 能解决什么问题,好处是什么嘞?

什么是MVCC?

  MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于管理数据库并发访问的技术。它通过在数据库中存储数据的多个版本来避免读写冲突,从而提高了数据库的并发性能。MVCC 广泛应用于现代关系型数据库系统,如 PostgreSQL、MySQL(InnoDB 引擎)等。下面详细讲解 MVCC 的概念和工作原理。

MVCC的核心概念

  1. 数据行版本管理
    • 每一行数据在数据库中都有一个或多个版本。
    • 每个版本包含创建时间戳(通常是事务ID)和删除时间戳(也可能是事务ID,或者是“未删除”标记)。
  2. 事务快照
    • 每个事务启动时都会创建一个“快照”,这个快照实际上是事务能看到的数据版本的集合。
    • 快照确保事务只能看到在它开始之前已经提交的修改。
  3. 时间戳或事务ID
    • 用来标识每个数据版本的创建和删除时间。
    • 时间戳或事务ID是递增的,确保唯一性。

MVCC 的工作原理

MVCC 通过在数据读写操作中使用不同的版本,实现了读写不阻塞(或者说最小化了锁的使用):

  1. 读取操作
    • 当一个事务读取某行数据时,它只会查看那些在它开始之前已经创建且尚未删除的版本。
    • 这意味着读取操作不会阻塞写入操作,因为读取的是快照中的旧版本数据。
  2. 写入操作
    • 写入操作会创建一个新版本的数据行,而不会直接修改现有数据行。
    • 新版本的数据行会包含一个更新的事务ID,标记为创建时间。
    • 同时,旧版本的数据行不会被立即删除,而是会被标记为在某个事务ID之后删除(即在该事务提交时)。
  3. 删除操作
    • 删除操作类似于写入操作,它会创建一个“删除标记”的新版本,而不是直接删除旧版本。
    • 这个“删除标记”实际上是一个指向该版本数据行的指针,它会在某个事务ID之后生效。
  4. 垃圾回收
    • 由于数据行有多个版本,数据库系统会定期进行垃圾回收,删除那些不再需要(即对所有当前活跃事务都不可见)的旧版本数据。

MVCC 的优势

  1. 提高并发性能
    • 读写操作可以并行进行,减少了锁的使用,从而提高了数据库的并发处理能力。
  2. 避免长时间锁
    • 由于读取操作不阻塞写入操作,写入操作也不需要等待读取操作完成,从而避免了长时间持有锁的情况。
  3. 数据一致性
    • MVCC 提供了快照隔离级别,确保每个事务看到的是一致的数据视图。

MVCC 的劣势

  1. 存储开销
    • 由于需要存储多个版本的数据,MVCC 会增加数据库的存储开销。
  2. 垃圾回收成本
    • 垃圾回收过程可能会消耗一定的计算资源,特别是在频繁更新和删除操作的数据库中。
  3. 复杂性
    • MVCC 增加了数据库系统的复杂性,实现和维护成本较高。

结论:
  MVCC 是一种强大的并发控制机制,它通过存储数据的多个版本来实现读写不阻塞,从而提高了数据库的并发性能。虽然 MVCC 带来了额外的存储开销和复杂性,但其在现代数据库系统中的应用已经证明了其价值和实用性。

什么是MySQL中InnoDB下滴快照读和当前读?

  在MySQL中,InnoDB存储引擎提供了两种主要的读操作方式:快照读(Snapshot Read)和当前读(Current Read)。这两种读操作方式在数据一致性、加锁行为以及应用场景上有所不同。下面将详细讲解这两种读操作方式。

一、快照读(Snapshot Read)

  1. 定义
    快照读是一种非加锁的读取方式,它读取的是事务开始时的数据快照。这意味着,在事务执行期间,无论其他事务如何修改数据,快照读始终能够看到一个一致的数据视图。
  2. 实现机制
    快照读依赖于InnoDB的多版本并发控制(MVCC)机制。每个事务在开始时都会创建一个Read View,用于确定在当前事务开始时已经提交的事务。在执行SELECT查询时,InnoDB会根据Read View来判断哪些数据行是可见的,从而返回符合条件的数据行。
  3. 应用场景
    快照读主要用于读取数据的一致性视图,确保在一个事务中多次读取同一数据时结果一致。它适用于那些不需要实时看到最新数据,但需要保证数据一致性的场景。
  4. 隔离级别
    • 在读提交(Read Committed, RC)隔离级别下,每次SELECT语句都会生成一个新的快照。
    • 在可重复读(Repeatable Read, RR)隔离级别下(MySQL InnoDB的默认隔离级别),事务开始时生成一个快照,事务中的所有SELECT语句都会使用这个快照。

二、当前读(Current Read)

定义
当前读是一种加锁的读取方式,它读取的是数据的最新版本,并且会对读取的数据加锁,以确保其他并发事务不能修改当前记录。
加锁行为
当前读会对读取的数据加锁,这取决于具体的SQL语句和隔离级别。例如,SELECT … FOR UPDATE会对读取的数据行加排他锁,而SELECT … LOCK IN SHARE MODE会对读取的数据行加共享锁。
应用场景
当前读适用于需要读取最新数据,并确保在读取期间数据不被其他事务修改的场景。它通常用于更新操作(如UPDATE、DELETE)之前的读取,以确保读取到的是最新版本的数据,并在更新时对数据行加锁以防止并发修改。
触发条件
当前读通常由特定的SQL语句触发,如UPDATE、DELETE、INSERT等修改数据的操作,以及SELECT … FOR UPDATE和SELECT … LOCK IN SHARE MODE等显式加锁的SELECT语句。

  当前读是指在读取数据时,要求读取的数据必须是最新写入的数据。这种读取方式通常伴随着一种锁机制,以确保数据的一致性。在MySQL中,当前读是通过锁定相应记录来实现的,这样其他事务在读取这些锁定的数据时将会被阻塞。当前读是一种加锁操作,也被称为悲观锁。当前读通常包括以下几种操作:

  • SELECT … LOCK IN SHARE MODE:共享锁,允许其他事务读取但不允许修改。
  • SELECT … FOR UPDATE:排他锁,不允许其他事务读取或修改。
  • UPDATE:排他锁,用于更新数据。
  • INSERT:排他锁,用于插入新数据。
  • DELETE:排他锁,用于删除数据。

三、快照读和当前读的区别

  1. 数据一致性
    • 快照读读取的是事务开始时的数据快照,保证了事务内多次读取同一数据时结果一致。
    • 当前读读取的是数据的最新版本,并加锁以确保数据的一致性和完整性。
  2. 加锁行为
    • 快照读是非加锁的读取方式。
    • 当前读是加锁的读取方式。
  3. 应用场景
    • 快照读适用于需要保证数据一致性但不需要实时看到最新数据的场景。
    • 当前读适用于需要读取最新数据并确保在读取期间数据不被其他事务修改的场景。
  4. 触发条件
    • 快照读通常由普通的SELECT语句触发。
    • 当前读通常由UPDATE、DELETE、INSERT等修改数据的操作,以及显式加锁的SELECT语句触发。

四、当前读、快照读和MVCC的关系

  1. 当前读与MVCC:在MySQL中,当前读使用的就是MVCC机制。不过,当前读并不是直接读取数据的最新版本,而是通过加锁来确保读取到的数据是最新的。在读取数据时,如果数据被其他事务修改并提交了,那么当前读会等待其他事务提交后再读取最新数据。这实际上是通过锁机制来保证数据的一致性。
  2. 快照读与MVCC:快照读是基于MVCC机制实现的。在快照读中,事务读取的是数据的一个历史版本,而不是最新版本。这是通过读取undo日志中的历史版本数据来实现的。同时,read view用于判断当前事务能够看到哪个版本的数据。因此,快照读能够避免加锁,提高并发性能。

MVCC中的RR 是如何在 RC 的基础上解决不可重复读的?

  MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库管理系统中一种用于提高并发性能的技术,它通过维护数据的多个版本来实现并发读取和写入操作,从而避免读锁和写锁的争用。在MVCC中,RR(Repeatable Read,可重复读)和RC(Read Committed,读已提交)是两种不同的隔离级别,它们在解决不可重复读问题上有着不同的机制。下面将详细讲解MVCC中的RR是如何在RC的基础上解决不可重复读问题的。

一、RC(读已提交)隔离级别下的不可重复读
在RC隔离级别下,每个事务的每次读取操作都会生成一个新的快照(或读视图),这意味着同一个事务内的多次读取操作可能会看到不同的数据版本。具体来说,当一个事务在执行过程中,另一个事务对数据进行了修改并提交,那么当第一个事务再次读取该数据时,它将会看到修改后的数据版本。这就导致了不可重复读问题。

二、RR(可重复读)隔离级别下的解决机制
为了解决RC隔离级别下的不可重复读问题,RR隔离级别采用了以下机制:

  1. 快照一致性:在RR隔离级别下,每个事务在其生命周期内只会生成一个快照(或读视图)。这意味着同一个事务内的多次读取操作都会看到这个快照中的数据版本,从而保证了数据的一致性。
  2. 读视图生成时机:在RR隔离级别下,快照(或读视图)是在事务开始时生成的。这意味着事务在开始时就已经确定了自己能够看到哪些数据版本,后续读取操作都会基于这个快照进行。
  3. 可见性判断:当事务进行读取操作时,系统会根据事务的隔离级别和读视图来判断数据的可见性。在RR隔离级别下,如果数据的事务ID小于读视图中的最小活跃事务ID(或者数据的事务ID已经提交且不在读视图的活跃事务列表中),那么该数据对当前事务是可见的。否则,数据对当前事务是不可见的,事务需要通过undo日志来读取数据的旧版本。

三、RR隔离级别下如何解决RC的不可重复读问题
通过上述机制,RR隔离级别能够在RC的基础上解决不可重复读问题:

  1. 避免多次生成快照:RR隔离级别避免了RC隔离级别下每次读取都生成新快照的问题,从而保证了同一个事务内的多次读取操作看到的数据版本是一致的。
  2. 保证数据一致性:由于RR隔离级别下每个事务只有一个快照,且快照是在事务开始时生成的,因此事务在执行过程中看到的数据版本是固定的,不会出现不可重复读的情况。
  3. 加强可见性判断:RR隔离级别通过严格的可见性判断机制,确保了事务只能看到符合隔离级别要求的数据版本,从而进一步增强了数据的一致性。

四、注意事项
  虽然RR隔离级别能够解决不可重复读问题,但它并不能完全解决幻读问题。幻读是指在同一个事务内,两次查询得到的记录集不一致(比如第一次查询没有某条记录,第二次查询却出现了该记录)。在RR隔离级别下,虽然同一个事务内的多次查询会看到相同的数据版本,但如果其他事务在两次查询之间插入了新的记录,那么这些新记录对当前事务可能是可见的(取决于具体的实现和查询条件)。因此,在某些情况下,RR隔离级别仍然可能出现幻读问题。为了完全解决幻读问题,通常需要使用更高级别的隔离级别(如串行化)或额外的锁机制。

RC, RR这两者下的 InnoDB 快照读有什么不同嘞?

  在MySQL的InnoDB存储引擎中,RC(Read Committed,读已提交)和RR(Repeatable Read,可重复读)是两种不同的事务隔离级别,它们在快照读(Snapshot Read)行为上存在一些显著的不同。以下将详细讲解这两种隔离级别下InnoDB快照读的区别。

一、快照读概述
快照读是指在事务执行期间,读取一致性的数据快照,而不受其他并发事务的修改影响。这种读取方式可以确保事务在整个执行过程中看到的数据是一致的,即使其他事务对数据进行了修改。InnoDB通过多版本并发控制(MVCC)机制来实现快照读。

二、RC隔离级别下的快照读
在RC隔离级别下,快照读的特点如下:

  1. 每次读取生成新快照:在RC隔离级别下,每次读取操作都会生成一个新的快照或读视图。这意味着同一个事务内的多次读取操作可能会看到不同的数据版本。
  2. 可见性判断:当事务进行读取操作时,系统会根据当前事务的隔离级别和读视图来判断数据的可见性。在RC隔离级别下,如果数据的事务ID小于当前事务ID且已经提交,那么该数据对当前事务是可见的。
  3. 可能读到最新数据:由于每次读取都会生成新快照,因此RC隔离级别下的快照读可能会读到其他事务最新提交的数据。这就导致了同一个事务内的多次读取操作可能会看到不同的结果集,即不可重复读问题。

三、RR隔离级别下的快照读
在RR隔离级别下,快照读的特点如下:

  1. 事务开始时生成快照:与RC隔离级别不同,在RR隔离级别下,快照或读视图是在事务开始时生成的。这意味着同一个事务内的多次读取操作都会看到这个快照中的数据版本。
  2. 一致性保证:由于快照是在事务开始时生成的,并且贯穿整个事务过程,因此RR隔离级别下的快照读能够保证同一个事务内的多次读取操作看到的数据版本是一致的。这就避免了不可重复读问题。
  3. 可见性判断与RC相同:虽然快照生成时机不同,但RR隔离级别下读取数据的可见性判断机制与RC隔离级别是相似的。都是根据数据的事务ID和当前事务的读视图来判断数据的可见性。

四、总结与对比

  1. 快照生成时机:RC隔离级别下每次读取都会生成新快照,而RR隔离级别下快照是在事务开始时生成的。
  2. 数据一致性:由于快照生成时机的不同,RR隔离级别下的快照读能够保证数据的一致性,避免不可重复读问题;而RC隔离级别下则可能出现不可重复读问题。
  3. 可见性判断:两者在可见性判断机制上是相似的,都是根据数据的事务ID和当前事务的读视图来判断数据的可见性。但由于快照生成时机的不同,导致在实际应用中两者读取到的数据版本可能不同。

MVCC 能解决什么问题,好处是什么嘞?

MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种数据库并发控制方法,它通过维护数据的多个版本来实现读写操作的并行执行。MVCC主要解决了以下问题,并带来了相应的好处:

解决的问题

  1. 读写冲突
    • 脏读:在没有MVCC的情况下,一个事务可能读取到另一个未提交事务修改过的数据,如果后者回滚,那么前者读取的就是“脏”数据。MVCC确保事务只能读取到已提交的数据版本,从而避免脏读。
    • 不可重复读:在数据库操作期间,如果没有适当的隔离机制,一个事务多次读取同一数据可能会得到不同的结果,因为其他事务可能在此期间修改了这些数据。MVCC通过为每个事务提供一个一致的数据快照来解决这个问题。
    • 幻读:幻读是指在同一个事务中,执行相同的查询语句,但第二次查询却返回了第一次查询中没有的新记录。MVCC可以在一定程度上减少幻读的发生,尤其是在读取时没有主动加锁的情况下。
  2. 数据丢失:在写写操作中,如果没有合适的并发控制机制,可能会导致数据丢失问题。MVCC通过确保每个写操作都在其自己的数据版本上进行,避免了这一问题。

带来的好处

  1. 提高并发性能:由于读操作不需要等待写操作完成,写操作也不会阻止其他事务进行读取,因此可以显著提高系统的并发处理能力,尤其是在读多写少的场景下。
  2. 减少锁的使用:虽然MVCC本身也是一种形式的锁定机制,但它减少了传统意义上的行锁或表锁的需求,从而减少了锁竞争和锁开销,提高了系统的整体性能。
  3. 支持多种隔离级别:MVCC能够灵活支持不同的事务隔离级别,使得开发者可以根据具体需求选择合适的隔离级别,从而在保证数据一致性的同时,提高系统的并发性能。

数据库并发场景有三种,分别为:

  1. 读-读:这种场景不存在任何问题,也不需要特别的并发控制。因为多个事务同时读取同一数据时,并不会对数据造成修改,所以它们之间不会产生冲突。
  2. 读-写:这种场景存在线程安全问题,可能会造成事务隔离性问题。具体表现为,一个事务在读取数据时,另一个事务可能正在对该数据进行修改。如果没有适当的并发控制机制,就可能导致脏读、幻读、不可重复读等问题。
  3. 写-写:这种场景也存在线程安全问题,可能会存在更新丢失问题。具体表现为,两个或多个事务同时尝试修改同一数据,如果没有适当的并发控制机制,就可能导致数据的最终状态不是任何一个事务所期望的结果。

相关文章:

对MySQL滴MVCC理解(超详细)

学习目标 什么是MVCC?MVCC的核心概念MVCC 的工作原理MVCC 的优势MVCC 的劣势 什么是MySQL中InnoDB下滴快照读和当前读?一、快照读(Snapshot Read)二、当前读(Current Read)三、快照读和当前读的区别四、当前…...

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍! 大家好!最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心,我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏,简单又实用! 第一步:下载Crossover 首先&…...

matlab实现了一个优化的遗传算法,用于求解注汽站最优位置的问题

function [best_chromosome, best_fitness] optimized_genetic_algorithm()%% 遗传算法参数初始化% 定义井信息,包括坐标、管道长度、流量、压力等wells defineWells(); % 返回井的结构体数组N length(wells); % 注汽井数量% 遗传算法相关参数L_chromosome 20; …...

电商项目-基于ElasticSearch实现商品搜索功能(三)

本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码,介绍代码逻辑和代码实现。 主要实现功能:根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal,…...

【Vim Masterclass 笔记12】S06L26 + L27:Vim 文本的搜索、查找及替换同步练习(含点评课)

文章目录 S06L26 Exercise 07 - Search, Find, and Replace1 训练目标2 操作指令2.1. 打开 search-practice.txt 文件2.2. 同一行内的搜索练习2.3. 当前文件内的搜索练习2.4. 单词搜索练习2.5. 全局替换练习 3 退出 Vim S06L27 同步练习点评课 写在前面 Vim 的文本检索、查找与…...

Jsoup实现实时爬取

文章目录 1.作用2.使用pom文件引入示例代码(来自官网) 3.测试代码4.上线代码控制层业务层 1.作用 获取Html文档&#xff0c;然后解析出需要的字段 2.使用 pom文件引入 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redi…...

如何在Ubuntu上安装Cmake

前言 ​ 本文主要阐述如何在Ubuntu22.04上面安装cmake&#xff0c;具体可看下面的操作。 正文 一、环境 Ubuntu22.04 cmake-3.31.4.tar.gz 二、步骤 参考这个方案&#xff1a; 【运维】Ubuntu如何安装最新版本的Cmake&#xff0c;编译安装Cmake&#xff0c;直接命令安装…...

图解Git——分支开发工作流《Pro Git》

分支开发工作流 由于分支管理的便捷&#xff0c; 才衍生出这些典型的工作模式&#xff0c;你可以根据项目实际情况选择。 1. 长期分支 适用于持续开发和发布周期长的项目。常见的长期分支包括&#xff1a; master&#xff1a;只保留稳定的代码&#xff0c;通常用于生产环境。…...

没有正确使用HTTP Range Request,导致访问Azure Blob存储的视频没有实现流式播放

引文&#xff1a; 组里的小伙伴在修改视频播放相关的代码&#xff0c;修改之前的方案使用CDN转发&#xff0c;可以实现流式播放&#xff0c;修改之后的代码因为没有正确的使用Http Range Request, 导致画面访问Azure Blob存储的视频没有实现流式播放&#xff0c;整理下线索在这…...

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法&#xff0c;用于处理…...

开发人员学习书籍推荐(C#、Python方向)

作为一名开发人员&#xff0c;持续学习和提升自己的技术水平是至关重要的。如今&#xff0c;技术不断更新换代&#xff0c;新的开发框架、语言和工具层出不穷。对于刚入行的开发者或希望深入某一领域的工程师来说&#xff0c;选对书籍是学习的捷径之一。本篇文章将推荐一些经典…...

Springboot + vue 小区物业管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…...

基于深度学习的视觉检测小项目(十二) 使用线条边框和渐变颜色美化界面

到目前为止&#xff0c;已经建立起了基本的项目架构&#xff0c;样式表体系也初步具备&#xff0c;但是与成品的界面相比&#xff0c;还是差点什么。 我的界面效果图&#xff1a; 优秀demo的界面截图&#xff1a; 是的&#xff0c;我的界面太“平” 了&#xff0c;没有立体感&…...

基于OQuPy的量子编程实例探究:理论、实践与展望

基于OQuPy的量子编程探究:理论、分析与实践 一、引言 1.1 研究背景与意义 近年来,量子计算作为一种革命性的计算范式,在科学界与产业界引发了广泛关注。它依托量子力学原理,运用量子比特(qubit)进行信息处理,与传统计算相比,具备并行处理、指数级加速等显著优势,为解…...

【数据库】二、关系数据库

文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域&#xff1a;一组具有相同数据类型的值的集合。 笛卡尔积&#xff1a;所有域&#xff08;域可相同&#xff09;中所有取值的组合 例如&#xff1a;D1{1,2,3}&#xff0c;D2{A,b}&…...

C#类型转换

C#是静态类型的语言&#xff0c;变量一旦声明就无法重新声明或者存储其他类型的数据&#xff0c;除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的&#xff0c;也有隐式的。所谓显式&#xff0c;就是我们必须明确地告知编译器&#xff0c;我们要把变…...

【Vue】Vue组件--上

目录 一、组件基础 二、组件的嵌套关系 1. 基础架构 2. 嵌套 三、组件注册方式 1. 局部注册&#xff1a; 2. 全局注册&#xff1a; 四、组件传递数据 1. 基础架构 2. 传递多值 3. 动态传递数据 五、组件传递多种数据类型 1. Number 2. Array 3. Object 六、组…...

21、Transformer Masked loss原理精讲及其PyTorch逐行实现

1. Transformer结构图 2. python import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0batch_size 2seq_length 3vocab_size 4logits torch.randn(batch…...

构建高性能网络服务:从 Socket 原理到 Netty 应用实践

1. 引言 在 Java 网络编程中&#xff0c;Socket 是实现网络通信的基础&#xff08;可以查看我的上一篇博客&#xff09;。它封装了 TCP/IP 协议栈&#xff0c;提供了底层通信的核心能力。而 Netty 是在 Socket 和 NIO 的基础上&#xff0c;进一步封装的高性能、异步事件驱动的…...

Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息

Spring Boot | 如何使用 Apache Kafka 消费 JSON 消息 Apache Kafka 是一个流处理系统&#xff0c;可让您在进程、应用程序和服务器之间发送消息。在本文中&#xff0c;我们将了解如何使用 Apache Kafka 在 Spring Boot 应用程序的控制台上发布 JSON 消息。 为了了解如何创建 …...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...