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

TDengine 语言连接器(Rust)

简介

taos 是 TDengine 的官方 Rust 语言连接器,Rust 开发人员可以通过它开发存取 TDengine 数据库的应用软件。

该 Rust 连接器的源码托管在 GitHub。

Rust 版本兼容性

支持 Rust 1.70 及以上版本。

支持的平台

  • 原生连接支持的平台和 TDengine 客户端驱动支持的平台一致。
  • WebSocket 连接支持所有能运行 Rust 的平台。

版本历史

Rust 连接器版本主要变化TDengine 版本
v0.12.31. 优化了 WebSocket 查询和插入性能
2. 支持了 VARBINARY 和 GEOMETRY 类型
3.3.0.0 及更高版本
v0.12.0WebSocket 支持压缩3.2.3.0 及更高版本
v0.11.0TMQ 功能优化3.2.0.0 及更高版本
v0.10.0WebSocket endpoint 变更3.1.0.0 及更高版本
v0.9.2STMT:WebSocket 下获取 tag_fields、col_fields3.0.7.0 及更高版本
v0.8.12消息订阅:获取消费进度及按照指定进度开始消费3.0.5.0 及更高版本
v0.8.0支持无模式写入3.0.4.0 及更高版本
v0.7.6支持在请求中使用 req_id3.0.3.0 及更高版本
v0.6.0基础功能3.0.0.0 及更高版本

异常和错误码

在报错后,可以获取到错误的具体信息:

match conn.exec(sql) {Ok(_) => {Ok(())}Err(e) => {eprintln!("ERROR: {:?}", e);Err(e)}
}

错误信息的错误码可以参考:错误码

数据类型映射

TDengine 目前支持时间戳、数字、字符、布尔类型,与 Rust 对应类型转换如下:

TDengine DataTypeRust DataType
TIMESTAMPTimestamp
INTi32
BIGINTi64
FLOATf32
DOUBLEf64
SMALLINTi16
TINYINTi8
BOOLbool
BINARYVec<u8>
NCHARString
JSONserde_json::Value
VARBINARYBytes
GEOMETRYBytes

注意:JSON 类型仅在 tag 中支持。

示例程序汇总

请参考:rust example

常见问题

请参考 FAQ

API 参考

Rust 连接器的接口分为同步接口和异步接口,一般同步接口是由异步接口实现,方法签名除 async 关键字外基本相同。对于同步接口和异步接口功能一样的接口,本文档只提供同步接口的说明。
对于 WebSocket 连接和原生连接两种方式,除了建立连接的 DSN 不同,其余接口调用没有区别。

连接功能

DSN

TaosBuilder 通过 DSN 连接描述字符串创建一个连接构造器。
DSN 描述字符串基本结构如下:

<driver>[+<protocol>]://[[<username>:<password>@]<host>:<port>][/<database>][?<p1>=<v1>[&<p2>=<v2>]]
|------|------------|---|-----------|-----------|------|------|------------|-----------------------|
|driver|   protocol |   | username  | password  | host | port |  database  |  params               |

各部分意义见下表:

  • driver:必须指定驱动名以便连接器选择何种方式创建连接,支持如下驱动名:
    • taos:使用 TDengine 连接器驱动,默认是使用 taos 驱动。
    • tmq:使用 TMQ 订阅数据。
  • protocol:显示指定以何种方式建立连接,例如:taos+ws://localhost:6041 指定以 WebSocket 方式建立连接。
    • http/ws:使用 WebSocket 创建连接。
    • https/wss:在 WebSocket 连接方式下显示启用 SSL/TLS 连接。
  • username/password:用于创建连接的用户名及密码。
  • host/port:指定创建连接的服务器及端口,当不指定服务器地址及端口时(taos://),原生连接默认为 localhost:6030,WebSocket 连接默认为 localhost:6041
  • database:指定默认连接的数据库名,可选参数。
  • params:其他可选参数。

一个完整的 DSN 描述字符串示例如下:taos+ws://localhost:6041/test,表示使用 WebSocket(ws)方式通过 6041 端口连接服务器 localhost,并指定默认数据库为 test

TaosBuilder

TaosBuilder 结构体主要提供了根据 DSN 构建 Taos 对象的方法,还提供了检查连接,以及获取客户端版本号等功能。

  • fn available_params() -> &'static [&'static str]

    • 接口说明:获取 DSN 中可用的参数列表。
    • 返回值:返回静态字符串切片的引用,包含可用的参数名称。
  • fn from_dsn<D: IntoDsn>(dsn: D) -> RawResult<Self>

    • 接口说明:使用 DSN 字符串创建连接,不检查连接。
    • 参数说明
      • dsn:DSN 字符串或可转换为 DSN 的类型。
    • 返回值:成功时返回自身类型的 RawResult,失败时返回错误。
  • fn client_version() -> &'static str

    • 接口说明:获取客户端版本。
    • 返回值:返回客户端版本的静态字符串。
  • fn ping(&self, _: &mut Self::Target) -> RawResult<()>

    • 接口说明:检查连接是否仍然存活。
    • 参数说明
      • _:目标连接的可变引用。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。
  • fn ready(&self) -> bool

    • 接口说明:检查是否准备好连接。
    • 返回值:大多数情况下返回 true,表示地址准备好连接。
  • fn build(&self) -> RawResult<Self::Target>

    • 接口说明:从此结构创建新的 Taos 对象。
    • 返回值:成功时返回目标连接类型的 RawResult,失败时返回错误。

执行 SQL

执行 SQL 主要使用 Taos 结构体,获取结果集以及元数据需要使用下节介绍的 ResultSet 结构体 和列信息 Field 结构体。

Taos

Taos 结构体提供了多个数据库操作的 API,包括:执行 SQL,无模式写入,以及一些常用数据库查询的封装(如创建数据库,获取)

  • pub fn is_native(&self) -> bool

    • 接口说明:判断连接是否使用本地协议。
    • 返回值:如果使用本地协议,则返回 true,否则返回 false
  • pub fn is_ws(&self) -> bool

    • 接口说明:判断连接是否使用 WebSocket 协议。
    • 返回值:如果使用 WebSocket 协议,则返回 true,否则返回 false
  • fn query<T: AsRef<str>>(&self, sql: T) -> RawResult<Self::ResultSet>

    • 接口说明:执行 SQL 查询。
    • 参数说明
      • sql:要执行的 SQL 语句。
    • 返回值:成功时返回结果集 ResultSetRawResult,失败时返回错误。
  • fn query_with_req_id<T: AsRef<str>>(&self, sql: T, req_id: u64) -> RawResult<Self::ResultSet>

    • 接口说明:带请求 ID 执行 SQL 查询。
    • 参数说明
      • sql:要执行的 SQL 语句。
      • req_id:请求 ID。
    • 返回值:成功时返回结果集 ResultSetRawResult,失败时返回错误。
  • fn exec<T: AsRef<str>>(&self, sql: T) -> RawResult<usize>

    • 接口说明:执行 SQL 语句。
    • 参数说明
      • sql:要执行的 SQL 语句。
    • 返回值:成功时返回受影响的行数,失败时返回错误。
  • fn exec_many<T: AsRef<str>, I: IntoIterator<Item = T>>(&self, input: I) -> RawResult<usize>

    • 接口说明:批量执行 SQL 语句。
    • 参数说明
      • input:要执行的 SQL 语句集合。
    • 返回值:成功时返回总共受影响的行数,失败时返回错误。
  • fn query_one<T: AsRef<str>, O: DeserializeOwned>(&self, sql: T) -> RawResult<Option<O>>

    • 接口说明:执行 SQL 查询并返回单个结果。
    • 参数说明
      • sql:要执行的 SQL 语句。
    • 返回值:成功时返回可选的结果对象,失败时返回错误。
  • fn server_version(&self) -> RawResult<Cow<str>>

    • 接口说明:获取服务器版本。
    • 返回值:成功时返回服务器版本字符串的 RawResult,失败时返回错误。
  • fn create_topic(&self, name: impl AsRef<str>, sql: impl AsRef<str>) -> RawResult<()>

    • 接口说明:创建主题。
    • 参数说明
      • name:主题名称。
      • sql:关联的 SQL 语句。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。
  • fn databases(&self) -> RawResult<Vec<ShowDatabase>>

    • 接口说明:获取数据库列表。
    • 返回值:成功时返回数据库列表的 RawResult,失败时返回错误。
  • fn topics(&self) -> RawResult<Vec<Topic>>

    • 接口说明:获取主题信息。
    • 返回值:成功时返回主题列表的 RawResult,失败时返回错误。
  • fn describe(&self, table: &str) -> RawResult<Describe>

    • 接口说明:描述表结构。
    • 参数说明
      • table:表名称。
    • 返回值:成功时返回表结构描述的 RawResult,失败时返回错误。
  • fn database_exists(&self, name: &str) -> RawResult<bool>

    • 接口说明:检查数据库是否存在。
    • 参数说明
      • name:数据库名称。
    • 返回值:成功时返回布尔值的 RawResult,指示数据库是否存在,失败时返回错误。
  • fn put(&self, data: &SmlData) -> RawResult<()>

    • 接口说明:写入无模式数据,SmlData 结构介绍见下文。
    • 参数说明
      • data:无模式数据。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。

SmlData

SmlData 结构体提供了无模式写入的数据结构,以及获取属性的方法。

  • pub struct SmlData

    • 结构体说明SmlData 结构体用于存储无模式数据及其相关信息。
    • 字段说明
      • protocol:无模式协议,支持 InfluxDB Line, OpenTSDB Telnet, OpenTSDB Json, 三种。
      • precision:时间戳精度,支持 Hours, Minutes, Seconds, Millisecond(默认), Microsecond, Nanosecond
      • data:数据列表。
      • ttl:数据存活时间,单位为秒。
      • req_id:请求 ID。
  • pub fn protocol(&self) -> SchemalessProtocol

    • 接口说明:获取无模式协议。
    • 返回值:无模式协议类型,支持 InfluxDB Line, OpenTSDB Telnet, OpenTSDB Json, 三种。
  • pub fn precision(&self) -> SchemalessPrecision

    • 接口说明:获取时间戳精度。
    • 返回值:时间戳精度类型,支持 Hours, Minutes, Seconds, Millisecond(默认), Microsecond, Nanosecond
  • pub fn data(&self) -> &Vec<String>

    • 接口说明:获取数据列表。
    • 返回值:数据列表的引用。
  • pub fn ttl(&self) -> Option<i32>

    • 接口说明:获取数据存活时间。
    • 返回值:数据存活时间(可选),单位为秒。
  • pub fn req_id(&self) -> Option<u64>

    • 接口说明:获取请求 ID。
    • 返回值:请求 ID(可选)。

结果获取

ResultSet

ResultSet 结构体提供了结果集的一些方法,可以用来获取结果集的数据和元数据。

  • fn affected_rows(&self) -> i32

    • 接口说明:获取受影响的行数。
    • 返回值:受影响的行数,类型为 i32
  • fn precision(&self) -> Precision

    • 接口说明:获取精度信息。
    • 返回值:精度信息,类型为 Precision
  • fn fields(&self) -> &[Field]

    • 接口说明:获取字段信息。见下文 Field 结构体描述。
    • 返回值:字段信息数组的引用。
  • fn summary(&self) -> (usize, usize)

    • 接口说明:获取摘要信息。
    • 返回值:包含两个 usize 类型的元组,分别表示某些统计信息。
  • fn num_of_fields(&self) -> usize

    • 接口说明:获取字段数量。
    • 返回值:字段数量,类型为 usize
  • fn blocks(&mut self) -> IBlockIter<'_, Self>

    • 接口说明:获取原始数据块的迭代器。
    • 返回值:原始数据块的迭代器,类型为 IBlockIter<'_, Self>
  • fn rows(&mut self) -> IRowsIter<'_, Self>

    • 接口说明:获取按行查询的迭代器。
    • 返回值:按行查询的迭代器,类型为 IRowsIter<'_, Self>
  • fn deserialize<T>(&mut self) -> Map<IRowsIter<'_, Self>, fn(_: Result<RowView<'_>, Error>) -> Result<T, Error>>

    • 接口说明:反序列化行数据。
    • 泛型参数
      • T:目标类型,需实现 DeserializeOwned
    • 返回值:反序列化结果的映射,类型为 Map<IRowsIter<'_, Self>, fn(_: Result<RowView<'_>, Error>) -> Result<T, Error>>
  • fn to_rows_vec(&mut self) -> Result<Vec<Vec<Value>>, Error>

    • 接口说明:将结果集转换为值的二维向量。
    • 返回值:成功时返回值的二维向量,失败时返回错误,类型为 Result<Vec<Vec<Value>>, Error>
Field

Field 结构体提供了字段信息的一些方法。

  • pub const fn empty() -> Field

    • 接口说明:创建一个空的 Field 实例。
    • 返回值:返回一个空的 Field 实例。
  • pub fn new(name: impl Into<String>, ty: Ty, bytes: u32) -> Field

    • 接口说明:创建一个新的 Field 实例。
    • 参数说明
      • name:字段名称。
      • ty:字段类型。
      • bytes:字段数据长度。
    • 返回值:返回一个新的 Field 实例。
  • pub fn name(&self) -> &str

    • 接口说明:获取字段名称。
    • 返回值:返回字段的名称。
  • pub fn escaped_name(&self) -> String

    • 接口说明:获取转义后的字段名称。
    • 返回值:返回转义后的字段名称。
  • pub const fn ty(&self) -> Ty

    • 接口说明:获取字段类型。
    • 返回值:返回字段的类型。
  • pub const fn bytes(&self) -> u32

    • 接口说明:获取字段的预设长度。
    • 返回值:对于变长数据类型,返回其预设长度;对于其他类型,返回其字节宽度。
  • pub fn to_c_field(&self) -> c_field_t

    • 接口说明:将 Field 实例转换为 C 语言结构体。
    • 返回值:返回 C 语言结构体表示的字段。
  • pub fn sql_repr(&self) -> String

    • 接口说明:表示字段在 SQL 中的数据类型。
    • 返回值:例如:“INT”, “VARCHAR(100)” 等 SQL 数据类型表示。

参数绑定

参数绑定功能主要由 Stmt 结构体支持。

Stmt

Stmt 结构体提供了参数绑定相关功能,用于实现高效写入。

  • fn init(taos: &Q) -> RawResult<Self>

    • 接口说明:初始化参数绑定实例。
    • 参数说明
      • taos:数据库连接实例。
    • 返回值:成功时返回初始化的实例,失败时返回错误。
  • fn init_with_req_id(taos: &Q, req_id: u64) -> RawResult<Self>

    • 接口说明:使用请求 ID 初始化参数绑定实例。
    • 参数说明
      • taos:数据库连接实例。
      • req_id:请求 ID。
    • 返回值:成功时返回初始化的实例,失败时返回错误。
  • fn prepare<S: AsRef<str>>(&mut self, sql: S) -> RawResult<&mut Self>

    • 接口说明:准备要绑定的 SQL 语句。
    • 参数说明
      • sql:要准备的 SQL 语句。
    • 返回值:成功时返回自身的可变引用,失败时返回错误。
  • fn set_tbname<S: AsRef<str>>(&mut self, name: S) -> RawResult<&mut Self>

    • 接口说明:设置表名称。
    • 参数说明
      • name:表名称。
    • 返回值:成功时返回自身的可变引用,失败时返回错误。
  • fn set_tags(&mut self, tags: &[Value]) -> RawResult<&mut Self>

    • 接口说明:设置标签。
    • 参数说明
      • tags:标签数组。
    • 返回值:成功时返回自身的可变引用,失败时返回错误。
  • fn set_tbname_tags<S: AsRef<str>>(&mut self, name: S, tags: &[Value]) -> RawResult<&mut Self>

    • 接口说明:设置表名称和标签。
    • 参数说明
      • name:表名称。
      • tags:标签数组。
    • 返回值:成功时返回自身的可变引用,失败时返回错误。
  • fn bind(&mut self, params: &[ColumnView]) -> RawResult<&mut Self>

    • 接口说明:绑定参数。
    • 参数说明
      • params:参数数组。
    • 返回值:成功时返回自身的可变引用,失败时返回错误。
  • fn add_batch(&mut self) -> RawResult<&mut Self>

    • 接口说明:添加批处理。
    • 返回值:成功时返回自身的可变引用,失败时返回错误。
  • fn execute(&mut self) -> RawResult<usize>

    • 接口说明:执行语句。
    • 返回值:成功时返回受影响的行数,失败时返回错误。
  • fn affected_rows(&self) -> usize

    • 接口说明:获取受影响的行数。
    • 返回值:受影响的行数。

数据订阅

数据订阅主要涉及三个结构体,提供连接建立的 TmqBuilder,消费数据和提交偏移量的 Consumer,以及偏移量 Offset。

TmqBuilder

同 TaosBuilder 类似,TmqBuilder 提供了创建消费者对象的功能。

  • fn available_params() -> &'static [&'static str]

    • 接口说明:获取 DSN 中可用的参数列表。
    • 返回值:返回静态字符串切片的引用,包含可用的参数名称。
  • fn from_dsn<D: IntoDsn>(dsn: D) -> RawResult<Self>

    • 接口说明:使用 DSN 字符串创建连接,不检查连接。
    • 参数说明
      • dsn:DSN 字符串或可转换为 DSN 的类型。
    • 返回值:成功时返回自身类型的 RawResult,失败时返回错误。
  • fn client_version() -> &'static str

    • 接口说明:获取客户端版本。
    • 返回值:返回客户端版本的静态字符串。
  • fn ping(&self, conn: &mut Self::Target) -> RawResult<()>

    • 接口说明:检查连接是否仍然存活。
    • 参数说明
      • conn:目标连接的可变引用。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。
  • fn ready(&self) -> bool

    • 接口说明:检查是否准备好连接。
    • 返回值:大多数情况下返回 true,表示地址准备好连接。
  • fn build(&self) -> RawResult<Self::Target>

    • 接口说明:从此结构创建新的连接。
    • 返回值:成功时返回目标连接类型的 RawResult,失败时返回错误。
Consumer

Consumer 结构体提供了订阅相关的功能,包括订阅,获取消息,提交偏移量,设置偏移量等。

  • fn subscribe<T: Into<String>, I: IntoIterator<Item = T> + Send>(&mut self, topics: I) -> RawResult<()>

    • 接口说明:订阅一系列主题。
    • 参数说明
      • topics:要订阅的主题列表。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。
  • fn recv_timeout(&self, timeout: Timeout) -> RawResult<Option<(Self::Offset, MessageSet<Self::Meta, Self::Data>)>>

    • 接口说明:在指定超时时间内接收消息。
    • 参数说明
      • timeout:超时时间。
    • 返回值:成功时返回消息,失败时返回错误。
  • fn commit(&self, offset: Self::Offset) -> RawResult<()>

    • 接口说明:提交给定的偏移量。
    • 参数说明
      • offset:要提交的偏移量,见下文 Offset 结构体。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。
  • fn commit_offset(&self, topic_name: &str, vgroup_id: VGroupId, offset: i64) -> RawResult<()>

    • 接口说明:为特定主题和分区提交偏移量。
    • 参数说明
      • topic_name:主题名称。
      • vgroup_id:分区 ID。
      • offset:要提交的偏移量。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。
  • fn list_topics(&self) -> RawResult<Vec<String>>

    • 接口说明:列出所有可用主题。
    • 返回值:成功时返回主题列表,失败时返回错误。
  • fn assignments(&self) -> Option<Vec<(String, Vec<Assignment>)>>

    • 接口说明:获取当前分配的主题和分区。
    • 返回值:成功时返回分配信息,失败时返回 None
  • fn offset_seek(&mut self, topic: &str, vg_id: VGroupId, offset: i64) -> RawResult<()>

    • 接口说明:为特定主题和分区设置偏移量。
    • 参数说明
      • topic:主题名称。
      • vg_id:分区 ID。
      • offset:要设置的偏移量。
    • 返回值:成功时返回空的 RawResult,失败时返回错误。
  • fn committed(&self, topic: &str, vgroup_id: VGroupId) -> RawResult<i64>

    • 接口说明:获取特定主题和分区的已提交偏移量。
    • 参数说明
      • topic:主题名称。
      • vgroup_id:分区 ID。
    • 返回值:成功时返回偏移量,失败时返回错误。
  • fn position(&self, topic: &str, vgroup_id: VGroupId) -> RawResult<i64>

    • 接口说明:获取特定主题和分区的当前位置。
    • 参数说明
      • topic:主题名称。
      • vgroup_id:分区 ID。
    • 返回值:成功时返回当前位置,失败时返回错误。
Offset

Offset 结构体提供了获取当前消息所属的数据库,主题和分区信息。

  • fn database(&self) -> &str

    • 接口说明:获取当前消息的数据库名称。
    • 返回值:数据库名称的引用。
  • fn topic(&self) -> &str

    • 接口说明:获取当前消息的主题名称。
    • 返回值:主题名称的引用。
  • fn vgroup_id(&self) -> VGroupId

    • 接口说明:获取当前消息的分区 ID。
    • 返回值:分区 ID。

附录

  • Rust 连接器文档:https://docs.rs/taos
  • Rust 连接器项目地址:https://github.com/taosdata/taos-connector-rust
  • deadpool 连接池:https://crates.io/crates/deadpool
  • r2d2 连接池:https://crates.io/crates/r2d2

访问官网

更多内容欢迎访问 TDengine 官网

相关文章:

TDengine 语言连接器(Rust)

简介 taos 是 TDengine 的官方 Rust 语言连接器&#xff0c;Rust 开发人员可以通过它开发存取 TDengine 数据库的应用软件。 该 Rust 连接器的源码托管在 GitHub。 Rust 版本兼容性 支持 Rust 1.70 及以上版本。 支持的平台 原生连接支持的平台和 TDengine 客户端驱动支持…...

Leetcode 58. 最后一个单词的长度

给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a; 输入&#xff1a;s "Hello World" 输出&#xff1a;5…...

如何使用CAPL解析YAML文件?

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…...

如何让老电脑运行快些(极限榨干老电脑硬件)

要让老电脑运行更快&#xff0c;可以通过增加虚拟内存、优化系统设置和硬件升级等方法实现。以下是具体建议&#xff1a; 1. 增加虚拟内存&#xff08;适合硬盘空间大的老电脑&#xff09; 虚拟内存&#xff08;页面文件&#xff09;是硬盘上的一部分空间&#xff0c;用于扩展…...

C++在嵌入式中表现如何?

C在嵌入式中表现如何&#xff1f; 作为一个从机械转行到嵌入式开发的老兵&#xff0c;我深深体会到了C在嵌入式领域的独特魅力与挑战。从最初在厦门某马写单片机代码时的纯C语言&#xff0c;到后来在世界500强外企开发汽车电子项目时大量使用C&#xff0c;这些年的经历让我对这…...

Elasticsearch 系列专题 - 第四篇:聚合分析

聚合(Aggregation)是 Elasticsearch 的强大功能之一,允许你对数据进行分组、统计和分析。本篇将从基础到高级逐步讲解聚合的使用,并结合实际案例展示其应用。 1. 聚合基础 1.1 什么是聚合(Aggregation)? 聚合是对文档集合的统计分析,类似于 SQL 中的 GROUP BY 和聚合…...

TensorFlow充分并行化使用CPU

关键字&#xff1a;TensorFlow 并行化、TensorFlow CPU多线程 场景&#xff1a;在没有GPU或者GPU性能一般、环境不可用的机器上&#xff0c;对于多核CPU&#xff0c;有时TensorFlow或上层的Keras默认并没有完全利用机器的计算能力&#xff08;CPU占用没有接近100%&#xff09;…...

JAVA Web_定义Servlet_1 欢迎考生

题目 假定&#xff1a;本地服务器&#xff08;127.0.0.1&#xff09;上有一名为jspExam的Web项目&#xff0c;现按要求定义一Servlet&#xff0c;实现以下功能&#xff1a; 1&#xff09;Servlet的类名自定义&#xff0c;假定可以用以下url访问该Servlet, http://127.0.0.1:80…...

鸿蒙NEXT开发Emitter工具类(ArkTs)

import { emitter } from kit.BasicServicesKit;/*** TODO Emitter工具类&#xff08;进行线程间通信&#xff09;* author: 鸿蒙布道师* since: 2025/04/11*/ export class EmitterUtil {/*** 发送事件* param eventId 事件ID&#xff0c;string类型的eventId不支持空字符串。…...

vue项目引入tailwindcss

vue3项目引入tailwindcss vue3 vite tailwindcss3 版本 初始化项目 npm create vitelatest --template vue cd vue npm install npm run dev安装tailwindcss3 和 postcss 引入 npm install -D tailwindcss3 postcss autoprefixer // 初始化引用 npx tailwindcss init -p…...

Quartz修仙指南:从定时任务萌新到调度大能的终极奥义

各位被Thread.sleep()和ScheduledExecutorService折磨的道友们&#xff01;今天要解锁的是Java界任务调度至尊法宝——Quartz&#xff01;这货能让你像玉皇大帝安排天庭日程一样&#xff0c;精确控制每个任务的执行时机&#xff01;准备好告别蹩脚的手动定时器了吗&#xff1f;…...

Process Explorer 性能调优实战:精准定位资源泄漏与高负载进程

一、下载与安装 ‌下载地址‌ Process Explorer安装包下载&#xff1a;https://pan.quark.cn/s/950c36ba5364下载后解压压缩包&#xff0c;运行 procexp.exe&#xff08;32 位系统&#xff09;或 procexp64.exe&#xff08;64 位系统&#xff09;‌。 ‌界面概览‌ 主界面以树…...

Docker 常用命令指南

Docker 提供了丰富的命令行工具来管理镜像、容器、网络和数据卷等资源。本指南按类别整理 Docker 的常用命令,并为每个命令提供简体中文说明和示例,以帮助您快速查询和掌握日常使用。 1. 镜像管理 Docker 镜像(Image)是打包好的应用程序及其依赖环境,可用于创建容器。常用…...

3.1A、34V DC/DC 同步降压转换器WD5034

以下是对 WD5034 相关内容的编辑&#xff1a; WD5034 是一款性能卓越的高效率、单片同步降压 DC/DC 转换器&#xff0c;凭借其先进的恒定频率、平均电流模式控制架构&#xff0c;在众多电源管理芯片中脱颖而出。以下是其详细特点和优势&#xff1a; 出色的负载能力&#xff1a;…...

面向对象高级(1)

文章目录 final认识final关键字修饰类&#xff1a;修饰方法&#xff1a;修饰变量final修饰变量的注意事项 常量 单例类什么是设计模式&#xff1f;单例怎么写?饿汉式单例的特点是什么&#xff1f;单例有啥应用场景&#xff0c;有啥好处&#xff1f;懒汉式单例类。 枚举类认识枚…...

Vim 编辑器的常用快捷键介绍

以下是 Vim 编辑器的常用快捷键分类介绍&#xff0c;帮助你快速掌握高效编辑技巧&#xff1a; 一、基础模式切换 Vim 的核心是 模式化操作&#xff0c;常用模式包括&#xff1a; 普通模式&#xff08;默认&#xff09;&#xff1a;导航、命令输入。插入模式&#xff1a;输入/…...

如何使用AI辅助开发R语言

R语言是一种用于统计计算和图形生成的编程语言和软件环境&#xff0c;很多学术研究和数据分析的科学家和统计学家更青睐于它。但对与没有编程基础的初学者而言&#xff0c;R语言也是有一定使用难度的。不过现在有了通义灵码辅助编写R语言代码&#xff0c;我们完全可以用自然语言…...

docker 运行自定义化的服务-后端

docker 运行自定义化的服务-前端-CSDN博客 运行自定义化的后端服务 具体如下&#xff1a; ①打包后端项目&#xff0c;形成jar包 ②编写dockerfile文件&#xff0c;文件内容如下&#xff1a; # 使用官方 OpenJDK 镜像 FROM jdk8:1.8LABEL maintainer"ATB" version&…...

【Grok 大模型深度解析】第二期:架构探秘与训练哲学

在上一期的内容中,我们对 Grok 大模型从技术溯源的角度,了解了它从 Transformer 架构局限性出发,迈向混合架构创新的历程,同时也梳理了从 Grok - 1 到 Grok - 3 的版本迭代所带来的技术跃迁以及其独特的差异化优势。这一期,我们将深入到 Grok 大模型的架构内部,探究其精妙…...

oracle update 原理

Oracle 11g 中的 UPDATE 操作是数据库修改数据的关键机制&#xff0c;其核心原理涉及事务管理、多版本并发控制&#xff08;MVCC&#xff09;、Undo/Redo 日志、锁机制等 1. 执行前的准备 SQL 解析与执行计划&#xff1a; Oracle 解析 UPDATE 语句&#xff0c;生成执行计划&…...

优化项目缓慢卡顿

大家好&#xff0c;好久不见&#xff0c;因为最近在搞几个老项目&#xff0c;没怎么跟大家见面。在做老项目的时候发现了一些小问题拿出来跟大家分享分享。 因为这个问题是生产环境下面出现的&#xff0c;所以在开发环境的时候很难发现&#xff0c;而且网速快的话也很难发现&a…...

【黑客帝国连接虚拟与现实:数据采集系统(DAQ)硬核技术深度解析】

1. DAQ系统核心架构&#xff1a;从物理世界到数字域的精密映射 1.1 传感器与信号调理&#xff1a;物理量到电信号的精准转换 传感器的物理原理与非线性补偿 热电偶&#xff08;Thermocouple&#xff09;&#xff1a;基于塞贝克效应&#xff0c;其输出电压与温度差的非线性关系…...

解决unity设置鼠标图标发布以后没有效果的问题

public Texture2D dragCursor; Cursor.SetCursor(dragCursor, Vector2.zero, CursorMode.Auto); 首先设置一个Texture2D的变量&#xff0c;用来保存自己想要设置的图&#xff0c;然后将鼠标设置为自己定义的图片。原本是很简单的功能&#xff0c;而且在编辑器里面运行也正常。…...

CExercise_10_1动态数组Vector

题目&#xff1a; 动手自己实现动态数组Vector&#xff0c;基于以下结构体定义和函数声明&#xff1a; typedef int ElementType; typedef struct { ElementType *data; // 指向堆空间的数组 int size; // 元素的个数 int capacity; // 数组的容量 } Vector; // 请实现下面方法…...

Nextra + TypeScript + MDX 项目的完整目录结构

典型的 Nextra TypeScript MDX 博客项目的完整目录结构。 Pages 架构 my-blog/ ├── components/ # React 组件 │ ├── HelloWorld.tsx # 示例组件 │ └── ... # 其他组件 ├── pages/ # 页面…...

MDM功能演示:远程锁定与数据擦除,保障企业移动设备安全

在当今高度互联的商业环境中&#xff0c;企业数据伴随着员工穿梭于不同城市、时区和设备之间。智能手机、平板电脑和笔记本电脑赋予员工随时随地办公的能力&#xff0c;但也带来了新的安全挑战&#xff1a;设备一旦遗失或落入不当之手&#xff0c;企业数据就面临泄露风险。 无…...

快速idea本地和推送到远程仓库

在你需要推送的那个文件夹打开 #创建本地仓库 git init#添加文件并首次提交 git add . git commit -m "Initial commit"#添加远程仓库地址 git remote add origin https://gitee.com/你的用户名/你的仓库名.git#查看远程仓库是否设置chengg git remote -v#原来远程仓…...

django数据迁移操作受阻

错误信息&#xff1a; django.db.utils.OperationalError: (1227, Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation)根据错误信息分析&#xff0c;该问题是由于MySQL用户 缺乏SYSTEM_VARI…...

使用Lombok的@Slf4j和idea构建:找不到log符号-解决

问题&#xff1a;在使用Lombok的Slf4j构建项目时提示如下内容&#xff1a; MvcConfiguration.java:26:9 java: cannot find symbol symbol: variable log location: class cn.edu.wynu.mrcinerec.mrserver.config.WebMvcConfiguration查了网上的方法都是改配置 但是使用Googl…...

物联网传感器技术架构与功能解析

物联网传感器作为物联网体系的关键组成部分&#xff0c;主要承担环境或物体状态信息的捕获与传输功能。其通过检测物理、化学或生物参数&#xff0c;将模拟信号转化为数字格式&#xff0c;并利用多种通信协议实现数据交互&#xff0c;最终服务于各类智能化应用。 核心功能模块分…...

wx213基于php+vue+uniapp的新闻资讯小程序

开发语言&#xff1a;PHP框架&#xff1a;phpuniapp数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;PhpStorm 系统展示 管理员登录界面 管理员功能界面 新闻类别管理 新闻信息管理 用户管理 管理员管…...

SOEM编译Ubuntu 22.04

下载SOEM源码 $ git clone https://github.com/OpenEtherCATsociety/SOEM.git编译源码 进入SOEM源码目录 $ mkdir build && cd build $ cmake .. $ make测试 eth1 位网卡名 $ cd test/linux/slaveinfo/ $ sudo ./slaveinfo eth1SOEM (Simple Open EtherCAT Master) …...

栈和队列(Stack和Queue)

栈和队列&#xff08;Stack和Queue&#xff09; 1&#xff1a;栈的概念 示意图&#xff1a; 2&#xff1a;创建一个类Stack&#xff0c;给定一个整形数组elem&#xff0c;数组已使用长度usedSize&#xff0c;默认长度default_size为10&#xff0c;再给定一个构造方法&#xff0…...

Django的定制以及admin

Django是一个全面的Python Web开发框架&#xff0c;具有丰富的功能&#xff0c;和众多开箱即用的接口。 简单使用 我们使用Django的django-admin工具创建项目&#xff1a; django-admin startproject project1 cd project1 django-admin startapp app1以后&#xff0c;一个简…...

LLM架构解析:编码器-解码器架构(Encoder-Decoder Architecture)(第四部分)—— 从基础原理到实践应用的深度探索

本专栏深入探究从循环神经网络&#xff08;RNN&#xff09;到Transformer等自然语言处理&#xff08;NLP&#xff09;模型的架构&#xff0c;以及基于这些模型构建的应用程序。 本系列文章内容&#xff1a; NLP自然语言处理基础词嵌入&#xff08;Word Embeddings&#xff09…...

Unity VideoPlayer 播放无声音

增加一个videoPlayer下挂&#xff0c;audiorSource脚本 this.videoPlayer.EnableAudioTrack(0, true); this.videoPlayer.audioOutputMode VideoAudioOutputMode.AudioSource; this.videoPlayer.SetTargetAudioSource(0, this.videoPlayer.GetComponent<AudioSource>()…...

【Kafka基础】监控与维护:动态配置管理,灵活调整集群行为

1 基础配置操作 1.1 修改主题保留时间 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-configs.sh --alter \--bootstrap-server 192.168.10.33:9092 \--entity-type topics \--entity-name yourtopic \--add-config retention.ms86400000 参数说明&#xff1a; retention…...

AutoGen深度解析:从核心架构到多智能体协作的完整指南

AutoGen是微软推出的一个革命性多智能体(Multi-Agent)框架&#xff0c;它通过模块化设计和灵活的对话机制&#xff0c;极大地简化了基于大型语言模型(LLM)的智能体系统开发。本文将深入剖析AutoGen的两个核心模块——core基础架构和agentchat多智能体对话系统&#xff0c;带您全…...

接口请求控制工具

接口请求控制工具 功能说明代理转发安全控制访问控制错误处理配置管理日志管理 技术栈快速开始环境要求配置说明启动服务 工具源码 功能说明 代理转发 支持多路由配置支持静态资源代理灵活的路由规则配置支持请求转发和响应处理支持负载均衡 支持多目标服务器配置提供多种负载…...

Git 实践笔记

这里写自定义目录标题 一、将当前改动追加到某次commit上二、git 强制修改分支位置 一、将当前改动追加到某次commit上 stash工作区中的当前改动 git stash假设需要修改的commit是 f744c32&#xff0c;将HEAD移动到需要改动的commit的父提交上 git rebase f744c32^ --interact…...

记一个Unity中Humanoid中骨骼与武器脱离的问题

在Untiy中&#xff0c;有时人物的Humanoid的骨骼对应上了&#xff0c;但是套用动画的时候武器等节点有时会脱离&#xff0c;这是因为Humanoid只包含了人物骨骼&#xff0c;不包括其他额外的骨骼&#xff0c;因此如果想要武器节点也跟随&#xff0c;需要在Humanoid中也绑定骨骼设…...

Python asyncio

一些Pre关键概念 asyncio 本质上还是单进程单线程的Python程序&#xff1b; 建立event_loop 概念&#xff0c;上面event_loop 可以理解为大脑&#xff0c;下面是若干个可执行的Task&#xff1b; Task 没有控制权&#xff0c;没有办法控制event_loop 执行某个Task&#xff0c;只…...

【前端分享】JavaScript异步编程详解!

JavaScript 的异步编程是其核心特性之一&#xff0c;主要用于处理非阻塞操作&#xff08;如网络请求、文件读写、定时任务等&#xff09;。由于 JavaScript 是单线程的&#xff0c;异步机制可以避免代码阻塞&#xff0c;提高性能和用户体验。以下是 JavaScript 异步编程的核心概…...

深度学习基础--CNN经典网络之InceptionV1研究与复现(pytorch)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 InceptionV1是提出并行卷积结构&#xff0c;是CNN的经典网络之一&#xff1b;本次任务是探究InceptionV1结构并进行复现实验&#xff1b;欢迎收藏 关注…...

用 Vue 3 + D3.js 实现动态数据流图

文章目录 一、项目背景与功能概览二、项目准备与依赖安装2.1 安装 Vue 3 项目2.2 安装 D3.js2.3 项目结构 三、实现动态数据流图3.1 创建 DataFlowChart 组件3.2 动态更新数据流3.2.1 动态更新边和节点位置3.2.2 动画效果 四、节点拖拽与编辑功能实现4.1 添加节点拖拽功能4.2 编…...

46、Spring Boot 详细讲义(三)

五、Spring Boot 与 Web 开发 1. 简介 Spring Boot 是基于 Spring Framework 开发的一个框架,旨在简化配置,快速构建应用。它内嵌 Tomcat 等 servlet 容器,支持 RESTful API 开发,处理静态资源,以及集成视图层技术如 Thymeleaf 和 Freemarker。 2. Spring MVC 集成 Sp…...

热门面试题第15天|最大二叉树 合并二叉树 验证二叉搜索树 二叉搜索树中的搜索

654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…...

为了避免unboundLocalError和为什么X的值一直不变呢?

## 1.为了避免unboundLocalError 发生unboundLocalError&#xff01; def generate_integer(level):if level 1:X randint(1,9)return X这里出错的原因在于&#xff0c;一旦if 后面的条件没有成立&#xff0c;然后X根本没出生&#xff0c;然后你去使用它&#xff0c;这是有…...

Express中间件(Middleware)详解:从零开始掌握(1)

1. 中间件是什么&#xff1f; 想象中间件就像一个"加工流水线"&#xff0c;请求(Request)从进入服务器到返回响应(Response)的过程中&#xff0c;会经过一个个"工作站"进行处理。 简单定义&#xff1a;中间件是能够访问请求对象(req)、响应对象(res)和下…...

Linux升级gcc版本

目录 1.安装 scl 工具集 2.安装新版本gcc 3.启用新版本 gcc 4.将启动新版本gcc指令写入配置文件 本文主要讲述如何去升级 linux 操作系统下的 gcc 编译器版本。 1.安装 scl 工具集 sudo yum install centos-release-scl scl-utils-build 由于作者已经安装过&#xff0c;…...