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

HBase Cassandra的部署和操作

目录

一.数据库的部署与配置

二.使用命令访问数据库

三.数据库的设计

四.编程实现数据库的访问


一.数据库的部署与配置

1.在单个节点上对进行数据库的单机部署

(1)下载apache-cassandra-4.1.7-bin.tar.gz,上传到hadoop1 的/export/software目录

(2)使用解压缩命令:tar -xzf /export/software/apache-cassandra-4.1.7-bin.tar.gz -C /export/servers/ 进行解压缩到/export/servers目录

(3)使用cd /export/servers命令进入/export/servers目录

(4)将Cassandra目录进行重命名:mv apache-cassandra-4.1.7 apache-cassandra-4.1.7-standalone

(5)启动Cassandra:bin/cassandra -R

(6)查看Cassandra启动信息:tail -f logs/system.log

(7)检查状态:bin/nodetool status

(8)连接数据库:bin/cqlsh

(9)关闭Cassandra:bin/nodetool stopdaemon

2.在多个节点上实现数据库的分布式部署

(1)在Hadoop1、Hadoop2和Hadoop3上分别执行systemctl stop firewalldsystemctldisable firewalld命令关闭防火墙;

(2)在Hadoop1、Hadoop2、Hadoop3上分别执行ssh-keygenssh-copy-id hadoop1ssh-copy-id hadoop2ssh-copy-id hadoop3,使各个节点可以免密登录

注:在Hadoop2和Hadoop3上的执行结果与Hadoop1几乎相同,故不再展示。

(3)进行免密登录测试,在Hadoop1、Hadoop2和Hadoop3上分别执行ssh hadoop1,ssh hadoop2,ssh hadoop3,可以免密登录即可

注:在Hadoop2和Hadoop3上的执行结果与Hadoop1几乎相同,故不再展示。

(4)在Hadoop1、Hadoop2和Hadoop3上分别上传压缩安装包

(5)在Hadoop1、Hadoop2和Hadoop3上分别解压缩apache-cassandra-4.1.7-bin.tar.gz:tar -xzf /export/software/apache-cassandra-4.1.7-bin.tar.gz -C /export/servers/

(6)分别修改Hadoop1、Hadoop2和Hadoop3的cassandra.yaml文件中的seeds、listen_address和rpc_address,具体修改如下:

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.160,rpc_address=192.168.121.160;

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.161,rpc_address=192.168.121.161;

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.162,rpc_address=192.168.121.162

注:因修改过程类似,此处只展示Hadoop1节点上的修改结果。

(7)在Hadoop1、Hadoop2和Hadoop3上使用命令分别启动Cassandra:

bin/cassandra -R

(8)查看运行状态:bin/nodetool status

(9)连接任一服务器均可:bin/cqlsh hadoop1,bin/cqlsh hadoop2,bin/cqlsh hadoop3

二.使用命令访问数据库

练习Cassandra的相关命令。

1.键空间:创建、删除和查看键空间

(1)创建并查看键空间

CREATE KEYSPACE IF NOT EXISTS library_system

WITH REPLICATION = {

    'class' : 'SimpleStrategy',

    'replication_factor' : 1

};

DESCRIBE KEYSPACES;

(2)删除并再次查看键空间

DROP KEYSPACE IF EXISTS library_system;

DESCRIBE KEYSPACES;

2.表:创建表、设置复合型主键、修改表结构(要求:复合主键要包括分区键和分簇键,数据类型要包含两种以上的集合类型和一种以上的自定义类型)

以图书管理系统为例进行如下操作:

(1)创建表(包含复合型主键)

在图书管理系统中,我们设计一个图书借阅记录表,复合主键由 book_id 和 borrower_id 组成,分区键使用 book_id,集群键使用 borrower_id。还使用了集合类型(SET)存储借阅的日期,以及自定义类型(user_info)来存储借阅人的信息。

语句如下:

CREATE TYPE IF NOT EXISTS library_system.user_info (

    name TEXT,

    email TEXT,

    phone_number TEXT

);

CREATE TABLE IF NOT EXISTS library_system.book_borrowing (

    book_id UUID,              -- 分区键

    borrower_id UUID,          -- 集群键

    borrow_date DATE,          -- 借阅日期

    return_date DATE,          -- 归还日期

    status TEXT,               -- 状态(如 已借出、已归还)

    tags SET<TEXT>,            -- 标签(如 热门、推荐等)

    borrower_info FROZEN<user_info>,  -- 自定义类型,借阅人信息

    PRIMARY KEY (book_id, borrower_id)  -- 复合主键

);

其中,book_id是分区键,borrower_id 是集群键,tags 是集合类型,用来存储书籍标签,borrower_info 是自定义类型 user_info,用于存储借阅人的信息。

(2)修改表结构

添加一个新列来记录图书的借阅次数。

语句如下:

ALTER TABLE library_system.book_borrowing ADD borrow_count INT;

3.数据查询 

(1)查询所有数据

SELECT * FROM library_system.book_borrowing;

(2)根据分区键查询

SELECT * FROM library_system.book_borrowing WHERE book_id = 3796171a-9a3d-45e6-8886-42601fed5c04;

(3)根据分区键和集群键查询

 SELECT * FROM library_system.book_borrowing WHERE book_id =  b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(4)查询特定列

SELECT book_id, borrow_date, return_date FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(5)查询集合类型数据

SELECT tags FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(6)查询自定义类型数据

SELECT borrower_info FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

4.数据更新:数据插入、数据更新、数据删除

(1)数据插入

INSERT INTO library_system.book_borrowing (book_id, borrower_id, borrow_date, return_date, status, tags, borrower_info)

VALUES (uuid(), uuid(), '2024-01-01', '2024-01-15', 'Borrowed', {'Popular', 'New Release'},

    {name: 'John Doe', email: 'johndoe@example.com', phone_number: '1234567890'});

(2)数据更新

UPDATE library_system.book_borrowing

SET return_date = '2024-01-20', status = 'Returned'

WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(3)数据删除

①删除单条数据

DELETE FROM library_system.book_borrowing

WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

②删除整张表

TRUNCATE library_system.book_borrowing;

三.数据库的设计

图书管理系统包含三个主要实体:图书读者借阅记录。它们之间通过一个关系来进行联系,借阅记录表示图书与读者之间的借阅关系,本系统共设计三张表,分别是图书表(存储图书的相关信息)、借阅记录表(存储借阅的记录)和读者表(存储读者的基本信息)。

1.数据库设计

1图书表

表名:Books

列族(Column Families):

info:存储图书的基本信息

author:存储作者的详细信息

publisher:存储出版商的信息

行键设计:

行键:book_id(唯一标识每本图书)

列名与存储内容:

在info列族下:

title:书名

category:类别(如科幻、文学等)

published_date:出版日期

在author列族下:

name:作者名称

birth_date:作者出生日期

在publisher列族下:

publisher_name:出版商名称

publisher_address:出版商地址

2读者表

表名:Readers

列族(Column Families):

info:存储读者的基本信息

contact:存储读者的联系信息(例如地址、电话)

行键设计:

行键:reader_id(唯一标识每个读者)

列名与存储内容:

在info列族下:

reader_name:读者姓名

dob:出生日期

在contact列族下:

email:电子邮件地址

phone_number:电话号

address:家庭住址

3借阅记录表

表名:BorrowRecords

列族(Column Families):

info:存储借阅信息

reader:存储读者信息

行键设计:

行键:borrow_id(唯一标识每次借阅记录)

列名与存储内容:

在info列族下:

book_id:借阅的图书ID

borrow_date:借阅日期

return_date:归还日期

在reader列族下:

reader_name:读者姓名

reader_id:读者ID

4实体和关系的增删改查

①新增操作

新增图书:向Books表中插入新的行,包含图书ID(行键)及其对应的列族和列名。

新增借阅记录:向BorrowRecords表中插入新的行,包含借阅记录ID(行键)、借阅图书ID、借阅日期、归还日期、读者信息等。

新增读者:向Readers表中插入新的行,包含读者ID(行键)、姓名、出生日期、联系信息等。

②删除操作

删除图书:通过图书ID删除Books表中的记录。

删除借阅记录:通过借阅记录ID删除BorrowRecords表中的记录。

删除读者:通过读者ID删除Readers表中的记录。

③更新操作

更新图书信息:可以根据图书ID(行键)来更新Books表中的某些列,比如更新书名、作者或出版日期等。

更新借阅记录:可以根据借阅记录ID(行键)来更新借阅日期或归还日期等。

更新读者信息:可以根据读者ID(行键)来更新Readers表中的读者姓名、地址、电话等。

④查询操作

查询某本图书的详细信息:通过book_id查询Books表中的详细信息。

查询某本图书的借阅记录:通过book_id在BorrowRecords表中查找所有借阅记录。

查询某位读者的借阅记录:通过reader_id在BorrowRecords表中查找该读者的所有借阅记录。

查询某位读者的详细信息:通过reader_id查询Readers表中的详细信息。

2.表设计与填充数据

(1)图书表

行键(book_id)

列族

列名

列值

B001

info

title

《活着》

category

文学

published_date

1993-06-01

author

name

余华

birth_date

1960-04-03

publisher

publisher_name

作家出版社

publisher_address

北京市朝阳区

B002

info

title

《百年孤独》

category

小说

published_date

1967-06-05

author

name

加西亚·马尔克斯

birth_date

1927-03-06

publisher

publisher_name

南海出版公司

publisher_address

上海市徐汇区

(2)读者表

行键(reader_id)

列族

列名

列值

R001

info

reader_name

张三

dob

1990-05-15

contract

email

zhsan@email.com

phone_number

123-4567-8901

address

北京市海淀区

R002

info

reader_name

李四

dob

2005-02-28

contract

email

lisi@email.com

phone_number

987-6543-2100

address

上海市浦东新区

(3)借阅记录表

行键(borrow_id)

列族

列名

列值

BR001

info

Book_id

B001

Borrow_date

2024-11-01

Return_date

2024-11-15

reader

Reader_name

张三

Reader_id

R001

BR001

info

Book_id

B002

Borrow_date

2024-11-02

Return_date

2024-11-20

reader

Reader_name

李四

Reader_id

R002

四.编程实现数据库的访问

使用Python访问实现设计的图书管理系统的列式数据库,步骤如下:

(1)数据库连接:连接到Cassandra集群,并创建数据库library和数据表Books、Readers和BorrowRecords,具体代码如下:

from cassandra.cluster import Cluster

# 连接到 Cassandra 集群

cluster = Cluster(['192.168.121.160'])  虚拟机的 IP 地址

session = cluster.connect()

# 创建 Keyspace:library

session.execute("""

    CREATE KEYSPACE IF NOT EXISTS library WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}

""")

# 使用创建的 Keyspace

session.execute("USE library")

# 创建表结构

# 创建 Books 表

session.execute("""

    CREATE TABLE IF NOT EXISTS Books (

        book_id TEXT PRIMARY KEY,

        title TEXT,

        category TEXT,

        published_date TEXT,

        author_name TEXT,

        author_birth_date TEXT,

        publisher_name TEXT,

        publisher_address TEXT

    )

""")

# 创建 Readers 表

session.execute("""

    CREATE TABLE IF NOT EXISTS Readers (

        reader_id TEXT PRIMARY KEY,

        reader_name TEXT,

        dob TEXT,

        email TEXT,

        phone_number TEXT,

        address TEXT

    )

""")

# 创建 BorrowRecords 表

session.execute("""

    CREATE TABLE IF NOT EXISTS BorrowRecords (

        borrow_id TEXT PRIMARY KEY,

        book_id TEXT,

        borrow_date TEXT,

        return_date TEXT,

        reader_name TEXT,

        reader_id TEXT

    )

""")

print("Keyspace and tables created.")

结果如下图所示:

(2)数据增加

分别给三张表插入数据,具体代码如下:

①插入图书记录

session.execute("""

    INSERT INTO Books (book_id, title, category, published_date, author_name, author_birth_date, publisher_name, publisher_address)

    VALUES (%s, %s, %s, %s, %s, %s, %s, %s)

""", ('B001', '《活着》', '文学', '1993-06-01', '余华', '1960-04-03', '作家出版社', '北京市朝阳区'))

结果如下图所示:

②插入读者信息

session.execute("""

    INSERT INTO Readers (reader_id, reader_name, dob, email, phone_number, address)

    VALUES (%s, %s, %s, %s, %s, %s)

""", ('R001', '张三', '1990-05-15', 'zhangsan@email.com', '123-4567-8901', '北京市海淀区'))

结果如下图所示:

③插入借阅记录

session.execute("""

    INSERT INTO BorrowRecords (borrow_id, book_id, borrow_date, return_date, reader_name, reader_id)

    VALUES (%s, %s, %s, %s, %s, %s)

""", ('BR001', 'B001', '2024-11-01', '2024-11-15', '张三', 'R001'))

结果如下图所示:

(3)数据更新

更新读者的联系方式,具体代码如下:

session.execute("""

    UPDATE Readers SET email = %s WHERE reader_id = %s

""", ('newemail@email.com', 'R001'))

结果如下图所示:

(4)数据查询

查询book_id为B001图书的详细信息,具体代码如下:

# 查询某本图书的详细信息

rows = session.execute("""

    SELECT * FROM Books WHERE book_id = %s

""", ('B001',))

for row in rows:

    print(row)

结果如下图所示:

(5)数据删除

删除book_id为B001图书的记录

session.execute("""

    DELETE FROM Books WHERE book_id = %s

""", ('B001',))

执行结果如下图所示:

相关文章:

HBase Cassandra的部署和操作

目录 一&#xff0e;数据库的部署与配置 二&#xff0e;使用命令访问数据库 三&#xff0e;数据库的设计 四&#xff0e;编程实现数据库的访问 一&#xff0e;数据库的部署与配置 1.在单个节点上对进行数据库的单机部署 &#xff08;1&#xff09;下载apache-cassandra-4.1.7-…...

用户界面软件01

Jens Coldewey 著&#xff0c;Tom.X 译 本文中的模式语言逐步深入地探讨用户界面架构的设计&#xff0c;它基于人机工程学&#xff0c;足以形成一套完整的体系。如果你对这方面有兴趣&#xff0c;请参考[Tog92]&#xff0c;[Coo95]和[Col95]。 本文不讨论用户界面的布局&…...

【云原生】Docker Compose 从入门到实战使用详解

目录 一、前言 二、Docker Compose 介绍 2.1 Docker Compose概述 2.2 Docker Compose特点 2.3 Docker Compose使用场景 三、Docker Compose 安装 3.1 安装docker环境 3.2 Docker Compose安装方式一 3.2.1 下载最新版 3.2.2 设置权限 3.2.3 设置软链接 3.2.4 查看版本…...

【ShuQiHere】使用 SCP 进行安全文件传输

【ShuQiHere】&#x1f680; 在日常的开发和运维工作中&#xff0c;文件传输是一个常见的任务。scp&#xff08;Secure Copy&#xff09;是一个基于 SSH 协议的文件传输工具&#xff0c;能够在本地和远程主机之间安全地复制文件和目录。本文将详细介绍 scp 的使用方法&#xf…...

海康威视H5player问题汇总大全

由于除了要支持Windows平台&#xff0c;还要支持国产系统的平台&#xff0c;这时就用到了H5player&#xff0c;但是这个在使用调试的时候会遇到各种各样的问题&#xff0c;便在此分享一下&#xff0c;供大家分享&#xff01;&#xff01;&#xff01; 问题一&#xff1a;Unexp…...

力扣23.合并K个升序链表

文章目录 一、前言二、最小堆解法三、分治解法 一、前言 23. 合并 K 个升序链表 本题的要求是把K个链表进行合并&#xff0c;合并后的链表必须是从小到大的。 并且这K个链表也是从小到大的升序链表。 二、最小堆解法 既然每个链表都是升序的&#xff0c;也就是从小到大的。 …...

【C 语言指针篇】指针的灵动舞步与内存的神秘疆域:于 C 编程世界中领略指针艺术的奇幻华章

文章目录 【C 语言篇】指针的灵动舞步与内存的神秘疆域&#xff1a;于 C 编程世界中领略指针艺术的奇幻华章前言一 、指针的介绍与使用1. 指针的介绍1.1指针表示1.2指针变量1.3空指针 2. 使用指针2.1交换两个变量的值2.2计算输出最小值和最大值 二、野指针的介绍与使用1. 野指针…...

游戏关卡设计的常用模式

游戏关卡分为很多种&#xff0c;但常用的有固定套路&#xff0c;分为若干种类型。 关卡是主角与怪物、敌方战斗的场所&#xff0c;包括装饰物、通道。 单人游戏的关卡较小&#xff0c;偏线性&#xff1b; 联机/MMO的关卡较大&#xff0c;通道多&#xff0c;自由度高&#xf…...

在一台服务器上使用docker运行kafka集群

1.拉取镜像 docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper 2.创建集群之间通信的网络 docker network create kafka-cluster-net docker network inspect kafka-cluster-net 3.将zookeeper加入到网络中 docker network connect kafka-cluster-net zooke…...

Apache Celeborn 在B站的生产实践

背景介绍 Shuffle 演进 随着B站业务的飞速发展,数据规模呈指数级增长,计算集群也逐步从单机房扩展到多机房部署模式。多个业务线依托大数据平台驱动核心业务,大数据系统的高效性与稳定性成为公司业务发展的重要基石。如图1,目前在大数据基础架构下,我们主要采用 Spark、Fl…...

JOIN 和 OUTER JOIN,SQL中常见的连接方式

1. INNER JOIN&#xff08;简称 JOIN&#xff09; INNER JOIN 是 SQL 中最常用的一种连接方式&#xff0c;默认的 JOIN 就是 INNER JOIN。它返回两个表中满足连接条件的匹配记录。 作用&#xff1a;返回两个表中所有满足 ON 条件的记录。特性&#xff1a;如果表中的某些行在连…...

Vue2: table加载树形数据的踩坑记录

table中需要加载树形数据,如图: 官网给了两个例子,且每个例子中的tree-props都是这么写的: :tree-props="{children: children, hasChildren: hasChildren}" 给我一种错觉,以为数据结构中要同时指定children和hasChildren字段,然而,在非懒加载模式下,数据结…...

电子信息硕士面试经验

回顾2024年秋招一些面试常见的问题,主要涉及软件开发和嵌入式部分内容。 1. 浅拷贝深拷贝 深拷贝和浅拷贝是两种不同的拷贝方式,用于复制对象。它们主要区别在于对嵌套对象的处理方式。 浅拷贝:只复制对象的顶层,嵌套对象仍然是共享引用。 深拷贝:递归复制所有对象及其嵌…...

dns网址和ip是一一对应的吗?

DNS网址和IP地址是一一对应的吗&#xff1f;我们在上网时&#xff0c;为什么总是使用网址而不是一串数字&#xff1f;这些问题其实涉及到互联网的基本运作原理。DNS&#xff08;域名系统&#xff09;是我们日常上网过程中一个不可或缺的部分&#xff0c;它帮助我们将人类易于记…...

springboot3 redis 常用操作工具类

在 Spring Boot 3 中&#xff0c;操作 Redis 通常使用 Spring Data Redis 提供的工具类&#xff0c;如 RedisTemplate 和 StringRedisTemplate。以下是一个详细的 Redis 操作工具类的实现&#xff0c;涵盖了常用功能。 完整的 Redis 工具类 以下工具类可以实现基本的 Redis 操…...

Java工程师实现视频文件上传minio文件系统存储及网页实现分批加载视频播放

Java工程师实现minio存储大型视频文件网页实现分批加载视频播放 一、需求说明 老板给我出个题目&#xff0c;让我把的电影文件上传到minio文件系统&#xff0c;再通过WEB端分配加载视频播放&#xff0c;类似于我们普通的电影网站。小编把Java代码共享出来。是真正的能拿过来直…...

Redis(二)value 的五种常见数据类型简述

目录 一、string&#xff08;字符串&#xff09; 1、raw 2、int 3、embstr 二、hash&#xff08;哈希表&#xff09; 1、hashtable 2、ziplist 三、list&#xff08;列表&#xff09; ​编辑 1、linkedlist 2、ziplist 3、quicklist&#xff08;redis 3.2后的列表内…...

Docker 环境中搭建 Redis 哨兵模式集群的步骤与问题解决

在 Docker 环境中搭建 Redis 哨兵模式集群的步骤与问题解决 在 Redis 高可用架构中&#xff0c;哨兵模式&#xff08;Sentinel&#xff09;是确保 Redis 集群在出现故障时自动切换主节点的一种机制。通过使用 Redis 哨兵&#xff0c;我们可以实现 Redis 集群的监控、故障检测和…...

【网页自动化】篡改猴入门教程

安装篡改猴 打开浏览器扩展商店&#xff08;Edge、Chrome、Firefox 等&#xff09;。搜索 Tampermonkey 并安装。 如图安装后&#xff0c;浏览器右上角会显示一个带有猴子图标的按钮。 创建用户脚本 已进入篡改猴管理面板点击创建 脚本注释说明 name&#xff1a;脚本名称。…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 4:MHE表示能力

目录 1 MHE的表示能力2 基于Frobenius-范数的低秩逼近3 基于CE的低秩近似 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者&#xff1a;Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位&#xff1a;山东大学 代码&#xff1a;h…...

AI建站工具选型指南:企业级用户的五大核心标准与对比

AI建站工具选型指南&#xff1a;企业级用户的五大核心标准与对比面对市场上五花八门的建站工具&#xff0c;企业采购团队往往陷入选择困难。有的号称AI驱动&#xff0c;实际只能改改文案&#xff1b;有的强调零代码&#xff0c;但复杂的后台逻辑仍需IT介入。要避开这些坑&#…...

别再让机械臂‘抖’了!用Matlab手把手教你实现输入整形(附完整代码)

机械臂振动抑制实战&#xff1a;用Matlab实现输入整形的完整指南 看着机械臂末端执行器在定位后持续抖动的画面&#xff0c;作为工程师的你一定眉头紧锁。这种残余振动不仅影响定位精度&#xff0c;还会延长作业周期——在高速分拣、精密装配等场景下&#xff0c;这简直是性能杀…...

以为生活缺的是标准答案,其实是丧失了“拆解”的能力

凌晨书桌前的拆解者一、 那个被几十个“高赞回答”困住的深夜前几天&#xff0c;我以前带过的一个产品经理大林&#xff0c;约我在海淀喝了顿大酒。大林今年38岁&#xff0c;正卡在一个要命的节骨眼上&#xff1a;公司业务大调整&#xff0c;他所在的边缘业务线面临被“优化”的…...

2026届必备的十大AI学术网站解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网已正式推出AIGC检测服务系统&#xff0c;此系统目的在于识别学术文本里由人工智能生成的…...

【仅限头部AI基建团队内部流通】生成式AI缓存预热白皮书V2.3:含12个真实Trace分析、预热覆盖率提升至98.6%的关键配置

第一章&#xff1a;生成式AI应用缓存预热机制 2026奇点智能技术大会(https://ml-summit.org) 生成式AI应用在高并发场景下面临显著的首请求延迟&#xff08;Cold Start Latency&#xff09;问题&#xff0c;尤其当模型推理服务依赖GPU实例或远程大模型API时&#xff0c;未预热…...

用STM32CubeMX和HAL库5分钟搞定BMP280气压传感器驱动(附完整代码)

STM32CubeMX与HAL库快速集成BMP280气压传感器的完整指南 气压传感器在现代嵌入式系统中扮演着重要角色&#xff0c;从无人机高度控制到气象站数据采集&#xff0c;BMP280凭借其高精度和稳定性成为工程师的热门选择。传统寄存器级开发方式虽然灵活&#xff0c;但对于追求开发效率…...

HsMod:基于BepInEx的炉石传说功能增强插件完全指南

HsMod&#xff1a;基于BepInEx的炉石传说功能增强插件完全指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 想象一下&#xff0c;当你正在炉石传说中完成日常任务时&#xff0c;那些冗长…...

OLED字库的构建与移植:从点阵数据到嵌入式显示

1. OLED字库的基础概念与工作原理 第一次接触OLED字库时&#xff0c;我也被那一串串十六进制数字搞得头晕眼花。直到后来才发现&#xff0c;这些看似复杂的数据背后&#xff0c;其实是一套非常直观的图形表达方式。OLED字库本质上就是字符的图形化表示&#xff0c;每个字符都被…...

**发散创新:基于RBAC模型的权限管理系统在Python中的高效实现**在现代软件系统中,权限管理是保障数

发散创新&#xff1a;基于RBAC模型的权限管理系统在Python中的高效实现 在现代软件系统中&#xff0c;权限管理是保障数据安全和业务逻辑隔离的核心模块。传统的角色-权限绑定方式容易导致冗余与耦合&#xff0c;而**基于角色的访问控制&#xff08;Role-Based Access Control,…...

PCB设计小技巧:如何在立创EDA专业版中完美添加二维码(附避坑指南)

PCB设计实战&#xff1a;立创EDA专业版二维码嵌入全流程与避坑指南 在PCB设计领域&#xff0c;二维码的应用已经从简单的产品标识演变为包含生产批次、设计版本、测试参数等关键信息的智能载体。立创EDA专业版作为国产PCB设计工具的代表&#xff0c;其二维码嵌入功能却存在不少…...