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

自己做的视频网站视频加载慢优化网站教程

自己做的视频网站视频加载慢,优化网站教程,王野天的照片,xss网站怎么搭建我们使用 Debezium 实时同步一个 MySQL 的数据到另一个 MySQL,代码网上基本都有,都是在引入 debezium-api,debezium-embedded 后写 Java 代码,做好了基本配置后启动程序,Debezium 会自动读取 MySQL 的实时 binlog&…

        我们使用 Debezium 实时同步一个 MySQL 的数据到另一个 MySQL,代码网上基本都有,都是在引入 debezium-api,debezium-embedded 后写 Java 代码,做好了基本配置后启动程序,Debezium 会自动读取 MySQL 的实时 binlog,然后触发相应的事件让我们处理,我们就把事件里的数据读取出来,插入到目标库即可。我们的 MySQL 的版本是 5.7 。

        但我们在其中发现了一个很奇怪的问题,目标库存在多个相同的 sql ,我们以为是 Debezium 重复消费了 binlog 里的事件,就记录下每个事件的 position 并判重,但 sql 还是重复了,我们一开始觉得 MySQL 写的 binlog 肯定没问题,一个事务对应一个事件。之后我们使用 binlog2sql 这个 python 工具读取了已归档的 binlog 文件,发现里面没有重复的 sql ,这说明 MySQL binlog 还是没有问题的,问题在 Debezium,但 Debezium 作为一个成熟的 cdc 工具应该也不会有什么大的问题,可能是 Debezium 的配置问题,但检查了 Debezium 的所有配置后还是没发现有什么问题,配置改了后重新运行结果还是一样。 后面我们怀疑可能和 gtid 有关,我们发现 “Insert into xxx values (xxx) ” 会产生一个 binlog 事件,因为一个事务会产生一个 binlog 事件,但 “Insert into xxx values (xxx),(xxx),(xxx)...” 会产生多个事件,但这些事件的 gtid 还是同一个,事件里的 query 属性还是同一个,事件的 query 属性即原始 sql ,这就破案了,我们一直消费每个事件的query,但可能多个事件里的 query 属性是一样的,因为它们的 gtid 属性相同,它们属于同一个全局事务。后面我们使用 gtid 过滤相同属性就解决了数据重复问题。至于为什么一个批量插入会产生一个多个事件,并且多个事件的 gtid 是同一个,我们猜测 MySQL  的 binlog 就是这样写日志的,修改一行数据就产生一个事件,要是批量修改就产生多个事件,但这些批量事件同属于一个全局事务。

        怎么过滤重复 gtid 问题?因为 gtid 是递增的,相同的 gtid 都会一起出现,所以可以使用自动老元素的 Map,或是设置键过期的 redis,或是 带有 gtid 属性的数据库表,并设置它是唯一索引,或是插入数据之前先检查数据库里是否有本事件的gtid,有就跳过,没有就插入,并把这个过程加锁保证原子性。

        核心代码:

// 启动
DebeziumEngine<ChangeEvent<String, String>> engine = DebeziumEngine.create(Json.class).using(config) .notifying(DataSync::handleChangeEvent).build();ExecutorService executor = Executors.newSingleThreadExecutor();executor.execute(engine);
private static void handleChangeEvent(ChangeEvent<String, String> event) {JSONObject valueJson = JSON.parseObject(event.value());if (valueJson != null) {JSONObject payload = valueJson.getJSONObject("payload");JSONObject source = payload.getJSONObject("after");// 原始sqlString query = source.getString("data_definition");// 对 sql 字符串进行美化query = query.replaceAll("[\\n\\r\\t\\s]+", " ");String database = source.getString("database");String table = source.getString("table_name");String gtid = source.getString("gtid");synchronized (lock) {// 查询数据库该 gtid 的数量long cnt = queryGtid(gtid);if (cnt == 0) {// 如果数据库不存在该 sql 就插入save(query, database, table, gtid);} else {System.out.println(gtid + " 有重复");}} }}

        
http://www.yidumall.com/news/43724.html

相关文章:

  • 网站服务器建设电商平台链接怎么弄
  • 网站建设维护费合同谷歌是如何运营的
  • 邵东做网站的公司seo课程总结怎么写
  • 新闻静态网站模板网页seo搜索引擎优化
  • 嘉兴网站建设咨询百度客服怎么联系
  • 上海发布公众号下载安装廊坊百度快照优化哪家服务好
  • xampp wordpress 花生壳厦门seo管理
  • 玉环哪里有做网站精准拓客软件哪个好
  • 网站建设实习小结关键词优化排名软件哪家好
  • wordpress 分享微信 插件厦门seo优
  • 南昌网站搭建公司 赣ICPseo入口
  • 做第三方的qq互联接口时_回调到自己的网站时要延时很久是什么原因seo优化是做什么的
  • 知名网站建设公司 北京国外产品推广平台
  • 凡科是免费做网站吗网店推广的重要性
  • 制作b2c网站估价广州seo优化电话
  • 怎么利用网站做cpa推广网站改版seo建议
  • 长沙优化网站排名智慧教育
  • 淘宝联盟怎么做网站推广草根seo博客
  • 苏州网站建设服务公司如何自己创建网站
  • 商务网站规划与建设课设的项目需求seo如何优化一个网站
  • 海尔网站推广策划方案刷粉网站推广便宜
  • offic做网站的软件chrome官网
  • 比较大网站建设公司阿里云域名查询
  • zblog做企业网站好吗怎么做一个网站平台
  • 用table做网站同城广告发布平台
  • 开发公司没有资质有什么影响萧山市seo关键词排名
  • 如何建立网站教程合肥网站优化技术
  • 支付功能网站建设引流推广的句子
  • wordpress缩写是什么意思优化落实疫情防控新十条
  • 做dw网站图片怎么下载游戏推广员