Flink系列之:JDBC SQL 连接器
一、JDBC SQL 连接器
二、依赖
三、创建 JDBC 表
四、连接器参数
五、键处理
六、分区扫描
七、Lookup Cache
八、幂等写入
九、JDBC Catalog
十、JDBC Catalog 的使用
十一、JDBC Catalog for PostgreSQL
十二、JDBC Catalog for MySQL
十三、数据类型映射
一、JDBC SQL 连接器
Scan Source: Bounded
Lookup Source: Sync Mode
Sink: Batch
Sink: Streaming Append & Upsert Mode
JDBC 连接器允许使用 JDBC 驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立 JDBC 连接器来执行 SQL 查询。
如果在 DDL 中定义了主键,JDBC sink 将以 upsert 模式与外部系统交换 UPDATE/DELETE 消息;否则,它将以 append 模式与外部系统交换消息且不支持消费 UPDATE/DELETE 消息。
二、依赖
在连接到具体数据库时,也需要对应的驱动依赖,目前支持的驱动如下:
Driver
Group Id
Artifact Id
JAR
MySQL
mysql
mysql-connector-java
下载
Oracle
com.oracle.database.jdbc
ojdbc8
下载
PostgreSQL
org.postgresql
postgresql
下载
Derby
org.apache.derby
derby
下载
SQL Server
com.microsoft.sqlserver
mssql-jdbc
下载
三、创建 JDBC 表
JDBC table 可以按如下定义:
CREATE TABLE MyUserTable (
id BIGINT ,
name STRING,
age INT ,
status BOOLEAN ,
PRIMARY KEY ( id) NOT ENFORCED
) WITH (
'connector' = 'jdbc' ,
'url' = 'jdbc:mysql://localhost:3306/mydatabase' ,
'table-name' = 'users'
) ;
INSERT INTO MyUserTable
SELECT id, name, age, status FROM T;
SELECT id, name, age, status FROM MyUserTable;
SELECT * FROM myTopic
LEFT JOIN MyUserTable FOR SYSTEM_TIME AS OF myTopic. proctime
ON myTopic. key = MyUserTable. id;
这段代码是在Flink SQL中注册一个MySQL表"users",表结构包括id、name、age、status等字段,并设置id作为主键。
接下来通过INSERT INTO语句,从名为"T"的表中将数据写入到JDBC表"MyUserTable"中。INSERT INTO语句用于将"T"表中的id、name、age、status字段的值插入到"MyUserTable"表中。
然后使用SELECT语句查看JDBC表中的数据,返回id、name、age、status字段的值。
最后一段语句是将JDBC表"MyUserTable"作为维表,与实时流数据源"myTopic"进行时态表关联。通过FOR SYSTEM_TIME AS OF子句指定以"myTopic.proctime"字段的时间为基准,将"myTopic"的key字段与"MyUserTable"的id字段进行关联查询,返回所有字段的值。
通过这段代码,可以实现将数据从一个表写入到MySQL表中,并在流处理中进行关联查询,从而实现时态表的操作。
四、连接器参数
参数
是否必填
默认值
类型
描述
connector
必填
(none)
String
指定使用什么类型的连接器,这里应该是’jdbc’。
url
必填
(none)
String
JDBC 数据库 url。
table-name
必填
(none)
String
连接到 JDBC 表的名称。
driver
可选
(none)
String
用于连接到此 URL 的 JDBC 驱动类名,如果不设置,将自动从 URL 中推导。
username
可选
(none)
String
JDBC 用户名。如果指定了 ‘username’ 和 ‘password’ 中的任一参数,则两者必须都被指定。
password
可选
(none)
String
JDBC 密码。
connection.max-retry-timeout
可选
60s
Duration
最大重试超时时间,以秒为单位且不应该小于 1 秒。
scan.partition.column
可选
(none)
String
用于将输入进行分区的列名。
scan.partition.num
可选
(none)
Integer
分区数。
scan.partition.lower-bound
可选
(none)
Integer
第一个分区的最小值。
scan.partition.upper-bound
可选
(none)
Integer
最后一个分区的最大值。
scan.fetch-size
可选
0
Integer
每次循环读取时应该从数据库中获取的行数。如果指定的值为 ‘0’,则该配置项会被忽略。
scan.auto-commit
可选
true
Boolean
在 JDBC 驱动程序上设置 auto-commit 标志, 它决定了每个语句是否在事务中自动提交。有些 JDBC 驱动程序,特别是 Postgres,可能需要将此设置为 false 以便流化结果。
lookup.cache
可选
(none)
枚举类型,可选值: NONE, PARTIAL
维表的缓存策略。 目前支持 NONE(不缓存)和 PARTIAL(只在外部数据库中查找数据时缓存)。
lookup.cache.max-rows
可选
(none)
Integer
维表缓存的最大行数,若超过该值,则最老的行记录将会过期。 使用该配置时 “lookup.cache” 必须设置为 "PARTIAL”。
lookup.partial-cache.expire-after-write
可选
(none)
Duration
在记录写入缓存后该记录的最大保留时间。 使用该配置时 “lookup.cache” 必须设置为 "PARTIAL”。
lookup.partial-cache.expire-after-access
可选
(none)
Duration
在缓存中的记录被访问后该记录的最大保留时间。 使用该配置时 “lookup.cache” 必须设置为 "PARTIAL”。
lookup.partial-cache.cache-missing-key
可选
(none)
Boolean
是否缓存维表中不存在的键,默认为true。 使用该配置时 “lookup.cache” 必须设置为 "PARTIAL”。
lookup.max-retries
可选
3
Integer
查询数据库失败的最大重试次数。
sink.buffer-flush.max-rows
可选
100
Integer
flush 前缓存记录的最大值,可以设置为 ‘0’ 来禁用它。
sink.buffer-flush.interval
可选
1s
Duration
flush 间隔时间,超过该时间后异步线程将 flush 数据。可以设置为 ‘0’ 来禁用它。注意, 为了完全异步地处理缓存的 flush 事件,可以将 ‘sink.buffer-flush.max-rows’ 设置为 ‘0’ 并配置适当的 flush 时间间隔。
sink.max-retries
可选
3
Integer
写入记录到数据库失败后的最大重试次数。
sink.parallelism
可选
(none)
Integer
用于定义 JDBC sink 算子的并行度。默认情况下,并行度是由框架决定:使用与上游链式算子相同的并行度。
五、键处理
当写入数据到外部数据库时,Flink 会使用 DDL 中定义的主键。如果定义了主键,则连接器将以 upsert 模式工作,否则连接器将以 append 模式工作。
在 upsert 模式下,Flink 将根据主键判断插入新行或者更新已存在的行,这种方式可以确保幂等性。为了确保输出结果是符合预期的,推荐为表定义主键并且确保主键是底层数据库中表的唯一键或主键。在 append 模式下,Flink 会把所有记录解释为 INSERT 消息,如果违反了底层数据库中主键或者唯一约束,INSERT 插入可能会失败。
六、分区扫描
为了在并行 Source task 实例中加速读取数据,Flink 为 JDBC table 提供了分区扫描的特性。
如果下述分区扫描参数中的任一项被指定,则下述所有的分区扫描参数必须都被指定。这些参数描述了在多个 task 并行读取数据时如何对表进行分区。 scan.partition.column 必须是相关表中的数字、日期或时间戳列。注意,scan.partition.lower-bound 和 scan.partition.upper-bound 用于决定分区的起始位置和过滤表中的数据。如果是批处理作业,也可以在提交 flink 作业之前获取最大值和最小值。
scan.partition.column:输入用于进行分区的列名。
scan.partition.num:分区数。
scan.partition.lower-bound:第一个分区的最小值。
scan.partition.upper-bound:最后一个分区的最大值。
七、Lookup Cache
JDBC 连接器可以用在时态表关联中作为一个可 lookup 的 source (又称为维表),当前只支持同步的查找模式。
默认情况下,lookup cache 是未启用的,你可以将 lookup.cache 设置为 PARTIAL 参数来启用。
lookup cache 的主要目的是用于提高时态表关联 JDBC 连接器的性能。默认情况下,lookup cache 不开启,所以所有请求都会发送到外部数据库。 当 lookup cache 被启用时,每个进程(即 TaskManager)将维护一个缓存。Flink 将优先查找缓存,只有当缓存未查找到时才向外部数据库发送请求,并使用返回的数据更新缓存。 当缓存命中最大缓存行 lookup.partial-cache.max-rows 或当行超过 lookup.partial-cache.expire-after-write 或 lookup.partial-cache.expire-after-access 指定的最大存活时间时,缓存中的行将被设置为已过期。 缓存中的记录可能不是最新的,用户可以将缓存记录超时设置为一个更小的值以获得更好的刷新数据,但这可能会增加发送到数据库的请求数。所以要做好吞吐量和正确性之间的平衡。
默认情况下,flink 会缓存主键的空查询结果,你可以通过将 lookup.partial-cache.cache-missing-key 设置为 false 来切换行为。
八、幂等写入
如果在 DDL 中定义了主键,JDBC sink 将使用 upsert 语义而不是普通的 INSERT 语句。upsert 语义指的是如果底层数据库中存在违反唯一性约束,则原子地添加新行或更新现有行,这种方式确保了幂等性。
如果出现故障,Flink 作业会从上次成功的 checkpoint 恢复并重新处理,这可能导致在恢复过程中重复处理消息。强烈推荐使用 upsert 模式,因为如果需要重复处理记录,它有助于避免违反数据库主键约束和产生重复数据。
除了故障恢复场景外,数据源(kafka topic)也可能随着时间的推移自然地包含多个具有相同主键的记录,这使得 upsert 模式是用户期待的。
由于 upsert 没有标准的语法,因此下表描述了不同数据库的 DML 语法:
数据库
更新语法
MySQL
INSERT … ON DUPLICATE KEY UPDATE …
Oracle
MERGE INTO … USING (…) ON (…) WHEN MATCHED THEN UPDATE SET (…) WHEN NOT MATCHED THEN INSERT (…) VALUES (…)
PostgreSQL
INSERT … ON CONFLICT … DO UPDATE SET …
MS SQL Server
MERGE INTO … USING (…) ON (…) WHEN MATCHED THEN UPDATE SET (…) WHEN NOT MATCHED THEN INSERT (…) VALUES (…)
九、JDBC Catalog
JdbcCatalog 允许用户通过 JDBC 协议将 Flink 连接到关系数据库。
目前,JDBC Catalog 有两个实现,即 Postgres Catalog 和 MySQL Catalog。目前支持如下 catalog 方法。其他方法目前尚不支持。
databaseExists( String databaseName) ;
listDatabases( ) ;
getDatabase( String databaseName) ;
listTables( String databaseName) ;
getTable( ObjectPath tablePath) ;
tableExists( ObjectPath tablePath) ;
其他的 Catalog 方法现在尚不支持。
十、JDBC Catalog 的使用
本小节主要描述如果创建并使用 Postgres Catalog 或 MySQL Catalog。 请参阅 Dependencies 部分了解如何配置 JDBC 连接器和相应的驱动。
JDBC catalog 支持以下参数:
name:必填,catalog 的名称。
default-database:必填,默认要连接的数据库。
username:必填,Postgres/MySQL 账户的用户名。
password:必填,账户的密码。
base-url:必填,(不应该包含数据库名)
对于 Postgres Catalog base-url 应为 “jdbc:postgresql://:” 的格式。
对于 MySQL Catalog base-url 应为 “jdbc:mysql://:” 的格式。
SQL:
CREATE CATALOG my_catalog WITH (
'type' = 'jdbc' ,
'default-database' = '...' ,
'username' = '...' ,
'password' = '...' ,
'base-url' = '...'
) ;
USE CATALOG my_catalog;
Java:
EnvironmentSettings settings = EnvironmentSettings . inStreamingMode ( ) ;
TableEnvironment tableEnv = TableEnvironment . create ( settings) ;
String name = "my_catalog" ;
String defaultDatabase = "mydb" ;
String username = "..." ;
String password = "..." ;
String baseUrl = "..."
JdbcCatalog catalog = new JdbcCatalog ( name, defaultDatabase, username, password, baseUrl) ;
tableEnv. registerCatalog ( "my_catalog" , catalog) ;
tableEnv. useCatalog ( "my_catalog" ) ;
Scala:
val settings = EnvironmentSettings. inStreamingMode( )
val tableEnv = TableEnvironment. create( settings)
val name = "my_catalog"
val defaultDatabase = "mydb"
val username = "..."
val password = "..."
val baseUrl = "..."
val catalog = new JdbcCatalog( name, defaultDatabase, username, password, baseUrl)
tableEnv. registerCatalog( "my_catalog" , catalog)
tableEnv. useCatalog( "my_catalog" )
Python:
from pyflink. table. catalog import JdbcCatalog
environment_settings = EnvironmentSettings. in_streaming_mode( )
t_env = TableEnvironment. create( environment_settings)
name = "my_catalog"
default_database = "mydb"
username = "..."
password = "..."
base_url = "..."
catalog = JdbcCatalog( name, default_database, username, password, base_url)
t_env. register_catalog( "my_catalog" , catalog)
t_env. use_catalog( "my_catalog" )
YAML
execution :
...
current-catalog : my_catalog
current-database : mydb
catalogs :
- name : my_catalog
type : jdbc
default-database : mydb
username : ...
password : ...
base-url : ...
十一、JDBC Catalog for PostgreSQL
PostgreSQL 元空间映射
除了数据库之外,postgreSQL 还有一个额外的命名空间 schema。一个 Postgres 实例可以拥有多个数据库,每个数据库可以拥有多个 schema,其中一个 schema 默认名为 “public”,每个 schema 可以包含多张表。 在 Flink 中,当查询由 Postgres catalog 注册的表时,用户可以使用 schema_name.table_name 或只有 table_name,其中 schema_name 是可选的,默认值为 “public”。
因此,Flink Catalog 和 Postgres 之间的元空间映射如下:
Flink 目录元空间结构
Postgres 元空间结构
catalog name (defined in Flink only)
N/A
database name
database name
table name
[schema_name.]table_name
Flink 中的 Postgres 表的完整路径应该是 “..
”。如果指定了 schema,请注意需要转义 。
这里提供了一些访问 Postgres 表的例子:
SELECT * FROM mypg. mydb. test_table;
SELECT * FROM mydb. test_table;
SELECT * FROM test_table;
SELECT * FROM mypg. mydb. ` custom_schema.test_table2`
SELECT * FROM mydb. ` custom_schema.test_table2` ;
SELECT * FROM ` custom_schema.test_table2` ;
十二、JDBC Catalog for MySQL
MySQL 元空间映射
MySQL 实例中的数据库与 MySQL Catalog 注册的 catalog 下的数据库处于同一个映射层级。一个 MySQL 实例可以拥有多个数据库,每个数据库可以包含多张表。 在 Flink 中,当查询由 MySQL catalog 注册的表时,用户可以使用 database.table_name 或只使用 table_name,其中 database 是可选的,默认值为创建 MySQL Catalog 时指定的默认数据库。
因此,Flink Catalog 和 MySQL catalog 之间的元空间映射如下:
Flink 目录元空间结构
Mysql 元空间结构
catalog name (defined in Flink only)
N/A
database name
database name
table name
table_name
Flink 中的 MySQL 表的完整路径应该是 “
.
.”。
这里提供了一些访问 MySQL 表的例子:
SELECT * FROM mysql_catalog. mydb. test_table;
SELECT * FROM mydb. test_table;
SELECT * FROM test_table;
SELECT * FROM mysql_catalog. given_database. test_table2;
SELECT * FROM given_database. test_table2;
十三、数据类型映射
Flink 支持连接到多个使用方言(dialect)的数据库,如 MySQL、Oracle、PostgreSQL、Derby 等。其中,Derby 通常是用于测试目的。下表列出了从关系数据库数据类型到 Flink SQL 数据类型的类型映射,映射表可以使得在 Flink 中定义 JDBC 表更加简单。
MySQL type
Oracle type
PostgreSQL type
SQL Server type
Flink SQL type
TINYINT
TINYINT
TINYINT
SMALLINT, TINYINT UNSIGNED
SMALLINT, INT2, SMALLSERIAL, SERIAL2
SMALLINT
SMALLINT
INT, MEDIUMINT, SMALLINT UNSIGNED
INTEGER, SERIAL
INT
INT
BIGINT, INT UNSIGNED
BIGINT, BIGSERIAL
BIGINT
BIGINT
BIGINT UNSIGNED
DECIMAL(20, 0)
BIGINT
BIGINT
BIGINT
BIGINT
FLOAT
BINARY_FLOAT
REAL, FLOAT4
REAL
FLOAT
DOUBLE, DOUBLE PRECISION
BINARY_DOUBLE
FLOAT8, DOUBLE PRECISION
FLOAT
DOUBLE
NUMERIC(p, s), DECIMAL(p, s)
SMALLINT, FLOAT(s), DOUBLE PRECISION, REAL, NUMBER(p, s)
NUMERIC(p, s), DECIMAL(p, s)
DECIMAL(p, s)
DECIMAL(p, s)
BOOLEAN, TINYINT(1)
BOOLEAN
BIT
BOOLEAN
DATE
DATE
DATE
DATE
DATE
TIME [§]
DATE
TIME [§] [WITHOUT TIMEZONE]
TIME(0)
TIME [§] [WITHOUT TIMEZONE]
DATETIME [§]
TIMESTAMP [§] [WITHOUT TIMEZONE]
TIMESTAMP [§] [WITHOUT TIMEZONE]
DATETIME, DATETIME2
TIMESTAMP [§] [WITHOUT TIMEZONE]
CHAR(n), VARCHAR(n), TEXT
CHAR(n), VARCHAR(n), CLOB
CHAR(n), CHARACTER(n), VARCHAR(n), CHARACTER VARYING(n), TEXT
CHAR(n), NCHAR(n), VARCHAR(n), NVARCHAR(n), TEXT, NTEXT
STRING
BINARY, VARBINARY, BLOB
RAW(s), BLOB
BYTEA
BINARY(n), VARBINARY(n)
BYTES
ARRAY
ARRAY
你可能感兴趣的:(Flink,Flink系列,JDBC,SQL,连接器)
八种排序算法【C语言实现】
OTWOL
数据结构与算法 排序算法 c语言 算法
系列文章目录我的CSDN主页:OTWOL的主页,欢迎!!!我的C语言初阶合集:C语言初阶合集,希望能帮到你!!!我的C语言进阶合集:我的C语言进阶合集,期待你的点击!!!我的数据结构与算法合集:数据结构与算法合集,点进去看看吧!!!创作不易,欢迎大家留言、点赞加收藏!!!文章目录系列文章目录一、直接插入排序(1)定义(2)基本步骤(3)动图展示(4)代码示例二、希尔排序(1)定义(2)基本步骤(3
【Sharding-Jdbc总结】
壹佰大多
java java spring 数据库 spring cloud
文章目录shard-jdbc介绍核心功能分库分表:分布式事务:客户端框架:适用场景核心组件代码实现导包配置文件sql语句java代码shard-jdbc介绍Sharding-JDBC是ApacheShardingSphere的一个模块,它是一个轻量级的Java数据访问框架,通过增强JDBC驱动实现了分库分表、分布式事务、读写分离和数据加密等功能。它适用于任何基于JDBC的应用程序。核心功能分库分表
FTP上传下传、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(五)SFTP进阶篇【5/5】【完结篇】
飞火流星02027
Java java 开发语言 FTP SFTP上传下载 SFTP进度监控 FTP进度监控 SFTP断点续传 FTP断点续传
一、摘要(本系列汇总说明)-总纲FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(一)FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(二)FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(三)FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(四)FTP、SFTP上传下传、进度监控、断点续传、连接池封装
xmind添加父类主题_编程小记(2)XMind使用笔记
weixin_39789979
xmind添加父类主题
好久没有更新过这个公众号了,我承认主要原因是我太懒了,但是我还要给自己找找理由。上半年在家主要是写毕业论文,写完论文就是毕业旅行,之后开始准备CPA考试,虽然北京CPA被取消了(我好难啊)。更新间隔太久了,以至于我都忘了我这个系列是打算写啥了orz。开学之后第一周也好忙,写了很多材料。上周接到一项任务,写个XMind的使用指南,终于和这个系列有那么一点点关系了。个人使用感受是XMind在一些使用场
专业技术计算机应用能力考试ppt2007,全国专业技术人员计算机应用能力考试系列教材——PowerPoint 2003中文演示文稿...
Bloodysteve
全国专业技术人员计算机应用能力考试系列教材——PowerPoint2003中文演示文稿语音编辑锁定讨论上传视频全国专业技术人员计算机应用能力考试系列教材——PowerPoint2003中文演示文稿,由机械工业出版社出版,随书所带光盘《天宇考王》职称计算机考试专用软件。书名全国专业技术人员计算机应用能力考试系列教材——PowerPoint2003中文演示文稿别名PowerPoint2003中文演示文
TDengine 做为 FLINK 数据源技术参考手册
TDengine (老段)
tdengine flink 大数据 涛思数据 时序数据库 数据库
ApacheFlink是一款由Apache软件基金会支持的开源分布式流批一体化处理框架,可用于流处理、批处理、复杂事件处理、实时数据仓库构建及为机器学习提供实时数据支持等诸多大数据处理场景。与此同时,Flink拥有丰富的连接器与各类工具,可对接众多不同类型的数据源实现数据的读取与写入。在数据处理的过程中,Flink还提供了一系列可靠的容错机制,有力保障任务即便遭遇意外状况,依然能稳定、持续运行。借
软件架构原理与实战:深入理解BFF模式及其在微服务中的应用
AI天才研究院
AI实战 AI大模型企业级应用开发实战 大数据 人工智能 语言模型 AI LLM Java Python 架构设计 Agent RPA
1.背景介绍随着互联网的不断发展,软件架构也不断演进,微服务架构成为了当前最流行的软件架构之一。微服务架构将软件应用程序划分为一系列小的服务,每个服务都独立部署和扩展。这种架构的优点在于它的灵活性、可扩展性和容错性。在微服务架构中,服务之间通过网络进行通信,因此需要一种适合网络通信的架构模式。这就是BFF模式的诞生。BFF(BackingFrontend)模式是一种软件架构模式,它将前端应用程序与
MySQL数据库连接串
学不完了是吧
数据库 mysql
数据库连接串(通常称为连接字符串)包含了连接到数据库所需的所有信息,如数据库类型、服务器地址、端口、数据库名称、用户名和密码等。获取数据库连接串的方法取决于你使用的数据库类型和环境。以下是一些常见数据库的示例:MySQL如果你使用的是MySQL数据库,连接串通常如下:arduino复制代码jdbc:mysql://:/?user=&password=其中:复制代码*``是数据库服务器的地址。*``
构建 Java Web 应用程序:实现简单的增删查改(Mysql)
F2022697486
java 前端 mysql
简介本教程将指导您如何使用JavaServlet和JSP技术构建一个简单的Web应用程序。该应用程序将包括用户注册、登录、注销(删除用户信息)、修改密码以及根据性别查询用户信息等功能。我们将使用MySQL数据库来存储用户数据。环境准备JavaDevelopmentKit(JDK):安装JDK8或更高版本。IDE:推荐使用IntelliJIDEA或Eclipse。Servlet容器:如ApacheT
Oracle vs MySQL 窗口函数大对决:7个关键差异你了解几个?
墨瑾轩
数据库学习 oracle mysql 数据库
关注墨瑾轩,带你探索编程的奥秘!超萌技术攻略,轻松晋级编程高手技术宝库已备好,就等你来挖掘订阅墨瑾轩,智趣学习不孤单即刻启航,编程之旅更有趣嘿,小伙伴们!今天咱们要来一场精彩的对决——Oracle与MySQL的窗口函数较量。你知道吗?这两个数据库巨头在处理复杂查询时都引入了窗口函数这一强大的工具。那么问题来了,它们之间到底有哪些不同之处呢?别急,让我们一步步揭开谜底,保证你看完这篇文章就能轻松掌握
免费使用Adobe系列软件的Edu教育邮箱及冷门技巧分享
明 庭
adobe azure photoshop
在数字创意领域,Adobe系列软件因其强大的功能而备受推崇。持有Edu教育邮箱的用户可以免费获取这些软件,避免使用存在诸多问题的破解版,确保使用体验的稳定与安全。若您想了解如何申请Edu邮箱,建议查阅相关资料以获取详细信息。本文将分享五个冷门的Adobe系列软件小技巧,帮助您更高效地使用这些工具。1.Photoshop的智能对象在Photoshop中,将图层转换为智能对象,可以随时编辑其内容而不影
MyBatis概述——一个优秀的持久层框架
AI天才研究院
Python实战 自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
作者:禅与计算机程序设计艺术1.简介MyBatis是一款开源的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和参数处理,将XML配置化结果映射成Java对象并通过接口形式传入到业务层,使得开发人员更关注于业务逻辑而不是数据库相关的事务控制和重复代码等低级事务性工作。MyBatis的定位就是将Java对象和关系数据库的数据对接起来,做到自动化crud
Chromium132 编译指南 - Android 篇(一):编译前准备
守城小轩
浏览器开发 chrome devtools 浏览器开发 指纹浏览器 chrome
1.引言欢迎来到《Chromium132编译指南-Android篇》系列的第一部分。本系列指南将引导您逐步完成在Android平台上编译Chromium132版本的全过程。Chromium作为一款由Google主导开发的开源浏览器引擎,为众多现代浏览器提供了核心驱动力。而Android作为全球范围内应用最为广泛的移动操作系统,理解并掌握Chromium在该平台上的编译和优化技术,对于开发者而言至关
Oracle PL/SQL 编程入门:第十六章 记录类型 Records
caifox菜狐狸
Oracle PL/SQL 编程入门 oracle sql 数据库 PL/SQL Record Records 记录
欢迎来到OraclePL/SQL编程入门的第十六章!在这一章中,我们将深入探讨记录类型(Records)。通过学习基于表和游标的记录、用户自定义记录、记录的兼容性、嵌套记录以及集合记录的定义和使用方法,你将能够编写更加灵活和高效的数据库操作代码。此外,我们还会介绍一些注意事项,并通过实际例子展示它们的用法。准备好迎接新的挑战了吗?让我们开始吧!第一节:记录类型Record记录类型(Record)是
守护每一比特的安全——探索基于差分隐私的MySQL数据脱敏之道
墨夶
数据库学习资料2 安全 mysql 数据库
在当今数字化时代,随着互联网和大数据技术的发展,数据的价值愈发凸显。然而,随之而来的个人隐私泄露风险也日益增加,成为社会广泛关注的问题之一。特别是在医疗、金融等领域,如何既能充分利用海量数据资源推动行业发展,又能有效保护用户隐私不被侵犯,成为了亟待解决的重要课题。本文将深入探讨一种创新的数据安全共享方案——基于差分隐私(DifferentialPrivacy,DP)的MySQL数据库实现方法,旨在
MySQL数据库在Linux(centos7)中的安装
胖虎99
linux基础 数据库 mysql linux 运维 服务器
一、若系统里有了残余的mysql先删除要卸载系统中已经安装过的MySQL及其残余文件,您可以按照以下步骤进行操作:1.停止MySQL服务首先,确保MySQL服务已停止:sudosystemctlstopmysqld2.卸载MySQL软件包使用以下命令卸载MySQL相关的软件包。根据您安装的版本,可能需要调整命令中的包名。sudoyumremovemysqlmysql-servermysql-cli
LLM主要类别架构
大模型微调实战
人工智能 langchain 自然语言处理 神经网络 深度学习
LLM主要类别架构介绍LLM主要类别LLM本身基于transformer架构。自2017年,attentionisallyouneed诞生起,transformer模型为不同领域的模型提供了灵感和启发。基于原始的Transformer框架,衍生出了一系列模型,一些模型仅仅使用encoder或decoder,有些模型同时使encoder+decoder。LLM分类一般分为三种:自编码模型(encod
【Mysql】用户授权(GRANT)语法介绍和示例
m0_74823044
mysql 数据库
【Mysql】用户授权(GRANT)语法介绍和示例【一】Mysql用户授权(GRANT)语法【1】授予用户权限语法【2】GRANT语句中的的使用说明如下:(1)授予数据库权限时,可以指定为以下值:(2)授予表权限时,可以指定为以下值:(3)授予列权限时,的值只能指定为SELECT、INSERT和UPDATE,同时权限后面需要加上列名列表column-list。(4)最有效率的权限是用户权限。【3】
深入详解使用 RabbitMQ 过程中涉及到的多个细节问题(面试可用)
dvlinker
C/C++实战专栏 C/C++软件开发从入门到实战 rabbitmq 面试 分布式
目录1、基础类问题2、cluster相关问题3、综合性问题4、参考资料C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931
【项目实战】MySQL的默认存储引擎(InnoDB存储引擎)简介
本本本添哥
004 - 数据库 mysql 数据库
一、技术概览1.1定义InnoDB引擎,是MySQL数据库管理系统中最常用的存储引擎之一。【判断题】MySQL数据库默认使用不支持事务的innodb引擎(错)InnoDB引擎,支持事务处理(Transactions)、行级锁定(Row-LevelLocking)以及外键约束(ForeignKeys)InnoDB引擎,这些特性使得InnoDB非常适合于处理大量并发事务的应用程序。InnoDB引擎,设
【Linux】手把手教你在CentOS上使用docker 安装MySQL8.0
我是沐风晓月
# 1 - 容器管理 # 5 - 数据库入门到精通篇 云原生从入门到精通 docker centos linux
文章目录前言一.docker的安装1.1从阿里下载repo镜像1.2安装docker1.3启动docker并查看版本二.使用docker安装MySQL8.02.1拉取MySQL镜像2.2创建容器2.3操作MySQL容器2.4远程登录测试总结前言大家好,又见面了,我是沐风晓月,本文主要讲解如何用docker在centos7系统上安装MySQL8.0,以及如何设置MySQL的远程登录。文章收录到【容器
Django:ORM,mysql,django中多数据库操作
叫我DPT
mysql 数据库 python django
目录读写分离1.构造表结构2.对数据库数据的读取操作简单版基于router的改进版按app划分1.构造表结构2.对数据库数据的读取操作简单版基于router的改进版单app中的分库操作1.构造表结构2.对数据库数据的读写操作简单版基于router的改进版最后总结一下router读写分离读写分离是让数据库的读写操作被分配到不同的数据库服务器上,从而提高可用性。这种分库方式是,要各数据库的表结构要一致
【SpringMVC】——Json数据交互处理
Y小夜
ssm框架 json
个人主页:【Y小夜】作者简介:一位双非学校的大二学生,编程爱好者,专注于基础和实战分享,欢迎私信咨询!入门专栏:【MySQL,Java基础,Rust】热门专栏:【Python,Javaweb,Vue框架】感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️目录Json概述Json构成要素JSON与JavaScript的关系JSON的优点JSON的应用JSON工具的使用返回json字符串统一
【自学笔记】JavaWeb的重点知识点-持续更新
Long_poem
笔记 java web
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录JavaWeb知识点一、基础概念二、项目结构三、Tomcat服务器四、数据库连接(JDBC)五、前端技术六、高级技术总结以下是JavaWeb知识点的MD格式罗列:JavaWeb知识点一、基础概念静态Web与动态Web静态Web:页面内容固定不变,每次访问都返回相同的内容。动态Web:页面内容可以根据请求或用户输入而变化。网站访
【Python TensorFlow】入门到精通
极客代码
玩转Python python tensorflow 开发语言 人工智能 深度学习
TensorFlow是一个开源的机器学习框架,由Google开发,广泛应用于机器学习和深度学习领域。本篇将详细介绍TensorFlow的基础知识,并通过一系列示例来帮助读者从入门到精通TensorFlow的使用。1.TensorFlow简介1.1什么是TensorFlow?TensorFlow是一个开源的软件库,主要用于数值计算,特别是在机器学习和深度学习领域。它提供了一个灵活的架构来定义复杂的数
Python 爬虫实战:在马蜂窝抓取旅游攻略,打造个性化出行指南
西攻城狮北
python 爬虫 旅游 开发语言 实战案例
一、引言二、准备工作(一)安装必要的库(二)分析网页结构三、抓取攻略列表信息(一)发送请求获取网页内容(二)解析网页提取攻略信息(三)整合代码获取攻略列表四、抓取单个攻略详情信息(一)发送请求获取攻略详情页面内容(二)解析网页提取攻略详情信息(三)整合代码获取攻略详情五、数据存储(一)存储到CSV文件(二)存储到数据库(以SQLite为例)六、注意事项(一)遵守法律法规和平台规定(二)应对反爬虫机
Elementui 中el-form表单中的ref是干嘛用的
serve the people
日常琐问 elementui vue.js javascript
在ElementUI的el-form组件中,ref是用来获取对该表单组件的引用的属性。通过给el-form添加ref属性,你可以在Vue组件中通过引用来访问和操作这个表单组件,而不需要通过DOM查询或其他方式。使用ref属性可以在Vue组件的JavaScript部分直接访问el-form的实例,从而可以进行一系列操作,如表单验证、重置、获取表单数据等。以下是一个使用ref属性的示例:提交重置exp
MySQL-9.1.0 GTID模式
妍妍的宝贝
MySQL mysql 数据库 服务器
目录MySQL-9.1.0主从复制1实验准备工作1.1下载并安装官方MySQL的rpm包1.2设置DNS解析1.3修改密码2GTID模式实现主从复制2.1增加配置文件内容2.2创建主从复制账号MASTERSLAVE1SLAVE22.3实现GTID的自动定位SLAVE1&&SLAVE23导入数据查看是否成功3.1主服务器导入SQL脚本3.2两个从服务器查看是否复制同步MySQL-9.1.0主从复制本
java 监控车辆位置_基于Spring Boot的实时运行车辆位置模拟和监控系统
天蓝草
java 监控车辆位置
SpringCarLocationServiceThisisareal-timerunningvehiclelocationsimulationandmonitoringsystemusingJava,Spring,SpringBoot,SpringData,SpringCloud,NetflixOSS,Maven,JPA,Tomcat,RabbitMQ,MongoDB,MySQLandDocke
联想R720升级Win11教程 拯救者R720升级Win11方法
m0_70960708
笔记 电脑
拯救者r720是联想拯救者系列在2017年推出的笔记本型号,虽然已经过去5年了,但是配置却还可以畅玩很多游戏,不少联想R720的用户也想要升级到Win11系统,那么到底能不能升级呢?下面就一起来看看吧。r720怎么升级win11:1、很遗憾的是,r720使用的是第七代英特尔处理器,不满足微软对于win11的要求。2、因此用户如果想要升级win11的话,必须要跳过系统检测,在pe系统之中进行升级。3
jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
qiaolevip
每天进步一点点 学习永无止境 跨域 众观千象
XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1
mysql 分区查询优化
annan211
java 分区 优化 mysql
分区查询优化
引入分区可以给查询带来一定的优势,但同时也会引入一些bug.
分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。
所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。
可以通过查看explain执行计划,是否携带 partitions
MYSQL存储过程中使用游标
chicony
Mysql存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08-- BEGINdecla
mysql 和 sqlite 区别
Array_06
sqlite
转载:
http://www.cnblogs.com/ygm900/p/3460663.html
mysql 和 sqlite 区别
SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率
MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率
MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq
pinyin4j使用
oloz
pinyin4j
首先需要pinyin4j的jar包支持;jar包已上传至附件内
方法一:把汉字转换为拼音;例如:编程转换后则为biancheng
/**
* 将汉字转换为全拼
* @param src 你的需要转换的汉字
* @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal
微博发送私信
随意而生
微博
在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面
http://weibo.com/message/history?uid=****&name=****
可以发现其发送提交的Post请求和其中的数据,
让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。
jsp
香水浓
jsp
JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了
JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后
在 Windows 上安装 SVN Subversion 服务端
AdyZhang
SVN
在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号
最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx
现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使
android开发中如何使用 alertDialog从listView中删除数据?
aijuans
android
我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter ,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick 方法中 参数 arg2 是选中的序号,但是我不知道如何继续处理下去 1 2 3
jdk-6u26-linux-x64.bin 安装
baalwolf
linux
1.上传安装文件(jdk-6u26-linux-x64.bin)
2.修改权限
[root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin
3.执行安装文件
[root@localhost ~]# cd /usr/local
[root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs
MongoDB经典面试题集锦
BigBird2012
mongodb
1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?
NoSQL是非关系型数据库,NoSQL = Not Only SQL。
关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。
在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。
在考虑数据库的成熟
JavaScript异步编程Promise模式的6个特性
bijian1013
JavaScript Promise
Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。
在我们开始正式介绍之前,我们想看看Javascript Promise的样子:
var p = new Promise(function(r
[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager
bit1129
zookeeper
ClientWatchManager接口
//接口的唯一方法materialize用于确定那些Watcher需要被通知
//确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path
public interface ClientWatchManager {
/**
* Return a set of watchers that should
【Scala十五】Scala核心九:隐式转换之二
bit1129
scala
隐式转换存在的必要性,
在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下:
val button = new JButton
button.addActionListener(
new ActionListener {
def actionPerformed(event: ActionEvent) {
Android JSON数据的解析与封装小Demo
ronin47
转自:http://www.open-open.com/lib/view/open1420529336406.html
package com.example.jsondemo;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
impor
[设计]字体创意设计方法谈
brotherlamp
UI ui自学 ui视频 ui教程 ui资料
从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。
如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
bylijinnan
java 算法 面试题
import java.util.LinkedList;
/*
单调队列 滑动窗口
单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减
题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k.
要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1
问题的另一种描述就
struts2处理一个form多个submit
chiangfai
struts2
web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码:
<s:form action="submit" method="post" namespace="/my">
<s:textfield name="msg" label="叙述:">
shell查找上个月,陷阱及野路子
chenchao051
shell
date -d "-1 month" +%F
以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。
野路子解决:假设当天日期大于15号
mysql导出数据中文乱码问题
daizj
mysql 中文乱码 导数据
解决mysql导入导出数据乱码问题方法:
1、进入mysql,通过如下命令查看数据库编码方式:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------------------+
| Variable_name&nbs
SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write
dcj3sjt126com
PHP smarty sae
对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。
官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&catId=11#show_213
解决方案为:
01
$path
《教父》系列台词
dcj3sjt126com
Your love is also your weak point.
你的所爱同时也是你的弱点。
If anything in this life is certain, if history has taught us anything, it is
that you can kill anyone.
不顾家的人永远不可能成为一个真正的男人。 &
mongodb安装与使用
dyy_gusi
mongo
一.MongoDB安装和启动,widndows和linux基本相同
1.下载数据库,
linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz
2.解压文件,并且放置到合适的位置
tar -vxf mongodb-linux-x86_64-ubun
Git排除目录
geeksun
git
在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。
有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。
1. 针对单一工程排除文件
这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一
Ubuntu 创建开机自启动脚本的方法
hongtoushizi
ubuntu
转载自: http://rongjih.blog.163.com/blog/static/33574461201111504843245/
Ubuntu 创建开机自启动脚本的步骤如下:
1) 将你的启动脚本复制到 /etc/init.d目录下 以下假设你的脚本文件名为 test。
2) 设置脚本文件的权限 $ sudo chmod 755
第八章 流量复制/AB测试/协程
jinnianshilongnian
nginx lua coroutine
流量复制
在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发
电商系统商品表设计
lkl
DROP TABLE IF EXISTS `category`; -- 类目表
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `category` (
`id` int(11) NOT NUL
修改phpMyAdmin导入SQL文件的大小限制
pda158
sql mysql
用phpMyAdmin导入mysql数据库时,我的10M的
数据库不能导入,提示mysql数据库最大只能导入2M。
phpMyAdmin数据库导入出错: You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
Tomcat性能调优方案
Sobfist
apache jvm tomcat 应用服务器
一、操作系统调优
对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。
【适用场景】 任何项目。
二、Java虚拟机调优
应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。
J
SQLServer学习笔记
vipbooks
数据结构 xml
1、create database school 创建数据库school
2、drop database school 删除数据库school
3、use school 连接到school数据库,使其成为当前数据库
4、create table class(classID int primary key identity not null)
创建一个名为class的表,其有一