将 Spring Batch MyISAM 序列表迁移到 InnoDB

2023-12-24

Spring Batch 使用一些序列表,在 MySQL 中使用 MyISAM 存储引擎。我面临的问题是,我使用的是 Amazon Web Services RDS 数据库,并且它们的“时间点”数据库恢复功能不能很好地与包含 MyISAM 表的数据库配合使用。

我正在寻找一种解决方案,让我可以切换这些 Spring Batch MyISAM 序列表,并将其替换为 InnoDB 表,目的是启用 AWS RDS“时间点”数据库恢复功能。

Edit:

根据 @Michael 的回复,这是来自 Java 类的评论MySQLMaxValueIncrementer读取序列:

The sequence is kept in a table; there should be one sequence table per
table that needs an auto-generated key. The table type of the sequence table
should be MyISAM so the sequences are allocated without regard to any
transactions that might be in progress.

所以我的具体问题是“删除 MyISAM 序列表的最简单方法是什么”并保持 Spring Batch 正常运行?


我确认,仅将 MyISAM 序列表更改为 InnoDB 会导致在序列表上创建更新锁update...set...=last_insert_id()语句但在事务提交之前。使用 MyISAM 序列时不会创建这些锁。因此,“简单”的方法可能会对性能产生负面影响。

这就是我的想法。不确定这是最简单的方法,但它确实有效。

  1. Per this https://stackoverflow.com/a/12327525/1325237答案是,删除现有的序列表并用单列重新定义它们uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. 创建一个存储过程:a) 将序列名称作为参数,b) 插入到序列中,c) 返回 LAST_INSERT_ID()
  3. 编写一个扩展的java类MySQLMaxValueIncrementer并调用存储过程getNextKey()方法。我正在使用一个SimpleJdbcCall实例来执行此操作。
  4. 编写一个java类来实现DataFieldMaxValueIncrementerFactory并从步骤 #3 返回一个实例getIncrementer() method
  5. 在批量配置中,更新org.springframework.batch.core.repository.support.JobRepositoryFactoryBean配置以使用步骤 #4 中的增量器工厂
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Spring Batch MyISAM 序列表迁移到 InnoDB 的相关文章

  • 无法启动 MySQL 服务器 - 控制进程退出并出现错误代码

    我的 mysql 服务器停止后无法启动 命令使用 sudo etc init d mysql restart Error 重新启动 mysql 通过 systemctl mysql serviceJob for mysql service
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go
  • AWS SES模板html部分是多行

    我正在使用 AWS SES 按照文档发送电子邮件https docs aws amazon com ses latest DeveloperGuide send personalized email api html https docs
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 避免在 AWS Lambda 上使用 netcore2.0 和 Serilog 进行两次日志记录

    将我的 netcore 项目升级到 2 0 后 当我的应用程序在使用 Serilog 框架的 AWS Lambda 上运行时 我会看到双日志 请参阅下面我的设置 public void ConfigureServices IServiceC
  • AWS Fargate 任务错误 - ResourceInitializationError:无法下载环境文件:无法写入临时文件:AccessDenied

    我正在尝试使用容器定义下的环境文件配置 S3 ARN 从 Fargate ECS 任务访问存储在 S3 存储桶中的 env 文件 但 ECS 任务因停止原因而失败 资源初始化错误 无法下载 env 文件 文件下载命令 非空错误流 无法下载文
  • 为什么 CloudFront 根据 Accept-Encoding 改变 CORS 标头响应?

    我正在尝试让 CORS 与 Amazon S3 CloudFront 一起正常工作 设置我的 CORS 配置后 它似乎可以正常工作 curl H Origin https app close io I https d4389n07pf8cq
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • Mysql 创建定义器

    我创建了一个在 CentOS Web 服务器上运行的 Intranet Web 应用程序 该应用程序使用另一个本地服务器 始终是 CentOS 作为 MySQL 数据库 在数据库内部我创建了例程 这些例程总是这样开始 CREATE DEFI
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F

随机推荐