基于大模型的Milvus向量数据库的背景与实战应用,计算与索引机制,Python代码实现

大家好,我是微学AI,今天给大家介绍一下基于大模型的Milvus向量数据库的背景与实战应用,计算与索引机制,Python代码实现。本文详细介绍了milvus向量数据库的原理,并通过具体的数据样例和完整的Python代码实现,展示了如何在实际场景中运用milvus向量数据库。文章旨在帮助读者更好地理解和掌握milvus向量数据库的使用方法,为相关领域的研究和实践提供有力支持。
在这里插入图片描述

文章目录

  • 一、Milvus 向量数据库概述
    • 1.1 Milvus 的创立背景
      • 1.1.1 创建时间与初衷
    • 1.2 Milvus 与传统关系数据库的区别
      • 1.2.1 数据类型差异
      • 1.2.2 存储与检索机制
      • 1.2.3 应用场景对比
    • 1.3 Milvus 的底层架构设计
  • 二、Milvus 向量数据库特性
    • 2.1 高性能与扩展性
      • 2.1.1 高效的数据处理能力
      • 2.1.2 强大的可伸缩架构
    • 2.2 多种索引类型及运算方式
      • 2.2.1 灵活多样的索引策略
      • 2.2.2 支持 CPU 和 GPU 计算
    • 2.3 易于集成与云原生特性
      • 2.3.1 广泛的语言支持
      • 2.3.2 云原生设计理念
    • 2.4 其他重要特性
  • 三、Milvus 向量数据库原理
    • 3.1 数据库基础架构与数据存储
      • 3.1.1 创建与配置
      • 3.1.2 Field 配置
    • 3.2 计算与索引机制
      • 3.2.1 Embedding 过程
      • 3.2.2 插入数据
      • 3.2.3 创建索引
    • 3.3 分区与分区管理
      • 3.3.1 CreatePartition API 操作
    • 3.4 总结
  • 四、Milvus 向量数据库数据样例
    • 4.1 数据样本结构与特点
      • 4.1.1 向量数据示例
    • 4.2 使用正则表达式匹配数据
    • 4.3 以单个文件为单位读取并处理数据
      • 4.3.1 CSV文件格式定义
      • 4.3.2 导入流程
  • 五、Milvus 向量数据库 Python 代码实现
    • 5.1 环境准备与安装依赖
      • 5.1.1 连接到 Milvus 数据库
    • 5.2 创建集合
      • 5.2.1 定义字段和模式
    • 5.3 插入数据
    • 5.4 创建索引
    • 5.5 查询操作

一、Milvus 向量数据库概述

随着大数据和人工智能技术的发展,如何高效地存储、索引和管理大规模向量数据成为了一个亟待解决的问题。传统的数据库系统,特别是关系型数据库,在处理结构化数据方面表现优秀,但对于非结构化数据尤其是由机器学习模型生成的嵌入向量的支持却显得力不从心。正是在这样的背景下,Milvus 于 2019 年诞生了,它是一个专门设计用于存储、索引以及检索大量高维向量数据的开源向量数据库。

1.1 Milvus 的创立背景

1.1.1 创建时间与初衷

  • 创建时间:2019年。
  • 目标定位:旨在提供一个强大而灵活的平台,能够有效地存储、索引和查询由深度神经网络等复杂模型产生的大规模嵌入向量。

Milvus 的出现是对现有数据库技术的一个重要补充,它填补了传统数据库在处理高维度向量数据时存在的空白,尤其是在图像识别、自然语言处理等领域中发挥着重要作用。

1.2 Milvus 与传统关系数据库的区别

1.2.1 数据类型差异

  • 关系数据库主要擅长于处理表格形式的结构化数据,如订单信息、用户资料等,它们通过预定义的数据模式来保证数据的一致性和完整性。
  • Milvus则是专为非结构化或半结构化的向量数据设计,这些数据通常来自图像特征提取、文本编码等多个领域,具有高度多样性且难以用固定模式描述。

1.2.2 存储与检索机制

  • 在关系数据库中,数据通常按照行的形式组织,并支持基于SQL语句的复杂查询操作。
  • 相比之下,Milvus 采用了一种更适合向量数据特性的存储方式——将相似度作为核心考量因素,利用先进的索引算法(如IVF, HNSW等)来实现高效快速的最近邻搜索。

1.2.3 应用场景对比

  • 对于需要执行事务性操作、联接多个表以及进行复杂业务逻辑计算的应用而言,关系数据库仍然是首选。
  • 然而对于涉及到多媒体内容分析、推荐系统构建等场景,特别是在要求实时响应大规模高维向量查询的情况下,Milvus 展现出了明显优势。

1.3 Milvus 的底层架构设计

为了更好地服务于上述需求,Milvus 在其底层架构上做了许多针对性的设计:

  • 分布式存储:支持水平扩展以适应不断增长的数据量,确保系统的高可用性和容错能力。
  • 内存优先策略:大部分运算都在内存中完成,大大提高了处理速度。
  • 多级索引机制:结合多种索引方法优化不同规模下的查询性能。
  • 兼容性强:提供了丰富的API接口,支持包括Python、Go、Java在内的多种编程语言接入,方便开发者集成到现有的应用体系中去。

总之,Milvus 不仅解决了传统数据库难以有效管理高维向量数据的问题,同时也为各类AI应用场景提供了强有力的技术支撑。随着技术的持续演进和完善,我们有理由相信 Milvus 将在未来发挥更加重要的作用。

二、Milvus 向量数据库特性

2.1 高性能与扩展性

2.1.1 高效的数据处理能力

Milvus 是一个专为向量相似度搜索设计的开源数据库系统,它通过优化的数据结构和算法来支持高效的数据检索。该系统能够处理由机器学习模型生成的大规模嵌入向量集合,并提供亚秒级响应时间的搜索服务。所有查询操作都尽可能地在内存中执行,以减少I/O延迟并加速计算过程。

2.1.2 强大的可伸缩架构

Milvus 支持水平扩展,这意味着用户可以根据实际需求轻松调整集群规模,无论是单机环境还是分布式部署模式下都能表现出良好的适应性和灵活性。当数据集变得越来越大时,只需简单增加更多节点即可提升整体系统的容量和性能。此外,Milvus 还提供了自动负载均衡功能,确保资源得到充分利用而不会出现瓶颈问题。

2.2 多种索引类型及运算方式

2.2.1 灵活多样的索引策略

为了满足不同应用场景的需求,Milvus 实现了多种索引方法供用户选择,包括但不限于FLAT(无索引)、IVF_FLAT、IVF_SQ8、IVF_PQ等。每种索引都有其适用范围和优缺点,在特定条件下能够达到最佳效果。例如,对于高精度要求但对速度不敏感的任务,可以选择FLAT或IVF_FLAT;而对于那些更注重效率而非绝对准确性的场景,则可能更适合使用压缩型索引如IVF_PQ。

2.2.2 支持 CPU 和 GPU 计算

除了传统的CPU之外,Milvus 还全面支持利用GPU进行加速计算。这使得在处理大规模数据集时能够显著提高处理速度。特别是在需要频繁执行距离计算的情况下,利用GPU的强大并行处理能力可以极大地缩短计算时间。同时,Milvus 提供了灵活的配置选项,允许开发者根据自身硬件条件自由选择最合适的计算设备。

2.3 易于集成与云原生特性

2.3.1 广泛的语言支持

为了方便不同背景的技术人员快速上手,Milvus 提供了丰富的客户端库,涵盖了主流编程语言,如Python、Go以及Java等。这些SDK不仅简化了开发流程,而且保证了跨平台的一致性体验。无论是在本地环境还是云端服务器上运行项目,都可以无缝接入Milvus提供的强大功能。

2.3.2 云原生设计理念

作为一款面向未来的向量数据库解决方案,Milvus 在设计之初就充分考虑到了云原生环境下的部署需求。它遵循微服务架构原则,将各个组件拆分成独立的服务单元,从而实现了高度解耦和轻量级通信。这样一来,不仅便于维护更新,同时也更加契合现代云计算平台的特点。另外,Milvus 对Docker容器技术的良好兼容性意味着它可以很容易地被纳入到现有的CI/CD流水线之中,进一步提升了开发效率。

2.4 其他重要特性

  • 最大向量维度:目前版本的Milvus 支持的最大向量维度为32768。这一限制主要考虑到实际应用中大多数情况下并不需要如此高的维度,过高的维度不仅会增加存储成本,也可能导致过度拟合等问题。
  • 持久化机制:虽然Milvus 将大量操作放在内存中完成以提高效率,但它同样具备可靠的数据持久化能力。通过定期将内存中的状态同步至磁盘,即使遇到意外宕机情况也能保证数据的安全性。
  • 安全性保障:Milvus 提供了完善的认证授权机制,允许管理员设置访问控制规则,确保只有经过验证的身份才能对数据库进行读写操作。这对于保护敏感信息免受未授权访问非常重要。

总之,凭借其卓越的性能表现、灵活易用的设计理念以及丰富全面的功能特点,Milvus 成为了构建高效向量搜索系统不可或缺的重要工具之一。无论是学术研究领域还是工业实践场合,都能看到Milvus 发挥着重要作用。

三、Milvus 向量数据库原理

本章节将深入探讨 Milvus 向量数据库的核心工作原理,旨在帮助读者理解其内部机制。我们将涵盖从数据库创建到数据处理的全过程,并详细分析几个关键API的操作流程。

3.1 数据库基础架构与数据存储

3.1.1 创建与配置

  • 数据库初始化:在启动时,Milvus 将检查配置文件中定义的各项设置,如存储路径、日志级别等,并根据这些设置来准备运行环境。
  • 集合定义(Collection):用户通过定义集合来组织向量数据。一个集合可以看作是具有相同特征的一组记录的容器。每个集合都必须先被定义,包括指定其名称、字段列表等属性。

3.1.2 Field 配置

  • Schema 设计:在定义集合时,用户需要为每种类型的向量数据指定合适的字段类型。例如,对于浮点型向量,可以选择 FloatVectorBinaryVector 等。
  • 元数据管理:除了向量本身外,还可以关联一些元信息或标量值。这使得基于非向量条件的过滤成为可能,从而增强了查询灵活性。

3.2 计算与索引机制

3.2.1 Embedding 过程

  • 特征提取:使用预训练模型或其他方式从原始数据中抽取特征向量。这是所有后续步骤的基础。
  • 归一化:为了保证不同来源的数据具有一致性,通常会对嵌入向量执行标准化处理。

3.2.2 插入数据

  • Insert API 流程
    • 输入验证:首先检查传入的数据格式是否正确。
    • 数据分割:如果一次性插入大量记录,则会将其分批次处理以提高效率。
    • 持久化:最终将转换后的二进制格式写入底层存储系统中。

3.2.3 创建索引

  • CreateIndex API 执行过程
    • 选择算法:根据业务需求及性能考虑选取合适的索引类型(如IVF_FLAT, HNSW等)。
    • 构建过程:依据选定的方法构造索引结构。这个阶段可能涉及到复杂的计算任务,因此往往是在后台异步完成。
    • 优化调整:索引建立完成后,还会进行进一步调优以确保最佳性能表现。

3.3 分区与分区管理

3.3.1 CreatePartition API 操作

  • 创建分区:允许用户按需创建逻辑上的数据子集,以便于更高效地管理和检索相关信息。
  • 数据迁移:支持跨分区移动数据项的功能,这对于动态调整数据布局非常有用。

3.4 总结

通过对 Milvus 向量数据库工作原理的全面剖析,我们了解到它不仅提供了强大的向量化数据处理能力,还具备灵活的扩展性和优异的性能表现。无论是对于大规模相似度搜索还是复杂场景下的数据分析应用来说,Milvus 都是一个极具竞争力的选择。接下来的部分将继续通过具体示例展示如何利用 Python 语言实现与该数据库的交互操作。

四、Milvus 向量数据库数据样例

本章将通过具体的例子来展示如何使用 Milvus 向量数据库处理实际问题。我们将探讨向量数据的格式,如何准备和读取这些数据,以及利用正则表达式对数据进行匹配的过程。此外,还将介绍一个基于单个文件的数据导入案例,旨在帮助读者更好地理解 Milvus 的应用。

4.1 数据样本结构与特点

在开始之前,我们首先需要明确什么是向量数据以及它们通常的结构特征。向量是机器学习模型(如神经网络)中非常重要的输出形式之一,用来表示文本、图片或其他类型的信息。对于Milvus而言,每条记录至少包含一个向量字段(可以有多个),以及其他可选的标量字段用于存储辅助信息或元数据。

4.1.1 向量数据示例

假设我们正在开发一个电影推荐系统,其中用户行为被编码成固定长度的向量。每个用户的观看历史由一系列电影ID组成,经过预训练模型转换后得到如下所示的向量表示:

[
    [0.1, 0.2, 0.3, ..., 0.8],  # 用户A的行为向量
    [0.5, 0.6, 0.7, ..., 0.9],  # 用户B的行为向量
    ...
]

这里每一行代表了一个用户的行为模式。为了便于管理,我们还可能为每个向量附加一些额外信息,比如用户名、年龄等标量属性。

4.2 使用正则表达式匹配数据

当面对大量文本或者混合类型的输入时,利用正则表达式可以从原始数据中筛选出符合条件的部分。例如,在上述电影推荐场景下,如果想找到所有偏好科幻类影片的用户,则可以通过搜索描述字段中的特定关键词实现。

假设我们的用户信息表中有一列description用于存放个人简介,那么就可以编写如下正则表达式来查找提到“sci-fi”的所有条目:

import re

pattern = r"\bsci-fi\b"  # 匹配单词边界内的"sci-fi"
for user in users:
    if re.search(pattern, user['description'], re.IGNORECASE):
        print(f"User {user['name']} likes sci-fi movies.")

这样就能够在不改变原始数据的情况下快速定位到目标群体了。

4.3 以单个文件为单位读取并处理数据

实际项目中经常遇到的情况是从外部来源获取大批量数据,这时候就需要有一个高效的方法来进行批量导入。接下来将以CSV文件为例,说明如何将其内容加载进Milvus库内。

4.3.1 CSV文件格式定义

假定我们有一个名为users.csv的文件,其结构如下:

id,name,age,description,embedding
1,John,25,"Loves sci-fi and action movies",[0.1, 0.2, ... , 0.8]
2,Alice,30,"Favors romantic comedies",[0.5, 0.6, ... , 0.9]
...

这里的embedding列即为我们关心的核心数据——用户行为向量。

4.3.2 导入流程

  1. 解析CSV文件:使用Python内置库csv读取文件,并逐行解析。
  2. 数据清洗:确保每个嵌入向量都符合预期格式(长度一致且元素为浮点数)。
  3. 创建集合:如果目标集合尚不存在,则需先调用Milvus API建立新集合。
  4. 插入数据:批量将解析后的数据插入至相应集合中。

下面是一个完整的代码片段展示了这一过程:

import csv
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection

# 连接到Milvus服务器
connections.connect("default", host="localhost", port="19530")

# 定义字段
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="name", dtype=DataType.VARCHAR, max_length=100),
    FieldSchema(name="age", dtype=DataType.INT64),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)  # 假设向量维度为128
]

schema = CollectionSchema(fields, "User behavior data")
collection = Collection("users", schema)

# 打开CSV文件
with open('users.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    batch_size = 100  # 每批处理数量
    records = []

    for row in reader:
        record = {
            'id': int(row['id']),
            'name': row['name'],
            'age': int(row['age']),
            'embedding': eval(row['embedding'])  # 将字符串转回列表
        }
        records.append(record)

        if len(records) >= batch_size:
            collection.insert(records)
            records.clear()

    # 插入剩余不足一批次的数据
    if records:
        collection.insert(records)

以上就是关于如何利用Milvus处理具体数据样例的一些基本知识与技巧。通过对真实应用场景下的操作演示,希望能给读者提供清晰直观的理解。

五、Milvus 向量数据库 Python 代码实现

本章节将通过一系列具体的 Python 代码示例,演示如何使用 Milvus 向量数据库执行基本操作,包括但不限于连接数据库、创建集合(Collection)、插入数据、执行向量相似度查询等。这将帮助开发者快速入门并理解如何在实际项目中集成 Milvus。

5.1 环境准备与安装依赖

首先,确保你的环境中已经安装了 Python 及其包管理工具 pip。接着,你需要安装 pymilvus 库,它是官方提供的 Python 客户端库,用于简化与 Milvus 的交互过程。可以通过以下命令安装:

pip install pymilvus

除了上述库外,如果你打算生成或处理向量数据,则可能还需要 NumPy 或其他相关科学计算库。这里我们假定你已经有了这些必要的环境设置。

5.1.1 连接到 Milvus 数据库

在开始任何操作之前,首先要做的就是建立与 Milvus 服务器的连接。这里假设你的 Milvus 服务运行于本地,并监听默认端口 19530。

from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection

# 建立连接
connections.connect("default", host="localhost", port="19530")

一旦成功连接,就可以进行后续的操作了。

5.2 创建集合

在 Milvus 中,“集合”是用来存储特定类型向量及相关元信息的数据容器。下面展示如何定义一个包含 ID 和向量字段的简单集合。

5.2.1 定义字段和模式

每个集合都由多个字段组成,每个字段都有自己的名称、类型和其他属性。对于向量检索应用来说,至少需要定义两个字段:一个是唯一标识符(ID),另一个是存储实际向量数据的字段。

# 定义字段
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)  # 以128维为例
]

# 创建模式
schema = CollectionSchema(fields, "Example collection for vector similarity search")

# 初始化集合
collection = Collection("example_collection", schema)

这里的 dim 参数指定了向量的维度大小。请注意,选择合适的维度对性能至关重要;通常情况下,较低维度的向量可以提供更快的搜索速度。

5.3 插入数据

当集合准备好之后,接下来就可以往里面添加一些测试数据了。我们将随机生成一些 128 维的浮点数向量,并将其连同对应的 ID 一起插入到刚才创建的集合中去。

import numpy as np

# 生成随机向量
data = [
    [i for i in range(1000)],  # IDs from 0 to 999
    np.random.random((1000, 128)).tolist()  # 1000 vectors of dimension 128
]

# 执行插入
mr = collection.insert(data)

print(f"Number of entities inserted: {mr.insert_count}")

这段代码首先生成了一个长度为 1000 的整数列表作为 ID,然后又生成了一组同样数量但每个都是 128 维的随机浮点数组合作为我们的向量数据。最后调用 insert() 方法把这些数据批量加入到指定的集合里。

5.4 创建索引

为了加速未来的查询效率,我们需要在刚刚插入的数据上构建适当的索引结构。这里采用的是 IVF_FLAT 类型的索引,这是一种广泛应用于大规模近似最近邻搜索的方法。

index_params = {
    "index_type": "IVF_FLAT",
    "params": {"nlist": 128},
    "metric_type": "L2"
}

collection.create_index(field_name="embedding", index_params=index_params)
  • nlist 参数决定了聚类中心的数量,在实践中应根据实际情况调整。
  • metric_type 表示距离度量方式,可选值有 L2(欧氏距离)和 IP(内积)等。

完成索引创建后,记得调用 load() 函数加载整个集合至内存,以便于后续快速访问。

collection.load()

5.5 查询操作

现在万事俱备,只欠东风——即如何从已有的向量集中找出最接近给定向量的结果。下面是一个简单的例子,演示了如何基于单个查询向量执行 KNN 搜索。

query_vector = np.random.random((1, 128))  # Generate a random query vector

search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(query_vector, "embedding", param=search_params, limit=5)

for result in results:
    print(f"ID: {result.id}, Distance: {result.distance}")

此例中,我们指定了希望返回结果中的前五个最相似项 (limit=5)。此外,还设置了 nprobe 参数来控制搜索过程中考虑的簇数目,以此平衡精度与速度之间的关系。

以上便是利用 Python 语言与 Milvus 向量数据库进行交互的基本步骤。当然,实际应用中可能还会涉及到更多高级功能,比如多条件过滤、分区管理等,这些都是值得深入探索的内容。希望这篇指南能够为您的项目开发带来一定的帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NodeJS连接MySQL 8.4报错:code: ‘ER_TABLEACCESS_DENIED_ERROR‘

NodeJS连接MySQL 8.4报错:code: ER_TABLEACCESS_DENIED_ERROR { code: ER_TABLEACCESS_DENIED_ERROR, errno: 1142, sqlMessage: "SELECT command denied to user 用户名localhost for table 表名", sqlState: 42000, index: 0, sql: SELECT …

SCR相对标准偏差、氨氮比、截面速度,多平面计算

SCR截面速度、氨氮比等标准及相对标准偏差计算。 程序用来处理fluent通过xyplot导出的数据,导出可以选择多个平面,可计算标准偏差SD、相对标准偏差RSD,平均速度,适用于求解多个平面 # -*- coding: utf-8 -*- """ Created on …

maven本地打jar包依赖

本地工程的pom文件中引入了mysql依赖,但是在maven库中没有拉下来,可以到mysql官网下载jar包,使用maven手动打包到本地仓库中: 官网地址:MySQL :: Download MySQL Connector/J (Archived Versions) 在jar包所在位置的路…

jupyter界面修改成中文教程

在系统变量里面增加一个变量名:LANG 变量值:zh_ CN.UTF8 成功修改成为中文

什么是JavaBean?

什么是JavaBean?—— Java开发中的数据封装利器 在Java开发中,JavaBean 是一个非常实用且常见的设计模式,它用于简洁、高效地封装和传递数据。随着Java应用的广泛使用,JavaBean成为许多开发者不可或缺的工具。在本文中&#xff0c…

【linux】centos7卸载默认的jdk

查看是否已经安装java java -version 查看java文件 rpm -qa | grep java 卸载相关包 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarchrpm -e --nodeps tzdata-java-2020a-1.el7.noarchrpm…

Labview通讯测试耗时

写法 写命令立即读出 写命令后立即读出,在同一时间不能有多个地方写入,因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI,轮询PLC指令 在锁内耗时,就是TCP读写的实际耗时为5-8ms,在主VI六个循环…

【面试经典150】day 7

目录 1.买卖股票的最佳时机 II 2.跳跃游戏 3.跳跃游戏 II 4.H 指数 5.O(1) 时间插入、删除和获取随机元素 6.除自身以外数组的乘积 7.加油站 8.分发糖果 1.买卖股票的最佳时机 II class Solution {public int maxProfit(int[] prices) {//和1相比,这个可以一直买…

【WebSocket实战】——创建项目初始架构

这一篇文章主要是为了介绍如何在visual中创建一个项目并服务于我们要做的websockt项目,所以这里如果已经懂得的人,可以直接跳过。 目录 1)创建空白解决方案 2)创建asp.NET Core项目 3)创建winform项目作为客户端1 …

53页 PPT煤炭行业数字化转型规划方案

▲关注智慧方案文库,学习9000多份最新解决方案,其中 PPT、WORD超过7000多份 ,覆盖智慧城市多数领域的深度知识社区,稳定更新4年,日积月累,更懂行业需求。 53页 PPT煤炭行业数字化转型规划方案 通过对煤企高…

乐维网管平台(一):如何精准掌控 IP 管理

业网络已成为支撑业务运转的关键基础设施,而在企业网络管理中,IP 管理至关重要,它就像是网络秩序的守护者,确保网络的高效运行、安全可靠。 一、为什么企业要进行 IP 管理 1. 优化资源分配 IP 地址作为网络中的重要资源&#xf…

驱动-----向内核新加文件

编译的过程是: 1.先复制一个默认的配置到.config(存放make menuconfig的配置结果)文件。 2.make menuconfig来可视化的选择编译的对象。 3.编译与否保存在.config里面 4.然后就makefile,使用.config中的配置 接下来就是加自己的驱动文件,把自己的文件编译加到内核里面…

探索 CSS Houdini:轻松构建酷炫的 3D 卡片翻转动画

在本文中,我将通过构建一个3D翻卡动画来探索Houdini的功能。这将帮助你了解Houdini的核心概念,并引导你完成实际的代码实现。你不仅能够掌握 Houdini 的核心概念,还可以跟随实际的代码实现,逐步完成这个动画效果。 我们将深入探讨…

SpringBoot基于若依项目工时统计成本核算管理源码带教程

是前后端分离的架构,前端使用Vue2,后端使用SpringBoot2。 技术框架:SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 这是一…

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 # 目录 简介 Date工具类单元测试 Date工具类 简介 本文章是个人总结实际工作中常用到的Date工具类,主要包含Java-jdk8以下版本的Date相关使用方法,可以方便的在工作中灵活的应用,在个人工作期间频繁使用这些时间的格…

paddleocr使用FastDeploy 部署工具部署 rknn 模型

在 PC 端转换 pdmodel 模型为 rknn 模型和在板端使用百度飞浆开发的 FastDeploy 部署工具部署 rknn 模型 以下内容是在 PC 端系统为 Ubuntu20.04,板端系统为ubuntu20.04 的环境下实现的 描述: 官网地址 RKNN软件栈可以帮助用户快速将AI模型部署到Rockc…

【C++】STL容器-string常用接口

1.string类的优势及重要性(部分) C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想&…

join 在使用的时候优化

join 在使用的时候优化 join 在使用的时候要大表驱动小表,所谓大表驱动小表要如何判别大表和小表的区别呢? 简要分析 join MySQL 的执行计划 explain select * from t1 join t2 on t1.id = t2.id;我们直接执行上面的 explain 就可以看到他们的执行计划,并且在被驱动表中看…

计算机网络-RSTP工作过程与原理

前面我们已经学习了RSTP的一些基础概念以及对于STP的改进之处,因为RSTP兼容STP,所以实际上两者工作原理是一致的,这里只简单过一遍,然后进行一些基础实验即可,大致还是遵循选举根桥、确定端口角色与状态、全网收敛的思…

蓝牙资讯|iOS 18.1 正式版下周推送,AirPods Pro 2耳机将带来助听器功能

苹果公司宣布将在下周发布 iOS 18.1 正式版,同时确认该更新将为 AirPods Pro 2 耳机带来新增“临床级”助听器功能。在启用功能后,用户首先需要使用 AirPods 和 iPhone 进行简短的听力测试,如果检测到听力损失,系统将创建一项“个…