著录项信息
专利名称 | 用户数据实时迁移方法、存储介质、电子设备及系统 |
申请号 | CN201710936631.8 | 申请日期 | 2017-10-10 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2019-04-19 | 公开/公告号 | CN109660576A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L29/08 | IPC分类号 | H;0;4;L;2;9;/;0;8;;;G;0;6;F;3;/;0;6查看分类表>
|
申请人 | 武汉斗鱼网络科技有限公司 | 申请人地址 | 湖北省武汉市东湖开发区软件园东路1号软件产业4.1期B1栋11楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 武汉斗鱼网络科技有限公司 | 当前权利人 | 武汉斗鱼网络科技有限公司 |
发明人 | 杨鹏;张文明;陈少杰 |
代理机构 | 武汉智权专利代理事务所(特殊普通合伙) | 代理人 | 张凯 |
摘要
本发明公开了一种用户数据实时迁移方法、存储介质、电子设备及系统,涉及数据迁移领域,该方法包括将旧Redis存储集群存储的用户数据按条拷贝至新Redis存储集群中,每条用户数据均包括用户ID和操作行为数据;同时,Redis管理服务实时记录当前在线用户的操作行为数据;按条判断Redis管理服务记录的操作行为数据所对应用户的用户数据在新Redis存储集群中是否已拷贝完成,若否,则将记录的操作行为数据合并至旧Redis存储集群中对应用户的用户数据中,若是,则将记录的操作行为数据合并至新Redis存储集群中对应用户的用户数据中。本发明能够实现用户数据的在线迁移。
1.一种用户数据实时迁移方法,基于Redis存储系统,其特征在于:
将旧Redis存储集群存储的用户数据按条拷贝至新Redis存储集群中,每条用户数据均
包括用户ID和操作行为数据;
同时,Redis管理服务实时记录当前在线用户的操作行为数据;
按条判断Redis管理服务记录的操作行为数据所对应用户的用户数据在新Redis存储
集群中是否已拷贝完成,若否,则将记录的操作行为数据合并至旧Redis存储集群中对应用
户的用户数据中,若是,则将记录的操作行为数据合并至新Redis存储集群中对应用户的用
户数据中;
其中,用户数据拷贝进行中和拷贝完成后,Redis管理服务均对当前在线用户的操作行
为数据进行实时记录;
使用Redis存储系统的两个线程同时进行工作,一个线程负责将旧Redis存储集群存储
的用户数据拷贝至新Redis存储集群中,另一个线程负责数据拷贝中使Redis管理服务实时
记录当前在线用户的操作行为数据;
其中,按条判断Redis管理服务记录的操作行为数据所对应用户的用户数据在新Redis
存储集群中是否已拷贝完成,当操作行为数据所对应用户的用户数据在新Redis存储集群
中未拷贝完成时:
判断操作行为数据所对应用户的用户数据是否正在拷贝中,若是,则待操作行为数据
所对应用户的用户数据拷贝完成后,将记录的操作行为数据合并至新Redis存储集群中对
应用户的用户数据中,若否,则将记录的操作行为数据合并至旧Redis存储集群中对应用户
的用户数据中。
2.如权利要求1所述的一种用户数据实时迁移方法,其特征在于:
所述操作行为数据用于记录用户对其他用户的关注操作;
每条用户数据中的用户ID和操作行为数据相对应。
3.如权利要求2所述的一种用户数据实时迁移方法,其特征在于:所述旧Redis存储集
群对应用户数据迁移之前保存用户数据的存储器,所述新Redis存储集群对应用户数据迁
移之后保存用户数据的存储器。
4.如权利要求1所述的一种用户数据实时迁移方法,其特征在于:
Redis管理服务实时记录的当前在线用户的操作行为数据按条保存至一消息队列中,
每条操作行为数据均与相应的用户ID对应;
按照先后顺序从消息队列中按条取出操作行为数据,判断取出的操作行为数据对应用
户的用户数据在新Redis存储集群中是否已拷贝完成。
5.一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处
理器执行时实现权利要求1至4任一项所述的方法。
6.一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程
序,其特征在于:所述处理器执行所述计算机程序时实现权利要求1至4任一项所述的方法。
7.一种用户数据实时迁移系统,其特征在于,包括:
数据迁移模块,其用于将旧Redis存储集群存储的用户数据按条拷贝至新Redis存储集
群中,每条用户数据均包括用户ID和操作行为数据;
数据记录模块,其用于实时记录当前在线用户的操作行为数据;
判断模块,其用于按条判断数据记录模块记录的操作行为数据所对应用户的用户数据
在新Redis存储集群中是否已拷贝完成,若否,则将记录的操作行为数据合并至旧Redis存
储集群中对应用户的用户数据中,若是,则将记录的操作行为数据合并至新Redis存储集群
中对应用户的用户数据中;
其中,用户数据拷贝进行中和拷贝完成后,Redis管理服务均对当前在线用户的操作行
为数据进行实时记录;
使用Redis存储系统的两个线程同时进行工作,一个线程负责将旧Redis存储集群存储
的用户数据拷贝至新Redis存储集群中,另一个线程负责数据拷贝中使Redis管理服务实时
记录当前在线用户的操作行为数据;
其中,按条判断Redis管理服务记录的操作行为数据所对应用户的用户数据在新Redis
存储集群中是否已拷贝完成,当操作行为数据所对应用户的用户数据在新Redis存储集群
中未拷贝完成时:
判断操作行为数据所对应用户的用户数据是否正在拷贝中,若是,则待操作行为数据
所对应用户的用户数据拷贝完成后,将记录的操作行为数据合并至新Redis存储集群中对
应用户的用户数据中,若否,则将记录的操作行为数据合并至旧Redis存储集群中对应用户
的用户数据中。
8.如权利要求7所述的一种用户数据实时迁移系统,其特征在于:所述操作行为数据用
于记录用户对其他用户的关注操作;每条用户数据中的用户ID和操作行为数据相对应。
9.如权利要求8所述的一种用户数据实时迁移系统,其特征在于:所述旧Redis存储集
群对应用户数据迁移之前保存用户数据的存储器,所述新Redis存储集群对应用户数据迁
移之后保存用户数据的存储器。
用户数据实时迁移方法、存储介质、电子设备及系统\n技术领域\n[0001] 本发明涉及数据迁移领域,具体涉及一种用户数据实时迁移方法、存储介质、电子\n设备及系统。\n背景技术\n[0002] 在互联网直播领域,通常需要使用服务器对注册用户的身份、操作行为、直播喜好\n等信息进行存储,如用户身份ID、用户对其它用户的关注操作等等数据进行存储,详细的记\n录了用户的行为喜好,方便用户下次登录直播端时直接推送相应内容给用户,提升用户的\n直播观看体验。\n[0003] 但是,服务器前期设计的存储空间往往无法满足快速增长的用户量,此时便需要\n对服务器的存储空间进行扩容,同时不可避免的涉及到数据迁移操作,即将之前服务器存\n储空间中保存的用户数据迁移到新的大容量存储空间中,但现有的对于数据的迁移操作,\n需要直播厂商暂停提供服务,待服务器中数据迁移完成后,再次开放直播服务,极大地影响\n了用户对于直播的体验。\n发明内容\n[0004] 针对现有技术中存在的缺陷,本发明的目的在于提供一种用户数据实时迁移方\n法,能够实现用户数据的在线迁移。\n[0005] 为达到以上目的,本发明采取的技术方案是,包括:\n[0006] 将旧Redis存储集群存储的用户数据按条拷贝至新Redis存储集群中,每条用户数\n据均包括用户ID和操作行为数据;\n[0007] 同时,Redis管理服务实时记录当前在线用户的操作行为数据;\n[0008] 按条判断Redis管理服务记录的操作行为数据所对应用户的用户数据在新Redis\n存储集群中是否已拷贝完成,若否,则将记录的操作行为数据合并至旧Redis存储集群中对\n应用户的用户数据中,若是,则将记录的操作行为数据合并至新Redis存储集群中对应用户\n的用户数据中。\n[0009] 在上述技术方案的基础上,\n[0010] 所述操作行为数据用于记录用户对其他用户的关注操作;\n[0011] 每条用户数据中的用户ID和操作行为数据相对应;\n[0012] 用户数据拷贝进行中和拷贝完成后,Redis管理服务均对当前在线用户的操作行\n为数据进行实时记录。\n[0013] 在上述技术方案的基础上,所述旧Redis存储集群对应用户数据迁移之前保存用\n户数据的存储器,所述新Redis存储集群对应用户数据迁移之后保存用户数据的存储器。\n[0014] 在上述技术方案的基础上,\n[0015] Redis管理服务实时记录的当前在线用户的操作行为数据按条保存至一消息队列\n中,每条操作行为数据均与相应的用户ID对应;\n[0016] 按照先后顺序从消息队列中按条取出操作行为数据,判断取出的操作行为数据对\n应用户的用户数据在新Redis存储集群中是否已拷贝完成。\n[0017] 在上述技术方案的基础上,按条判断Redis管理服务记录的操作行为数据所对应\n用户的用户数据在新Redis存储集群中是否已拷贝完成,当操作行为数据所对应用户的用\n户数据在新Redis存储集群中未拷贝完成时:\n[0018] 判断操作行为数据所对应用户的用户数据是否正在拷贝中,若是,则待操作行为\n数据所对应用户的用户数据拷贝完成后,将记录的操作行为数据合并至新Redis存储集群\n中对应用户的用户数据中,若否,则将记录的操作行为数据合并至旧Redis存储集群中对应\n用户的用户数据中。\n[0019] 本发明还提供一种存储介质,该存储介质上存储有计算机程序,所述计算机程序\n被处理器执行时实现上述所述的方法。\n[0020] 本发明还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上\n运行的计算机程序,所述处理器执行所述计算机程序时实现上述所述的方法。\n[0021] 本发明还提供一种用户数据实时迁移系统,包括:\n[0022] 数据迁移模块,其用于将旧Redis存储集群存储的用户数据按条拷贝至新Redis存\n储集群中,每条用户数据均包括用户ID和操作行为数据;\n[0023] 数据记录模块,其用于实时记录当前在线用户的操作行为数据;\n[0024] 判断模块,其用于按条判断数据记录模块记录的操作行为数据所对应用户的用户\n数据在新Redis存储集群中是否已拷贝完成,若否,则将记录的操作行为数据合并至旧\nRedis存储集群中对应用户的用户数据中,若是,则将记录的操作行为数据合并至新Redis\n存储集群中对应用户的用户数据中。\n[0025] 在上述技术方案的基础上,所述操作行为数据用于记录用户对其他用户的关注操\n作;每条用户数据中的用户ID和操作行为数据相对应;用户数据拷贝进行中和拷贝完成后,\nRedis管理服务均对当前在线用户的操作行为数据进行实时记录。\n[0026] 在上述技术方案的基础上,所述旧Redis存储集群对应用户数据迁移之前保存用\n户数据的存储器,所述新Redis存储集群对应用户数据迁移之后保存用户数据的存储器。\n[0027] 与现有技术相比,本发明的优点在于:在将旧Redis存储集群存储的用户数据按条\n拷贝至新Redis存储集群的过程中,此时Redis管理服务还实时记录当前在线用户的操作行\n为数据,采用双线程并发的工作模式,实现用户数据的双写,将旧Redis存储集群存储的用\n户数据完整的拷贝至新Redis存储集群中,且对拷贝工作中的新产生的操作行为数据同时\n进行记录和存储,因而在用户数据的拷贝过程中,服务器无需停止服务,有效保证了用户对\n于直播的观看体验。\n附图说明\n[0028] 图1为本发明实施例中一种用户数据实时迁移方法的流程图;\n[0029] 图2为本发明实施例中一种电子设备的结构示意图。\n具体实施方式\n[0030] 以下结合附图及实施例对本发明作进一步详细说明。\n[0031] 参见图1所示,本发明实施例提供一种用户数据实时迁移方法,用于在无需停止服\n务或关闭服务器对外的情况下,将用户数据从小容量的存储器中拷贝至大容量的储存器\n中,实现服务器扩容的目的,本发明实施例的用户数据实时迁移方法基于Redis存储系统,\nRedis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、\nKey‑Value数据库。本发明实施例的用户数据实时迁移方法具体包括:\n[0032] S1:将旧Redis存储集群存储的用户数据按条拷贝至新Redis存储集群中,每条用\n户数据均包括用户ID和操作行为数据。旧Redis存储集群对应用户数据迁移之前保存用户\n数据的存储器,新Redis存储集群对应用户数据迁移之后保存用户数据的存储器。本发明实\n施例中操作行为数据用于记录用户对其他用户的关注操作,如关注或取消关注,每条用户\n数据中的用户ID和操作行为数据相对应,每个用户的用户ID是唯一的,但每个用户ID可能\n对应多个操作行为数据,因直播网站中,用户是能够同时关注多个其它用户的,故此种情况\n下,一个用户ID便会对应多条操作行为数据。\n[0033] 用户ID一般由数字组成,直播网站对用户ID数字的分配,一般按照用户申请的先\n后顺序进行,即后申请用户的用户ID数值大于先申请用户的用户ID。且在将旧Redis存储集\n群存储的用户数据按条拷贝至新Redis存储集群中时,Redis存储系统的迁移数据服务\nMegrateServer对于数据的前移也是按序按条进行,即先迁移用户ID数值较小用户的用户\n数据,再迁移用户ID数值较大用户的用户数据,按序进行,对于迁移数据的进行,使用Redis\n的指令“MIGRATE host port key destination‑db timeout COPY”从而将current_user_\nid(当前正进行数据拷贝的用户ID)的用户数据从OldRedisCluster(旧Redis存储集群)拷\n贝到NewRedisCluster(新Redis存储集群)中,接着再执行指令current_user_id=\ncurrent_user_id+1,即将下一个用户的用户数据进行拷贝,以此类推,直至完成旧Redis存\n储集群中所有用户数据的迁移。\n[0034] S2:同时,Redis管理服务实时记录当前在线用户的操作行为数据。Redis管理服务\n是用于记录用户的操作行为数据,如某用户对某用户的关注或取消关注操作,且用户数据\n拷贝进行中和拷贝完成后,Redis管理服务均对当前在线用户的操作行为数据进行实时记\n录,即用户数据在从旧Redis存储集群拷贝至新Redis存储集群的过程中,Redis管理服务也\n在对用户操作后产生的操作行为数据进行记录,从而实现服务器扩容过程中的服务器不停\n机操作。\n[0035] 对于Redis管理服务记录的操作行为数据以及旧Redis存储集群和新Redis存储集\n群中记录保存的用户数据,均按照特定数据结构形式进行保存,例如{int32user_id1,\nint32operate_type,int32user_id2},user_id1代表用户ID数值为1的用户,int32user_\nid2代表用户ID数值为2的用户,当参数operate_type的值为1时,表示用户ID数值为1的用\n户关注了用户ID数值为2的用户,当参数operate_type的值为2时,表示用户ID数值为1的用\n户取消关注了用户ID数值为2的用户,Redis管理服务按照以上数据结构格式,记录用户操\n作产生的操作行为数据。\n[0036] 使用Redis存储系统的两个线程同时进行工作,一个线程负责将旧Redis存储集群\n存储的用户数据拷贝至新Redis存储集群中,另一个线程负责数据拷贝中使Redis管理服务\n实时记录当前在线用户的操作行为数据,采用双线程并发的工作模式,实现用户数据的拷\n贝和新产生的用户的操作行为数据记录同时进行,避免服务器数据过程中的停止服务。\n[0037] S3:按条判断Redis管理服务记录的操作行为数据所对应用户的用户数据在新\nRedis存储集群中是否已拷贝完成,若否,则表示该条操作行为数据对应用户的用户数据还\n没拷贝至新Redis存储集群中,则将记录的操作行为数据合并至旧Redis存储集群中对应用\n户的用户数据中,若是,则表示该条操作行为数据对应用户的用户数据已拷贝至新Redis存\n储集群中,则将记录的操作行为数据合并至新Redis存储集群中对应用户的用户数据中。对\n于操作行为数据合并操作,如之前操作行为数据记录的是用户1关注了用户2,新记录的操\n作行为数据为用户1取消关注了用户2,则合并后该用户的操作行为数据记录的为用户1没\n有关注用户2,如之前操作行为数据记录的是用户1关注了用户2,新记录的操作行为数据为\n用户1关注了用户3,则合并后的操作行为数据记录的是用户1关注了用户2和用户3。\n[0038] 因用户数据从旧Redis存储集群拷贝至新Redis存储集群中需要时间,而此时服务\n器没有停止对外服务,故此时还会产生当前用户的操作,从而产生用户的操作行为数据,故\nRedis管理服务实时记录的当前在线用户的操作行为数据按条保存至一消息队列中,每条\n操作行为数据均与相应的用户ID对应;然后按照先后顺序从消息队列中按条取出操作行为\n数据,判断取出的操作行为数据对应用户的用户数据在新Redis存储集群中是否已拷贝完\n成。\n[0039] 按条判断Redis管理服务记录的操作行为数据所对应用户的用户数据在新Redis\n存储集群中是否已拷贝完成,当操作行为数据所对应用户的用户数据在新Redis存储集群\n中未拷贝完成时:判断操作行为数据所对应用户的用户数据是否正在拷贝中,若是,则待操\n作行为数据所对应用户的用户数据拷贝完成后,将记录的操作行为数据合并至新Redis存\n储集群中对应用户的用户数据中,若否,则将记录的操作行为数据合并至旧Redis存储集群\n中对应用户的用户数据中。\n[0040] 在一种实施方式中,因用户数据的拷贝是按照用户ID数值的大小,从小开始进行,\n故对于在数据拷贝过程中,Redis管理服务记录的操作行为数据对应用户的用户数据是否\n拷贝完成的判断,可以将该用户的用户ID数值与当前正在进行数据拷贝的用户的用户ID数\n值大小进行比对,从而进行判断。具体的:\n[0041] 从消息队列中取出一条操作行为数据(UserBehavior),将UserBehavior.user_id\n和current_user_id的大小进行比对,其中UserBehavior.user_id代表当前从消息队列中\n取出的一条操作行为数据对应用户的用户ID数值,current_user_id代表当前正在进行拷\n贝的用户的用户ID数值,若UserBehavior.user_id<current_user_id,则表示当前取出的\n操作行为数据对应用户的用户数据已拷贝至新Redis存储集群中,则将当前取出的操作行\n为数据合并至新Redis存储集群中对应用户的用户数据中;若UserBehavior.user_id=\ncurrent_user_id,则表示当前取出的操作行为数据对应用户的用户数据正在进行拷贝,则\n待当前取出的操作行为数据对应用户数据拷贝完成后,将当前取出的操作行为数据合并至\n新Redis存储集群中,对于等待的时间,为避免无限制等待,可以对等待时间的上限进行限\n定;若UserBehavior.user_id>current_user_id,则表示当前取出的操作行为数据对应用\n户的用户数据还未拷贝至新Redis存储集群中,则将当前取出的操作行为数据合并至旧\nRedis存储集群中对应用户的用户数据中。当旧Redis存储集群存储的用户数据全部拷贝至\n新Redis存储集群中后,此时Redis管理服务新记录的操作行为数据将全部合并至新Redis\n存储集群对应用户的用户数据中。\n[0042] 本发明的用户数据实时迁移方法的原理在于,在将旧Redis存储集群存储的用户\n数据按条拷贝至新Redis存储集群的过程中,此时Redis管理服务还实时记录当前在线用户\n的操作行为数据,即用户数据的拷贝和新产生的用户的操作行为数据记录同时进行,采用\n双线程并发的工作模式,实现用户数据的双写,将旧Redis存储集群存储的用户数据完整的\n拷贝至新Redis存储集群中,且对拷贝工作中的新产生的操作行为数据同时进行记录和存\n储,有线避免了传统服务器扩容,数据拷贝过程中,服务器需停止服务的设定,有效保证了\n用户对于直播的观看体验,且整个数据的拷贝工作效率极高,由于Redis存储系统的TPS\n(Transaction processing systems,事务处理系统)都是10W级别的,故采用本发明的数据\n拷贝方法,在具体的实施过程中,3亿用户的用户数据能够在1个小时内完成迁移。\n[0043] 另外,对应上述用户数据实时迁移方法,本发明还提供一种存储介质,存储介质上\n存储有计算机程序,计算机程序被处理器执行时实现上述各实施例所述的用户数据实时迁\n移方法的步骤。需要说明的是,所述存储介质包括U盘、移动硬盘、ROM(Read‑Only Memory,\n只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存\n储程序代码的介质。\n[0044] 参见图2所示,对应上述用户数据实时迁移方法,本发明还提供一种电子设备,包\n括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程\n序时实现上述各实施例的用户数据实时迁移方法。\n[0045] 本发明还提供一种基于上述用户数据实时迁移方法的用户数据实时迁移系统,包\n括数据迁移模块、数据记录模块和判断模块。\n[0046] 数据迁移模块用于将旧Redis存储集群存储的用户数据按条拷贝至新Redis存储\n集群中,每条用户数据均包括用户ID和操作行为数据;数据记录模块用于实时记录当前在\n线用户的操作行为数据;判断模块用于按条判断数据记录模块记录的操作行为数据所对应\n用户的用户数据在新Redis存储集群中是否已拷贝完成,若否,则将记录的操作行为数据合\n并至旧Redis存储集群中对应用户的用户数据中,若是,则将记录的操作行为数据合并至新\nRedis存储集群中对应用户的用户数据中。\n[0047] 操作行为数据用于记录用户对其他用户的关注操作;每条用户数据中的用户ID和\n操作行为数据相对应;用户数据拷贝进行中和拷贝完成后,Redis管理服务均对当前在线用\n户的操作行为数据进行实时记录。旧Redis存储集群对应用户数据迁移之前保存用户数据\n的存储器,新Redis存储集群对应用户数据迁移之后保存用户数据的存储器。\n[0048] 本发明实施例的用户数据实时迁移系统的原理在于,数据迁移模块在将旧Redis\n存储集群存储的用户数据按条拷贝至新Redis存储集群的过程中,此数据记录模块还实时\n记录当前在线用户的操作行为数据,即用户数据的拷贝和新产生的用户的操作行为数据记\n录同时进行,采用双线程并发的工作模式,实现用户数据的双写,将旧Redis存储集群存储\n的用户数据完整的拷贝至新Redis存储集群中,且对拷贝工作中的新产生的操作行为数据\n同时进行记录和存储,有线避免了传统服务器扩容,数据拷贝过程中,服务器需停止服务的\n设定,有效保证了用户对于直播的观看体验。\n[0049] 本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离\n本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护\n范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
法律信息
- 2021-09-07
- 2019-05-14
实质审查的生效
IPC(主分类): H04L 29/08
专利申请号: 201710936631.8
申请日: 2017.10.10
- 2019-04-19
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2008-08-27
|
2008-03-31
| | |
2
| |
2017-05-17
|
2015-11-09
| | |
3
| |
2014-07-09
|
2013-01-05
| | |
4
| |
2013-12-25
|
2013-09-27
| | |
5
| |
2014-05-28
|
2013-11-12
| | |
6
| |
2012-01-04
|
2011-07-13
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |