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

OceanBase数据库-学习笔记2-C#/C++程序如何访问

MySQL模式下,程序(C#)连接数据库操作demo

SqlSugar

public class MainModel
{private static readonly ConnectionConfig connectionConfig = new ConnectionConfig(){ConnectionString = "server=xxx.xxx.xxx.xxx;port=2881;user id=root;password=123456;database=test;",DbType = DbType.OceanBase, // 指定数据库类型,此外使用 MySql 或 MySqlConnector 都可以IsAutoCloseConnection = true // 是否自动关闭连接};public static SqlSugarClient GetSqlSugarClient(){using SqlSugarClient sugarClient = new(connectionConfig);sugarClient.Aop.OnLogExecuting = (s, p) =>{Console.WriteLine("=========================================================");Console.WriteLine($"Sql语句:{s}");};return sugarClient;}
}[SugarTable("studentinfo")]
public class StudentInfo
{public int id { get; set; }public string? name { get; set; }public int age { get; set; }
}using var sugarClient = MainModel.GetSqlSugarClient();
var vlist = sugarClient.Queryable<StudentInfo>().ToList();
foreach (var v in vlist)
{Console.WriteLine($"{v.id}, {v.name}, {v.age}");
}

输出结果如下

=========================================================
Sql语句:SELECT `id`,`name`,`age` FROM `studentinfo`
1, 小红, 25
2, 小明, 26
3, 小亮, 24
4, 小白, 18
5, 小苏, 20

MySQL模式下,程序(C++)连接数据库操作demo

官网提供了C语言如何链接OceanBase数据库的案例,需要使用MySQL Connector/C(MySQL C API),它提供了一组 C 语言的函数和数据结构,允许开发人员使用 C/C++ 语言来连接、查询和管理MySQL数据库。这个 API 允许开发人员直接在其 C/C++ 应用程序中使用MySQL数据库。

前提条件

在安装使用 MySQL Connector/C 之前请确保设置了基本的数据库开发环境,要求如下:

  • GCC 版本为 3.4.6 及以上,推荐使用 4.8.5 版本。
[root@localhost ~]# gcc --version
gcc (GCC) 8.3.1 20191121 (Anolis 8.3.1-5.0.1)
Copyright © 2018 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@localhost ~]# 
  • CMake 版本为 2.8.12 及以上。
[root@localhost ~]# cmake --version
cmake version 3.29.20240408-ga3d067bCMake suite maintained and supported by Kitware (kitware.com/cmake).
[root@localhost ~]#
  • 已安装 OceanBase 数据库并且创建了 MySQL 模式租户。
    112服务器已经安装,就使用sys租户下的root用户就可以。

步骤

1. 获取链接字符串

这里可以通过展示指定集群的详细信息获取,以下命令需要在安装OceanBase数据库的服务器上进行。

obd cluster list # 展示当前OBD内注册的所有集群状态

obd cluster display \<cluster_name\> # 展示集群的详细信息,包括链接字符串

[root@localhost ~]# obd cluster list
+--------------------------------------------------+
|                   Cluster List                   |
+------+-------------------------+-----------------+
| Name | Configuration Path      | Status (Cached) |
+------+-------------------------+-----------------+
| demo | /root/.obd/cluster/demo | running         |
+------+-------------------------+-----------------+
Trace ID: e1b471cc-f4ae-11ef-a01c-000c29b89f8c
If you want to view detailed obd logs, please run: obd display-trace e1b471cc-f4ae-11ef-a01c-000c29b89f8c
[root@localhost ~]#obd cluster display demo
Get local repositories and plugins ok
Open ssh connection ok
Cluster status check ok
Connect to observer 127.0.0.1:2881 ok
Wait for observer init ok
+---------------------------------------------+
|                 oceanbase-ce                |
+-----------+---------+------+-------+--------+
| ip        | version | port | zone  | status |
+-----------+---------+------+-------+--------+
| 127.0.0.1 | 4.2.1.9 | 2881 | zone1 | ACTIVE |
+-----------+---------+------+-------+--------+
obclient -h127.0.0.1 -P2881 -uroot -p'xxxxxxxxxxxxxxxxxxxx' -Doceanbase -Acluster unique id: 6a6b176c-37c0-5712-bad4-fb1018069115-1927fdff52b-09010204Connect to obproxy ok
+---------------------------------------------+
|                  obproxy-ce                 |
+-----------+------+-----------------+--------+
| ip        | port | prometheus_port | status |
+-----------+------+-----------------+--------+
| 127.0.0.1 | 2883 | 2884            | active |
+-----------+------+-----------------+--------+
obclient -h127.0.0.1 -P2883 -uroot -p'xxxxxxxxxxxxxxxxxxxx' -Doceanbase -A Connect to Obagent ok
+--------------------------------------------------------------+
|                           obagent                            |
+-----------+--------------------+--------------------+--------+
| ip        | mgragent_http_port | monagent_http_port | status |
+-----------+--------------------+--------------------+--------+
| 127.0.0.1 | 8089               | 8088               | active |
+-----------+--------------------+--------------------+--------+
[WARN] 127.0.0.1 prometheus is stopped
[WARN] 127.0.0.1 grafana is stopped
Trace ID: 30aeed3e-f4af-11ef-8a1a-000c29b89f8c
If you want to view detailed obd logs, please run: obd display-trace 30aeed3e-f4af-11ef-8a1a-000c29b89f8c
[root@localhost ~]# 
  • OceanBase CE (Community Edition),OceanBase 的核心数据库引擎,负责数据存储、计算和事务处理。
  • OBProxy CE (Community Edition),OceanBase 的代理服务,即连接接管理(将客户端请求路由到正确的节点)和性能优化(负载均衡)。
  • OBAgent,OceanBase 的监控代理,负责收集 OceanBase 集群的监控数据并上报给 Prometheus 或其他监控系统。

2. 安装 MySQL Connector/C 驱动

  • sudo apt-get install libmysqlclient-dev #在 Ubuntu 系统上安装
  • sudo yum install mysql-devel # 在 CentOS 系统上安装
  • mysql_config --version # 确认是否安装成功
[root@localhost ~]# mysql_config --version
10.5.5
[root@localhost ~]# 

3. 数据库表展示

[root@localhost OceanbaseTest]# !873
obclient -hxxx.xxx.xxx.xxx -P2881 -uroot -p'xxxxxxxxxxxxxxxxxxxx' -Doceanbase -A
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 3221558055
Server version: OceanBase_CE 4.2.1.9 (r109000032024092015-f2b0ead618247181e253e3912072c30ff965632d) (Built Sep 20 2024 20:29:42)Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.obclient(root@(none))[oceanbase]> use test
Database changed
obclient(root@(none))[test]> select * from studentinfo;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    1 | 小红   |   25 |
|    2 | 小明   |   26 |
|    3 | 小亮   |   24 |
|    4 | 小白   |   18 |
|    5 | 小苏   |   20 |
+------+--------+------+
5 rows in set (0.012 sec)obclient(root@(none))[test]>

4. 程序代码

应用程序通过 MySQL Connector/C 与数据库服务器 OBServer 节点交互的基本方式如下:

方法功能
mysql_library_init(0, NULL, NULL);调用 mysql_library_init() 初始化 MySQL 库。
MYSQL *mysql = mysql_init(NULL);调用 mysql_init() 初始化一个连接句柄。
mysql_real_connect (mysql, host_name, user_name, password, db_name, port_num, socket_name, CLIENT_MULTI_STATEMENTS)调用 mysql_real_connect() 连接到 OBServer 节点。
mysql_query(mysql,“sql_statement”);调用 mysql_real_query() 或 mysql_query() 向 OBServer 节点发送 SQL 语句。;
result=mysql_store_result(mysql);调用 mysql_store_result() 或 mysql_use_result() 处理其结果。
mysql_free_result(result);调用 mysql_free_result() 释放内存。
mysql_close(mysql);调用 mysql_close() 关闭与 OBServer 节点的连接。
mysql_library_end();调用 mysql_library_end() 结束 MariaDB client 的使用。
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>int main() {MYSQL *conn = mysql_init(NULL); // 初始化MySQL连接if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return 1;}// 连接到 MySQL 数据库服务器,host,user,passwd, db, port替换为对应数据库链接的信息if (mysql_real_connect(conn, "host", "user", "passwd", "db", port, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed\n");mysql_close(conn);return 1;}// 查询数据if (mysql_query(conn, "SELECT * FROM users") == 0) {MYSQL_RES *result = mysql_store_result(conn);if (result != NULL) {int num_fields = mysql_num_fields(result);MYSQL_ROW row;while ((row = mysql_fetch_row(result))) {for (int i = 0; i < num_fields; i++) {printf("%s ", row[i] ? row[i] : "NULL");}printf("\n");}mysql_free_result(result);} else {fprintf(stderr, "Error in retrieving result: %s\n", mysql_error(conn));}} else {fprintf(stderr, "Error in selecting data: %s\n", mysql_error(conn));}mysql_close(conn); // 关闭连接return 0;
}

编译执行如下:

[root@localhost OceanbaseTest]# gcc -o test test.cpp `mysql_config --cflags --libs`
[root@localhost OceanbaseTest]# ./test 
1 小红 25 
2 小明 26 
3 小亮 24 
4 小白 18 
5 小苏 20 
[root@localhost OceanbaseTest]#

5. 注意

上述的 mysql_config --cflags --libs 是编译传参,即指定mysql.h头文件和使用依赖的库目录

1. mysql_config

mysql_config 是一个 MySQL 提供的命令行工具,用于获取 MySQL 客户端库的编译和链接信息。它通常用于在编译和链接 MySQL 客户端应用程序时,提供必要的头文件路径、库文件路径以及链接选项。

[root@d1df39be86b3 /]# mysql_config
Usage: /usr/bin/mysql_config [OPTIONS]
Options:--cflags         [-I/usr/include/mysql]--include        [-I/usr/include/mysql]--libs           [-L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -ldl -lssl -lcrypto]--libs_r         [-L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -ldl -lssl -lcrypto]--plugindir      [/usr/lib64/mysql/plugin]--socket         [/var/lib/mysql/mysql.sock]--port           [0]--version        [5.5.68]--libmysqld-libs [-L/usr/lib64/mysql -lmysqld]--variable=VAR   VAR is one of:pkgincludedir [/usr/include/mysql]pkglibdir     [/usr/lib64/mysql]plugindir     [/usr/lib64/mysql/plugin]
[root@d1df39be86b3 /]#mysql_config --cflags
-I/usr/include/mysql
[root@d1df39be86b3 /]# mysql_config --include
-I/usr/include/mysql
[root@d1df39be86b3 /]# mysql_config --libs
-L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -ldl -lssl -lcrypto
[root@d1df39be86b3 /]#
2. 安装obclient客户端后,mysql_config的变化

如果安装了obclient客户端(OceanBase客户端),MySql驱动就会优先使用obclient链接方式,mysql_config 执行结果就会发生变化

[root@d1df39be86b3 home]# ls
libobclient-2.2.7-1.el7.x86_64.rpm  obclient-2.2.7-1.el7.x86_64.rpm  oceanbasetest
[root@d1df39be86b3 home]# rpm --version
RPM version 4.11.3
[root@d1df39be86b3 home]# rpm -ivh libobclient-2.2.7-1.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...1:libobclient-2.2.7-1.el7          ################################# [100%]
[root@d1df39be86b3 home]# rpm -ivh obclient-2.2.7-1.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...1:obclient-2.2.7-1.el7             ################################# [100%]
[root@d1df39be86b3 home]# mysql_config
Usage: /usr/bin/mysql_config [OPTIONS]
Options:--cflags         [-I/u01/obclient/include -I/u01/obclient/include/mysql]--include        [-I/u01/obclient/include -I/u01/obclient/include/mysql]--libs           [-L/u01/obclient/lib/ -lobclnt]--libs_r         [-L/u01/obclient/lib/ -lobclnt]--plugindir      [/u01/obclient/lib/plugin]--socket         [/tmp/mysql.sock]--port           [3306]--version        [10.5.5]--libmysqld-libs [-L/u01/obclient/lib  -lmysqld]--variable=VAR   VAR is one of:pkgincludedir [/u01/obclient/include/mysql]pkglibdir     [/u01/obclient/lib]plugindir     [/u01/obclient/lib/plugin]
[root@d1df39be86b3 home]#
3. CMake项目注意事项

在CMakeLists.txt中,会指定头文件目录,链接库目录

  1. 不安装obclient的情况
cmake_minimum_required (VERSION 3.1)PROJECT(oceanbasetest)set(CMAKE_CXX_COMPILER "c++")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS -Wall)include_directories(/usr/include/mysql/)link_directories("/usr/lib64/mysql/")ADD_EXECUTABLE(oceanbasetest test.cpp)target_link_libraries(oceanbasetest mysqlclient pthread z m dl ssl crypto)
  1. 安装oblient的情况
cmake_minimum_required (VERSION 3.8)PROJECT(oceanbasetest)set(CMAKE_CXX_COMPILER "c++")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS -Wall)include_directories(/u01/obclient/include/)link_directories("/u01/obclient/lib/")ADD_EXECUTABLE(oceanbasetest test.cpp)target_link_libraries(oceanbasetest obclnt)
4. 查询乱码的情况

在使用 mysql 驱动的情况下,查询有时会有乱码的情况

[root@d1df39be86b3 build]# ./oceanbasetest
1 ?? 25
2 ?? 26
3 ?? 24
4 ?? 18
5 ?? 20
[root@d1df39be86b3 build]#
解决方案
1. 使用mysql驱动调用obclient链接方式,可以解决乱码
[root@d1df39be86b3 build]# ./oceanbasetest
1 小红 25
2 小明 26
3 小亮 24
4 小白 18
5 小苏 20
[root@d1df39be86b3 build]#
2. 通过设置字符集解决
  • 查询数据库的字符集

SHOW VARIABLES LIKE ‘character_set%’;

obclient(root@(none))[test]> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+---------+
| Variable_name            | Value   |
+--------------------------+---------+
| character_set_client     | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database   | utf8mb4 |
| character_set_filesystem | binary  |
| character_set_results    | utf8mb4 |
| character_set_server     | utf8mb4 |
| character_set_system     | utf8mb4 |
+--------------------------+---------+
7 rows in set (0.004 sec)obclient(root@(none))[test]>

可以看到数据库的字符集为utf8mb4

  • 在代码中设置字符集
    • mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8mb4") 是使用 MySQL C API 设置客户端字符集的关键语句。它的作用是将客户端与数据库之间的通信字符集设置为 utf8mb4,从而确保数据在传输过程中能够正确处理中文字符。

    • 它可以在 mysql_real_connect 之前或之后调用,用于配置连接的行为。

    • 如果客户端和数据库的字符集不一致,那么中文字符在传输过程中会被错误地解析。mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8mb4") 的作用是显式地告诉 MySQL 客户端,使用 utf8mb4 字符集与数据库通信。这样,客户端发送的 SQL 语句和接收的查询结果都会以 utf8mb4 编码处理,从而避免乱码问题。
      在这里插入图片描述

设置后编译运行,就正常了

[root@d1df39be86b3 build]# ./oceanbasetest
1 小红 25
2 小明 26
3 小亮 24
4 小白 18
5 小苏 20
[root@d1df39be86b3 build]#
5. 对于安装顺序的说明

以上安装 mysql-develobclient 的顺序不同,头文件目录和链接库目录,都会放生变化,实际使用时,需要引用对应的头文件和库文件,才能正确的处理数据库的数据。


以上就是本次的分享,感谢阅读。

相关文章:

OceanBase数据库-学习笔记2-C#/C++程序如何访问

MySQL模式下&#xff0c;程序&#xff08;C#&#xff09;连接数据库操作demo SqlSugar public class MainModel {private static readonly ConnectionConfig connectionConfig new ConnectionConfig(){ConnectionString "serverxxx.xxx.xxx.xxx;port2881;user idroot;…...

Python中的Walrus运算符分析

Python中的Walrus运算符&#xff08;:&#xff09;是Python 3.8引入的一个新特性&#xff0c;允许在表达式中同时赋值和返回值。它的核心作用是减少重复计算&#xff0c;提升代码简洁性。以下是其适用的典型场景及示例&#xff1a; 1. 在循环中避免重复计算 当循环条件需要多次…...

【深度好文】4、Milvus 存储设计深度解析

引言 作为一款主流的云原生向量数据库&#xff0c;Milvus 通过其独特的存储架构设计来保证高效的查询性能。本文将深入剖析 Milvus 的核心存储机制&#xff0c;特别是其最小存储单元 Segment 的完整生命周期&#xff0c;包括数据写入、持久化、合并以及索引构建等关键环节。 …...

航顺 芯片 开发记录 (一) 2025年4月27日19:23:32

芯片型号: HK32F030MF4P6 第一步:创建工程目录 inc :头文件目录 MDK-ARM : 工程根目录 (新建工程选择该目录) src :相关资源存放位置 官方函数库相关内容 官方函数库大致结构图 ├─HK32F030MLib ├─CMSIS │ ├─CM0 │ │ └─Core │ │ arm_common_table…...

Java 设计模式

Java后端常用设计模式总览表 模式核心思想Spring / Spring Boot应用手写实现核心单例模式 (Singleton)一个类只有一个实例&#xff0c;提供全局访问点Spring容器中的默认Bean都是单例管理volatile synchronized 双重检查锁定&#xff0c;懒加载单例工厂模式 (Factory)统一管理…...

Milvus如何实现关键词过滤和向量检索的混合检索

Milvus 可以实现关键词过滤和向量检索的混合检索,具体来说,可以结合向量搜索与其他属性字段(如关键词、类别标签等)进行联合查询。这样,在检索时不仅考虑向量的相似度,还能根据特定的关键词或标签等条件对数据进行筛选,从而提高检索的精度和灵活性。 1. 理解混合检索的…...

基于Qt5的蓝牙打印开发实战:从扫描到小票打印的全流程

文章目录 前言一、应用案例演示二、开发环境搭建2.1 硬件准备2.2 软件配置 三、蓝牙通信原理剖析3.1 实现原理3.2 通信流程3.3 流程详解3.4 关键技术点 四、Qt蓝牙核心类深度解析4.1 QBluetoothDeviceDiscoveryAgent4.2 QBluetoothDeviceInfo4.3 QBluetoothSocket 五、功能实现…...

Linux日志处理命令多管道实战应用

全文目录 1 日志处理1.1 实时日志分析1.1.1 nginx日志配置1.1.2 nginx日志示例1.1.3 日志分析示例 1.2 多文件合并分析1.3 时间范围日志提取 2 问题追查2.1 进程级问题定位2.2 网络连接排查2.3 硬件故障追踪 3 数据统计3.1 磁盘空间预警3.2 进程资源消耗排名3.3 HTTP状态码统计…...

Node.js CSRF 保护指南:示例及启用方法

解释 CSRF 跨站请求伪造 (CSRF/XSRF) 是一种利用用户权限劫持会话的攻击。这种攻击策略允许攻击者通过诱骗用户以攻击者的名义提交恶意请求,从而绕过我们的安全措施。 CSRF 攻击之所以可能发生,是因为两个原因。首先,CSRF 攻击利用了用户无法辨别看似合法的 HTML 元素是否…...

线性代数—向量与矩阵的范数(Norm)

参考链接&#xff1a; 范数&#xff08;Norm&#xff09;——定义、原理、分类、作用与应用 - 知乎 带你秒懂向量与矩阵的范数(Norm)_矩阵norm-CSDN博客 什么是范数&#xff08;norm&#xff09;&#xff1f;以及L1,L2范数的简单介绍_l1 norm-CSDN博客 范数&#xff08;Norm…...

微服务基础-Ribbon

1. Ribbon简介&#xff1a; 客户端的负载均衡&#xff1a; 2....

移除生产环境所有console.log

大多数团队都会要求不能在生产环境输出业务侧的内容&#xff0c;但是往往业务开发人员会有疏漏&#xff0c;所以需要在工程化环境中&#xff0c;整体来管理console.log。我最近也是接到这样一个需求&#xff0c;整理了一下实现方案。 不同团队&#xff0c;不同场景&#xff0c;…...

数字人接大模型第二步:实时语音同步

接上例第一步,还是dh_live项目,增加了一个完整的实时对话样例,包含vad-asr-llm-tts-数字人全流程,以弥补之前的只有固定的问答的不足。 VAD(Voice Activity Detection,语音活动检测)VAD用于检测用户是否正在说话,从而触发后续的语音处理流程。 ASR(Automatic Speech R…...

Tomcat的安装与配置

Tomcat Tomcat是一个Java圈子中广泛使用的HTTP服务器. 后续学习Severlet内容,就是依赖Tomcat. Java程序员,要想写个网站出来,绕不开Tomcat. 我们这里使用Tomcat8 在bin目录下,这两个文件尤为重要,需要说明的是,Tomcat是那Java写的,所以在运行时需要jdk. bat后缀:是Window…...

Spring AI Alibaba - MCP连接 MySQL

先看效果 直接问他数据库有什么表。 大模型调用MySQL进行查询 搭建项目 添加依赖 创建项目后新添加Maven 依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> …...

Spring Cloud Stream喂饭级教程【搜集全网资料整理】

文章较长&#xff0c;建议收藏关注&#xff0c;随时查看 Spring Cloud Stream 简介 Spring Cloud Stream 是 Spring 提供的一个框架&#xff0c;用于构建与共享消息系统相连接的高度可伸缩的事件驱动微服务&#xff0c;它建立在 Spring 已有的成熟组件和最佳实践之上&#xff…...

prometheus手动添加k8s集群外的node-exporter监控

1、部署node-exporter 1&#xff09;helm方式部署 rootiZj6c72dzbei17o2cuksmeZ:~# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts "prometheus-community" has been added to your repositories rootiZj6c72dzbei17o2cu…...

Linux(Centos版本)中安装Docker

文章目录 Linux&#xff08;Centos版本&#xff09;中安装Docker整体流程 Linux&#xff08;Centos版本&#xff09;中安装Docker整体流程 进入root权限进行安装&#xff1a; 下面开始安装Docker: 1、安装docker的yum管理工具&#xff1a;记得将yum仓库更改为国内的镜像源&…...

C语言-- 深入理解指针(4)

C语言-- 深入理解指针&#xff08;4&#xff09; 一、回调函数二、冒泡排序三、qsort函数3.1 使用qsort函数排序整型数据3.2 使用qsort函数排序double数据3.3 使用qsort来排序结构体数据 四、模仿qsort库函数实现通用的冒泡排序4.1 通用冒泡排序函数排序整型数据4.2 通用冒泡排…...

牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记3-地图基本操作与实战案例

目录 一、开发环境与框架搭建 二、地图数据加载与文档管理 1. 加载地图文档&#xff08;MXD&#xff09; 2. 动态添加数据源 三、地图浏览与交互操作 1. 基础导航功能 2. 书签管理 3. 量测功能 四、要素选择与属性查询 1. 属性查询 2. 空间查询 五、视图同步与鹰眼…...

Spark Streaming实时数据处理实战:从DStream基础到自定义数据源集成

park-Streaming概述 Spark-Streaming是什么 Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多&#xff0c;例如&#xff1a;Kafka、Flume、Twitter等&#xff0c;以及和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如&#xff1a;…...

微软GraphRAG的安装和在RAG中的使用体会

文章目录 0. 简介&#xff08;1&#xff09;**技术原理**&#xff08;2&#xff09;**优势**&#xff08;3&#xff09;**开源与演进** 1. 下载graphrag.git2.安装 poetry3.初始化项目&#xff1a;建立cases目录4. 修改.env5.修改settings.yaml,将两处 api_base改成中转站地址:…...

Python学习记录7——集合set()的使用指南

文章目录 引言一、集合特性二、创建方式三、元素操作1、添加元素&#xff08;1&#xff09;add(element)&#xff08;2&#xff09;update(iterables) 2、删除元素&#xff08;1&#xff09;remove(element)&#xff08;2&#xff09;discard(element)&#xff08;3&#xff09…...

apkpure 谷歌插件 下载的apk包

谷歌插件市场搜索 apkpure 然后直接搜索下载就行了 想看apk包中的静态资源&#xff0c;直接改apk 为zip后缀解压就行了 apple的ipa包也是相同的道理...

Android四大核心组件

目录 一、为什么需要四大组件&#xff1f; 二、Activity&#xff1a;看得见的界面 核心功能 生命周期图解 代码示例 三、Service&#xff1a;看不见的劳动者 两大类型 生命周期对比 注意陷阱 四、BroadcastReceiver&#xff1a;消息传递专员 两种注册方式 广播类型 …...

WSL2里手动安装Docker 遇坑

在 WSL2 里手动安装 Docker Engine 时遇坑&#xff1a;systemctl 和 service 命令在默认的 WSL2 Ubuntu 中 无法使用&#xff0c;因为 WSL2 没有 systemd。怎么办&#xff1f; 自己操作让 Docker Engine&#xff08;dockerd&#xff09;直接跑起来&#xff0c;挂到 /var/run/do…...

【ROS2】ROS开发环境配置——vscode和git

古月21讲-ROS2/1.系统架构/1.5_ROS2开发环境配置/ ROS机器人开发肯定离不开代码编写&#xff0c;课程中会给大家提供大量示例源码&#xff0c;这些代码如何查看、编写、编译 安Linux中安装装git sudo apt install git下载教程源码 《ROS2入门21讲》课程源码的下载方式&#x…...

django.db.models.query_utils.DeferredAttribute object

在 Django 中&#xff0c;当你看到 django.db.models.query_utils.DeferredAttribute 对象时&#xff0c;通常是因为你在查询时使用了 only() 或 defer() 方法来延迟加载某些字段。这两个方法允许你控制数据库查询中的字段加载方式&#xff0c;从而优化查询性能。 only() 方法…...

Linux内核中的编译时安全防护:以网络协议栈控制块校验为例

引言:内存安全的无声守卫者 在操作系统内核开发中,内存溢出引发的错误往往具有极高的隐蔽性和破坏性。Linux内核作为承载全球数十亿设备的基石,其网络协议栈的设计尤其注重内存安全性。本文通过分析一段看似简单的内核代码,揭示Linux如何通过编译时静态检查(Compile-Time…...

第11章 安全网络架构和组件(一)

11.1 OSI 模型 协议可通过网络在计算机之间进行通信。 协议是一组规则和限制&#xff0c;用于定义数据如何通过网络介质&#xff08;如双绞线、无线传输等&#xff09;进行传输。 国际标准化组织(ISO)在20世纪70年代晚期开发了开放系统互连(OSI)参考模型。 11.1.1 OSI模型的…...

Git常用命令简明教程

本教程整合并优化了Git核心命令&#xff0c;涵盖初始化、配置、文件操作、分支管理、远程仓库操作及常见场景&#xff0c;适合快速入门和日常参考。命令按使用流程分组&#xff0c;简洁明了&#xff0c;包含注意事项和最佳实践。 1. 初始化与配置 初始化Git仓库并设置基本配置…...

在 Ubuntu 24.04 系统上安装和管理 Nginx

1、安装Nginx 在Ubuntu 24.04系统上安装Nginx&#xff0c;可以按照下面的步骤进行&#xff1a; 1.1、 更新系统软件包列表 在安装新软件之前&#xff0c;需要先更新系统的软件包列表&#xff0c;确保获取到最新的软件包信息。打开终端&#xff0c;执行以下命令&#xff1a; …...

数据结构——二叉树和堆(万字,最详细)

目录 1.树 1.1 树的概念与结构 1.2 树相关的术语 1.3 树的表示法 2.二叉树 2.1 概念与结构 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.3 二叉树存储结构 2.3.1 顺序结构 2.3.2 实现顺序结构二叉树 2.3.2.1 堆的概念与结构 2.3.2. 2 堆的插入与删除数据…...

IdeaVim 配置与使用指南

一、什么是 IdeaVim&#xff1f; IdeaVim 是 JetBrains 系列 IDE&#xff08;如 IntelliJ IDEA, WebStorm, PyCharm 等&#xff09;中的一个插件&#xff0c;让你在 IDE 里使用 Vim 的按键习惯&#xff0c;大大提升效率。 安装方法&#xff1a; 在 IDE 中打开 设置(Settings) →…...

前端浏览器窗口交互完全指南:从基础操作到高级控制

浏览器窗口交互是前端开发中构建复杂Web应用的核心能力&#xff0c;本文深入探讨23种关键交互技术&#xff0c;涵盖从传统API到最新的W3C提案&#xff0c;助您掌握跨窗口、跨标签页的完整控制方案。 一、基础窗口操作体系 1.1 窗口创建与控制 // 新窗口创建&#xff08;现代浏…...

考研系列-计算机组成原理第五章、中央处理器

一、CPU的功能及结构 1.运算器的基本结构 2.控制器结构...

python+flask+flask-sockerio,部署后sockerio通信异常

前言 用python开发了一个flask web服务&#xff0c;前端用html&#xff0c;前后端通过socketio通信&#xff0c;开发环境&#xff0c;windowsminicondavscode&#xff0c;开发完成后本地运行没有问题&#xff0c;然后就开始部署&#xff0c;噩梦就开始了。 问题描述 程序是部…...

深度解析:TextRenderManager——Cocos Creator艺术字体渲染核心类

一、类概述 TextRenderManager 是 Cocos Creator 中实现动态艺术字体渲染的核心单例类。它通过整合资源加载、缓存管理、异步队列和自动布局等功能&#xff0c;支持普通字符模式和图集模式两种渲染方案&#xff0c;适用于游戏中的动态文本&#xff08;如聊天内容、排行榜&…...

同样开源的自动化工作流工具n8n和Dify对比

n8n和Dify作为两大主流工具&#xff0c;分别专注于通用自动化和AI应用开发领域&#xff0c;选择哪个更“好用”需结合具体需求、团队能力及业务场景综合判断。以下是核心维度的对比分析&#xff1a; 一、核心定位与适用场景 维度n8nDify核心定位开源全场景自动化工具&#xff…...

设计模式每日硬核训练 Day 16:责任链模式(Chain of Responsibility Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 15&#xff1a;享元模式小结 在 Day 15 中&#xff0c;我们学习了享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a; 通过共享对象&#xff0c;分离内部状态与外部状态&#xff0c;大量减少内存开销。适用于字符渲染、游戏场景、图标缓…...

基于边缘人工智能的AI无人机-更高效更安全的飞行任务执行

基于边缘人工智能的AI无人机-更高效更安全的飞行任务执行 人工智能有可能改变人们的生活和工作方式。人工智能和无人机是近年来发展迅速的两项技术。当这两种技术结合在一起时&#xff0c;它们会创造出许多以前不可能的应用。基于人工智能的无人机旨在独立执行任务&#xff0c;…...

30、不是说字符串是不可变的吗,string s=“abc“;s=“123“不就是变了吗?

一、核心概念澄清&#xff1a;不可变性的真实含义 1、不可变性的定义 字符串不可变性指对象内容不可修改&#xff0c;而非变量不可修改。 类比&#xff1a; 不可变字符串 装在密封信封里的信纸&#xff08;内容不可更改&#xff09;变量赋值 更换信封的指向&#xff08;从…...

线上查询车辆出险记录:快速掌握事故情况!

在如今汽车成为人们日常不可或缺的交通工具之际&#xff0c;车辆出险记录成为了许多车主关注的焦点之一。为了帮助车主们快速了解车辆出险、理赔、事故记录&#xff0c;现在有了一种便捷的方式&#xff0c;那就是通过API接口在线查询。本文将介绍如何利用API接口&#xff0c;通…...

Python爬虫课程实验指导书

1.1Requests类库的认知 1.1.1 认识请求类库 Requests是用Python语言编写&#xff0c;基于&#xff0c;采用Apache2 Licensed开源协议的。它比urllib更加方便&#xff0c;可以节约我们大量的工作&#xff0c;完全满足HTTP测试需求。urllibHTTP库 Requests官网地址&#xff1a;ht…...

streamlit实现非原生的按钮触发效果 + flask实现带信息的按钮触发

目录 简介不携带信息的触发隐藏指定st.button(label, key)触发button的html代码汇总 携带信息的触发为什么需要携带信息前端JavaScript修改flask处理总代码 简介 由于streamlit可以同时在实现前后端结合&#xff0c;非常方便&#xff0c;但是这也造成了user难以方便的对页面的…...

机器学习基础——Seaborn使用

1.使用tips数据集,创建一个展示不同时间段(午餐/晚餐)账单总额分布的箱线图 import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as snstips pd.read_csv(./tips.csv)sns.boxplot(data tips,x time,y total_bill, )plt.show() 2.使用…...

Godot开发2D冒险游戏——第三节:游戏地图绘制

一、初步构建游戏地图 在游戏场景当中添加一个新的子节点&#xff1a;TileMapLayer 这一层称为瓦片地图层 根据提示&#xff0c;下一步显然是添加资源 为TileMapLayer节点添加一个TileSet 将地板添加进来&#xff0c;然后选择自动分割图集 自定义时要确保大小合适 让Godot自…...

Spark Mllib 机器学习

概述 机器学习是什么 根据百度百科的定义&#xff1a; 机器学习是一种通过算法和模型使计算机从数据中自动学习并进行预测或决策的技术。 定义比较抽象&#xff0c;根据常见的机器学习可以总结出三个关键字&#xff1a; 算法、经验、性能。 机器学习的过程可以抽象成一个pipel…...

在windows使用docker打包springboot项目镜像并上传到阿里云

1、前提&#xff1a;已有spring项目 2、在项目根目录下创建Dockerfile文件 FROM openjdk:11 WORKDIR /ruoyi-admin COPY ruoyi-admin/build/libs/lifecolor-web.jar lifecolor-web.jar CMD ["java", "-jar", "lifecolor-web.jar"] 3、选…...

前端高频面试题day3

JavaScript作用域理解 核心概念 作用域&#xff1a;定义变量/函数的可见范围及生命周期&#xff0c;分为 全局作用域、函数作用域、块级作用域。作用域链&#xff1a;变量查找从当前作用域逐级向上直至全局&#xff0c;遵循词法作用域&#xff08;静态作用域&#xff09;。闭…...