首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

20亿记录MySQL迁移实战

我们的一个客户遇到了一个 MySQL 问题,他们有一张大,这张有 20 多亿记录,而且还在不断增加。如果不更换基础设施,就有磁盘空间被耗尽的风险,最终可能会破坏整个应用程序。...而且,这么大的还存在其他问题:糟糕的查询性能、糟糕的模式设计,因为记录太多而找不到简单的方法来进行数据分析。...MySQL 服务器版本太老了,Debezium 不支持,升级 MySQL 升级也不是办法。...因此,我们用新 schema 创建了新,并使用来自 Kafka 的数据来填充新的分区。在迁移了所有记录之后,我们部署了新版本的应用程序,它向新进行插入,并删除了旧表,以便回收空间。...我开发了一个新的 Kafka 消费者,它将过滤掉不需要的记录,并将需要留下的记录插入到另一张。我们把它叫作整理,如下所示。

4.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL中如何随机获取一记录

    随机获取一记录是在数据库查询中常见的需求,特别在需要展示随机内容或者随机推荐的场景下。在 MySQL 中,有多种方法可以实现随机获取一记录,每种方法都有其适用的情况和性能特点。...方法一:使用 ORDER BY RAND() 这是最常见的随机获取一记录的方法之一: SELECT * FROM testdb.test_tb1 ORDER BY RAND() LIMIT 1; 虽然简单直接...方法二:利用 RAND() 函数和主键范围 这种方法利用主键范围来实现随机获取记录,避免了全扫描: SELECT * FROM testdb.test_tb1 WHERE id >= (SELECT..., 1'; EXECUTE STMT USING @row_num; DEALLOCATE PREPARE STMT; 不过如果比较多,建议表记录数从统计信息中获取 方法选择 对于小或需求不是十分严格的场景...合理选择适合情况的随机获取记录方法,可以有效提高数据库查询效率。 通过以上方法和推荐,可以更好地在 MySQL 数据库中实现随机获取一记录的功能,满足不同场景下的需求。

    44910

    mysqlmysql删除重复记录并且只保留一

    删除中多余重复试题并且只留1: a. 第一种方法: b. ☆第二种方法(与上面查询的第二种方法对应,只是将select改为delete): c....补充第三种方法(评论区推荐的一种方法): 二、多个字段的操作: 总结: ---- 最近在做题库系统,由于在题库中添加了重复的试题,所以需要查询出重复的试题,并且删除掉重复的试题只保留其中1,以保证考试的时候抽不到重复的题...mysql不支持这种更新查询同一张的操作 解决办法:把要更新的几列数据查询出来做为一个第三方,然后筛选更新。 3. 查询中多余重复试题(根据depno来判断,除了rowid最小的一个) a....删除中多余重复试题并且只留1: a....IN适合的情况是外表数据量小的情况,而不是外表数据大的情况,因为IN会遍历外表的全部数据,假设a100,b10000那么遍历次数就是100*10000次,而exists则是执行100次去判断a中的数据是否在

    5.4K30

    Mysql查询某记录在分页的第几页

    实践中我们会遇到这样的问题,知道某记录的id,然后需要判断此条记录如果按照id进行排序分页,此条记录在第几页。今天这篇文章为大家提供一个思路。...user为名,5位待匹配的id。...,即第2页的第1记录(从0开始) int index = count%pageSize; 多维度排序定位 上面通过简单的ID进行排序还是比较好解决的,那么如果现在查询某记录排序的维度不仅仅是ID,...基本的sql语句如下: select id, age from user order by age desc,id desc; 此时我们知道某id为5,age为18的记录,如何确定出此条记录在多条件排序中的位置呢...= 18 and id > 5; 上面获得了age相同情况下,并且id大于5的记录,将第一步和第二步的统计结果相加,问题是不是又回到了《根据ID查询分页位置》的简单模式了,还是同样的算法可以算出当前记录位于第几页了

    2.2K20

    MYSQL学习:GROUP BY分组取最新的一记录

    日常开发当中,经常会遇到查询分组数据中最新的一记录,比如统计当前系统每个人的最新登录记录、外卖系统统计所有买家最新的一次订单记录、图书管理系统借阅者最新借阅书籍的记录等等。...1、初始化数据 -- 借阅者 CREATE TABLE `userinfo` ( `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `uname...20); INSERT INTO `userinfo` VALUES (2, '小张', 30); INSERT INTO `userinfo` VALUES (3, '小李', 28); -- 书籍...INTO `bookinfo` VALUES (5, 'ISBN005', '物理'); INSERT INTO `bookinfo` VALUES (13, 'ISBN006', '读者'); -- 借阅记录...写法2 采用子查询的方式,获取借阅记录最近的浏览时间作为查询条件 select a.user_id ,c.uname,a.borrowtime ,b.book_name book_namefrom

    19.5K20

    mongo常见查询用法分享(关联查询+随机返回XX记录

    场景一: 针对一些股票的公司事件的数据,在主表和明细都有存储相关记录,现在有需求要删除明细某些满足条件的记录,同时如果针对同一个事件在明细只有一记录的话,要把对应的主表的记录也删掉。...as: "matched_records" } }, { $match: { matched_records: { $size: 0 } // 找出没有匹配到B记录...以上脚本可以查询tableA的field1字段在tableB中不存在的记录 场景二: 最近在写pytest的接口自动化用例的时候,有一个场景需要对比数据库和缓存的数据是否一致,因为考虑到数据是变化的...,因此不能写死某个id,也有考虑过按照更新时间排序取最新的XX,后来决定还是采用按照某个条件查询出数据后,随机取多少进行测试。...从查询的结果中随机返回几条数据 tb.aggregate([ {"$match": {"status": 1}}, {"$sample": {"size": 50}} ]) # 随机返回50status

    9610

    mysql中一insert语句批量插入多条记录

    INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋','广州',500,1000,'003.jpg'); 这种方式只能够一次插入一数据...幸好MySQL提供了另一种解决方案,就是使用一INSERT语句来插入多条记录。这并不是标准的SQL语法,因此只能在MySQL中使用。...一INSERT语句插入批量数据的写法: INSERT INTO [名]([列名],[列名]) VALUES ([列值],[列值])), ([列值],[列值])), ([列值],[列值...])); 可以看到,和原来的常规INSERT语句的区别,仅仅是在VALUES 后面增加值的排列,每条记录之间用英文输入法状态下的逗号隔开,是不是so easy。...建议: 在程序中,插入批量数据时,最好使用这种通过一INSERT语句来一次性插入的方式。这样可以避免程序和数据库建立多次连接,从而增加服务器负荷。

    5.1K20

    MYSQL中获取得最后一记录的语句

    方法1:select max(id) from tablename 方法2:select last_insert_id(); 在MySQL中,使用auto_increment类型的id字段作为的主键,...并用它作为其他的外键,形成“主从结构”,这是数据库设计中 常见的用法。...但是在具体生成id的时候,我们的操作顺序一般是:先在主表中插入记录,然后获得自动生成的id,以它为基础插入从记录。这里面有个困 难,就是插入主表记录后,如何获得它对应的id。...下面通过实验说明:   1、在连接1中向A插入一记录,A包含一个auto_increment类型的字段。   2、在连接2中向A再插入一记录。   ...注:使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意!

    4K30

    日志信息记录|全方位认识 mysql 系统库

    在上一期《复制信息记录|全方位认识 mysql 系统库》中,我们详细介绍了mysql系统库中的复制信息记录,本期我们将为大家带来系列第八篇《日志记录等混杂|全方位认识 mysql 系统库》,下面请跟随我们一起开始...日志信息记录 01 1.1....日志实现具有以下特征: 通常,日志的主要目的是为程序提供一个访问接口,以便查看Server内的SQL运行情况,所以,日志记录存放在中比存放在磁盘文件中会更加方便,因为存储在中可以远程访问这些日志记录...该中的信息在SQL开始执行时就会进行记录,而不是等待SQL执行结束才记录。 下面是该中存储的信息内容。...PS: CONNECTION字符串方式不会在mysql.servers中添加记录

    1.2K10

    MYSQL 的手动更新统计分析记录

    大致上大部分的数据库都有统计分析,主要的作用就是在语句执行的情况下,尽量的选择相对正确的方式来走执行计划,越准确的统计分析,可以带来更好的执行计划和数据库的语句执行性能,但相对来说越准确的统计分析,也会带来系统在统计时的性能消耗...从MYSQL 5.6 开始,统计分析的信息会固化在系统的存储中,通过下面的语句可以查看我们相隔的开关是否打开。...而我们可以进行一个测试,关于MYSQL的索引和真是的信息之间是否有差距。...其实我们已经操作了analyze table 但是我们依然没有得到准确的数字,在平时这可能不会有什么问题,但如果是较大的例如上千万的,如果这方面错的比较错,会对执行计划产生问题,这时候可能就需要我们通过手动的方式来更新某些记录...update mysql.innodb_table_stats set n_rows = 300024 where database_name = 'employees' and table_name

    3.9K30

    时区信息记录|全方位认识 mysql 系统库

    在上一期《优化器成本记录|全方位认识 mysql 系统库》中,我们详细介绍了mysql 系统库中的优化器成本记录,本期我们将为大家带来系列第六篇《时区信息记录|全方位认识 mysql 系统库》,下面请跟随我们一起开始...自带的mysql_tzinfo_to_sql程序来填充时区。...命令会读取您系统的时区文件并生成SQL语句来插入到MySQL的时区中。...02 时区信息记录详解 2.1. time_zone 该提供查询时区ID和跳秒之间的映射关系数据。 下面是该中存储的信息内容(需要手工导入时区数据信息到数据库才有数据)。...2.2. time_zone_leap_second 该提供查询跳秒机器修正值信息,该中的信息与time_zone_transition中的类似,但time_zone_transition中还记录了时区

    1.6K10

    复制信息记录|全方位认识 mysql 系统库

    在上一期《时区信息记录|全方位认识 mysql 系统库》中,我们详细介绍了mysql系统库中的时区信息记录,本期我们将为大家带来系列第七篇《复制信息记录|全方位认识 mysql 系统库》,下面请跟随我们一起开始...* 将本次执行检查点的位置记录mysql.slave_relay_log_info中,作为全局binlog应用的位置。...字段计算出自己哪些事务没有执行过,然后通过每个worker线程在mysql.slave_worker_info记录的其他checkpoint字段信息转换为对应的全局检查点的位置。...* 该中的记录在执行reset master语句时会被清空。 该中的记录周期性执行压缩示例。...# 假设中有如下实时记录的GTID记录 mysql> SELECT * FROM mysql.gtid_executed; + ------------------------------------

    95430

    记录一次MySQL拆分和迁移

    背景# 最近遇到一个关于MySQL过大的问题,该存放的主要是日志文件,且其中有一个字段存放的数据过大,导致占用空间过大以及查询效率的降低,这种设计其实是不合理的。...目前该占用1.2T容量,数据量超过3亿,而这个RDS数据库的容量总共就2T,且由于种种原因无法扩容,迫不得已急需给出解决方案。 2....,把json格式压缩成字节序列,压缩后可节省5倍空间左右 2 单数据量过大,而我们的业务是基本只取本年的数据,该中很多不使用的数据导致查询效率降低 对该按年份分,本年的数据为热数据,之前的数据为冷数据...具体做法: 每次查询1万数据 查询的时候只查询需要的字段,即id字段和需要压缩的字段,id字段为主键,采用主键索引 采用分页查询的方式,即每次查询完记录最后一数据的id,下一次查询直接在这个id的基础上查询...这种方式不仅命中了索引,还避免了全扫描 2.2.2 步骤二压缩# 上面查出了1万数据,接着要做的就是批量压缩,如果采用for循环1个1个的压缩,那么效率必然不是最高的,可以利用go语言并发的优势,把

    1.4K10
    领券