CN104750740B - 数据更新的方法及装置 - Google Patents
数据更新的方法及装置 Download PDFInfo
- Publication number
- CN104750740B CN104750740B CN201310747066.2A CN201310747066A CN104750740B CN 104750740 B CN104750740 B CN 104750740B CN 201310747066 A CN201310747066 A CN 201310747066A CN 104750740 B CN104750740 B CN 104750740B
- Authority
- CN
- China
- Prior art keywords
- data
- data identification
- memory
- identification
- stored
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据更新的方法及装置,属于数据库技术领域。所述方法包括:获取数据更新请求后,查询内存中是否存储有第一数据标识对应的历史数据;如果内存中存储,则根据更新数据更新内存中存储的历史数据,记录更新时间,并将其对应的更新状态更新为未更新到数据库状态;每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库。本发明通过获取数据更新请求后,先将其更新至内存中,再每隔预设时间将内存中的数据同步至数据库中,避免在更新频繁的应用场景中,频繁访问数据库,而给数据库造成比较严重的文件碎片,提高数据库性能。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种数据更新的方法及装置。
背景技术
随着信息时代的到来,信息无处不在,对于信息的更新也无处不在,例如,用户的心情短语更新、用户的积分变更、用户的位置信息变更等。信息更新后数据库中的信息同步成为海量信息处理的基础操作。由于,数据是构成信息的基本单位,因此,数据同步的方法直接影响信息同步的效率和准确率。
现有技术在数据同步时,数据D1每更新一次,均需要访问数据库进行数据库同步,因此,对于更新频繁的应用场景,会频繁访问数据库,并给数据库造成比较严重的文件碎片,随着时间的增长,该文件碎片会使数据库性能下降。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种数据更新的方法及装置。所述技术方案如下:
一方面,提供了一种数据更新的方法,所述方法包括:
获取数据更新请求,所述数据更新请求中携带有待更新的第一数据标识及所述第一数据标识对应的更新数据;
查询内存中是否存储有所述第一数据标识对应的历史数据;
如果内存中存储有所述第一数据标识对应的历史数据,则根据所述更新数据更新内存中存储的所述第一数据标识对应的历史数据,记录更新时间,并将所述第一数据标识对应的更新状态更新为未更新到数据库状态;
每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库。
进一步地,所述查询内存中是否存储有所述第一数据标识对应的历史数据之后,还包括:
如果内存中未存储所述第一数据标识对应的历史数据,则从数据库中获取所述第一数据标识对应的历史数据;
将从数据库中获取到的所述第一数据标识对应的历史数据存储至内存,并执行根据所述更新数据更新内存中存储的所述第一数据标识对应的历史数据的步骤及后续步骤。
进一步地,所述方法还包括:
获取数据读取请求,所述数据读取请求中携带有第二数据标识;
查询内存中是否存储有所述第二数据标识对应的历史数据;
如果内存中存储有所述第二数据标识对应的历史数据,则从内存中读取所述第二数据标识对应的历史数据;
如果内存中未存储所述第二数据标识对应的历史数据,则从数据库中读取所述第二数据标识对应的历史数据。
进一步地,所述方法还包括:
获取数据库中已存储的数据对应的数据标识,并预先设置至少两个数据标识列表,将获取到的每个数据标识分别存储至对应的数据标识列表中;
所述查询内存中是否存储有所述第一数据标识对应的历史数据之前,还包括:
确定所述第一数据标识所在的数据标识列表,并在所述第一数据标识所在的数据标识列表中查询所述第一数据标识;
如果查询到所述第一数据标识,则执行查询内存中是否存储有所述第一数据标识对应的历史数据的步骤;
如果未查询到所述第一数据标识,则将所述第一数据标识及所述第一数据标识对应的更新数据存储至内存,执行记录更新时间,并将所述第一数据标识对应的更新状态更新为未更新到数据库状态的步骤及后续步骤。
进一步地,所述查询内存中是否存储有所述第二数据标识对应的历史数据之前,还包括:
确定所述第二数据标识所在的数据标识列表,并在所述第二数据标识所在的数据标识列表中查询所述第二数据标识;
如果查询到所述第二数据标识,则执行查询内存中是否存储有所述第二数据标识对应的历史数据的步骤。
如果未查询到所述第二数据标识,则返回空值。
另一方面,提供了一种数据更新的装置,所述装置包括:
第一获取模块,用于获取数据更新请求,所述数据更新请求中携带有待更新的第一数据标识及所述第一数据标识对应的更新数据;
查询模块,用于查询内存中是否存储有所述第一数据标识对应的历史数据;
第一更新模块,用于当内存中存储有所述第一数据标识对应的历史数据时,根据所述更新数据更新内存中存储的所述第一数据标识对应的历史数据;
第二更新模块,用于记录更新时间,并将所述第一数据标识对应的更新状态更新为未更新到数据库状态;
第三更新模块,用于每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库。
进一步地,所述装置,还包括:
第二获取模块,用于当内存中未存储所述第一数据标识对应的历史数据时,从数据库中获取所述第一数据标识对应的历史数据;
第一存储模块,用于将从数据库中获取到的所述第一数据标识对应的历史数据存储至内存。
进一步地,所述装置还包括:
第三获取模块,用于获取数据读取请求,所述数据读取请求中携带有第二数据标识;
所述查询模块,还用于查询内存中是否存储有所述第二数据标识对应的历史数据;
第一读取模块,用于当内存中存储有所述第二数据标识对应的历史数据时,从内存中读取所述第二数据标识对应的历史数据;
第二读取模块,用于当内存中未存储所述第二数据标识对应的历史数据时,从数据库中读取所述第二数据标识对应的历史数据。
进一步地,所述装置,还包括:
第四获取模块,用于获取数据库中已存储的数据对应的数据标识;
第二存储模块,用于将获取到的每个数据标识分别存储至对应的数据标识列表中;
所述查询模块,还用于确定所述第一数据标识所在的数据标识列表,并在所述第一数据标识所在的数据标识列表中查询所述第一数据标识;当查询到所述第一数据标识时,执行查询内存中是否存储有所述第一数据标识对应的历史数据的步骤;
第三存储模块,用于当未查询到所述第一数据标识时,将所述第一数据标识及所述第一数据标识对应的更新数据存储至内存;
进一步地,所述查询模块,还用于确定所述第二数据标识所在的数据标识列表,并在所述第二数据标识所在的数据标识列表中查询所述第二数据标识;当查询到所述第二数据标识时,执行查询内存中是否存储有所述第二数据标识对应的历史数据的步骤。
所述装置,还包括:
返回模块,用于当未查询到所述第二数据标识时,返回空值。
本发明实施例提供的技术方案带来的有益效果是:
通过获取数据更新请求后,先将其更新至内存中,再每隔预设时间将内存中的数据同步至数据库中;同时,获取数据读取请求后,先确定是否存储有待获取的数据,如果有,再确定待获取的数据的存储位置,并在该位置获取待获取的数据,避免在更新频繁的应用场景中,频繁访问数据库,而给数据库造成比较严重的文件碎片,提高数据库性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的数据更新的实施环境示意图;
图2是本发明实施例一提供的一种数据更新的方法流程图;
图3是本发明实施例二提供的一种数据更新的方法流程图;
图4是本发明实施例二提供的一种数据更新的交互示意图;
图5是本发明实施例三提供的一种数据更新的方法流程图;
图6是本发明实施例三提供的一种数据更新的交互示意图;
图7是本发明实施例四提供的第一种数据更新的装置结构示意图;
图8是本发明实施例四提供的第二种数据更新的装置结构示意图;
图9是本发明实施例四提供的第三种数据更新的装置结构示意图
图10是本发明实施例四提供的第四种数据更新的装置结构示意图
图11是本发明实施例四提供的第五种数据更新的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
参见图1,为本发明实施例提供的数据更新的方法实施环境示意图。该实施环境包括数据更新的后端设备101、数据更新的前端设备102及数据存储设备103。
其中,数据更新的后端设备101上运行有数据更新的装置,该数据更新的装置如下述实施例三所述的数据更新的装置。另外,该数据更新的后端设备101可以是后端服务器,用于与数据存储设备103及数据更新的前端设备102结合来为用户提供数据更新的服务。
数据更新的前端设备102可以是台式电脑、智能手机、平板电脑、电子书阅读器、MP3(Moving Picture Experts GroupAudio Layer III,动态影像专家压缩标准音频层面3)播放器、MP4(Moving Picture Experts GroupAudio Layer IV,动态影像专家压缩标准音频层面3)播放器、膝上型便携计算机和台式计算机等等。
数据存储设备103包括至少一台用于存储数据库的服务器,且该数据存储设备103可通过第三方应用程序与数据更新的后端设备101及数据更新的前端设备102结合提供数据更新的服务。
上述数据更新的后端设备101、数据更新的前端设备102及数据存储设备103之间可以通过无线网络或者有线网络进行通信。
实施例一
本实施例提供了一种数据更新的方法,参见图2,本实施例提供的方法流程具体如下:
201:获取数据更新请求,数据更新请求中携带有待更新的第一数据标识及第一数据标识对应的更新数据;
202:查询内存中是否存储有第一数据标识对应的历史数据;
进一步地,查询内存中是否存储有第一数据标识对应的历史数据之后,还包括:
如果内存中未存储第一数据标识对应的历史数据,则从数据库中获取第一数据标识对应的历史数据;
将从数据库中获取到的第一数据标识对应的历史数据存储至内存,并执行根据更新数据更新内存中存储的第一数据标识对应的历史数据的步骤及后续步骤。
203:如果内存中存储有第一数据标识对应的历史数据,则根据更新数据更新内存中存储的第一数据标识对应的历史数据,记录更新时间,并将第一数据标识对应的更新状态更新为未更新到数据库状态;
204:每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库。
进一步地,该方法还包括:
获取数据读取请求,数据读取请求中携带有第二数据标识;
查询内存中是否存储有第二数据标识对应的历史数据;
如果内存中存储有第二数据标识对应的历史数据,则从内存中读取第二数据标识对应的历史数据;
如果内存中未存储第二数据标识对应的历史数据,则从数据库中读取第二数据标识对应的历史数据。
进一步地,该方法还包括:
获取数据库中已存储的数据对应的数据标识,并预先设置至少两个数据标识列表,将获取到的每个数据标识分别存储至对应的数据标识列表中;
查询内存中是否存储有第一数据标识对应的历史数据之前,还包括:
确定第一数据标识所在的数据标识列表,并在第一数据标识所在的数据标识列表中查询第一数据标识;
如果查询到第一数据标识,则执行查询内存中是否存储有第一数据标识对应的历史数据的步骤;
查询内存中是否存储有第二数据标识对应的历史数据之前,还包括:
确定第二数据标识所在的数据标识列表,并在第二数据标识所在的数据标识列表中查询第二数据标识;
如果查询到第二数据标识,则执行查询内存中是否存储有第二数据标识对应的历史数据的步骤。
进一步地,在第一数据标识所在的数据标识列表中查询第一数据标识之后,还包括:
如果未查询到第一数据标识,则将第一数据标识及第一数据标识对应的更新数据存储至内存,执行记录更新时间,并将第一数据标识对应的更新状态更新为未更新到数据库状态的步骤及后续步骤;
在第二数据标识所在的数据标识列表中查询第二数据标识之后,还包括:
如果未查询到第二数据标识,则返回空值。
本发明实施例提供的方法,通过获取数据更新请求后,先将其更新至内存中,再每隔预设时间将内存中的数据同步至数据库中;同时,获取数据读取请求后,先确定是否存储有待获取的数据,如果有,再确定待获取的数据的存储位置,并在该位置获取待获取的数据,避免在更新频繁的应用场景中,频繁访问数据库,而给数据库造成比较严重的文件碎片,提高数据库性能。
为了更加清楚地阐述上述实施例提供的一种数据更新的方法,结合上述实施例的内容,以如下实施例二为例,对一种数据更新的方法进行详细说明,详见如下实施例二:
实施例二
本发明实施例提供了一种数据更新的方法,为了便于理解,结合图1及上述实施例一的内容,以更新用户的金币变化的应用场景为例,其中,待更新的第一数据标识为user_id即ID1(IDentity,身份标识),ID1对应的更新数据为ID1的最新金币数量n1,对本实施例提供的方法进行详细地举例说明。参见图3,本实施例提供的方法流程包括:
301:获取数据更新请求,数据更新请求中携带有待更新的第一数据标识及第一数据标识对应的更新数据;
本实施例不对获取数据更新请求的具体方式进行限定,例如,参见图1,数据更新的后端设备101通过set接口从数据更新的前端设备102获取数据更新请求。
具体的,如图4所示的数据更新的交互示意图中的401,数据更新的后端设备101通过set接口从数据更新的前端设备102获取程序请求:基于第一数据标识的更新,其中,数据更新请求中携带ID1及n1。
302:判断是否存储有第一数据标识对应的历史数据,如果未存储第一数据标识对应的历史数据,则执行步骤303,否则,执行步骤304;
由于内存中存储的数据是数据库中存储的数据的全部或者一部分,因而在数据库中未存储的数据,也将不会被存储在内存中。因此,本实施例提供的方法在获取到数据更新请求后,为了提高数据更新效率,可以先判断是否存储有该数据更新请求中携带的第一数据标识对应的历史数据,如果判断得出未存储有该第一数据标识对应的历史数据,则可以直接将数据更新请求中的更新数据存储至内存,并进行更新操作,而无需再执行查询过程,进而节省更新时间,提高更新效率,即直接执行步骤303。对于判断出存储有该第一数据标识对应的历史数据的情况,再执行向内存进行查询的操作,即执行步骤304。也就是说,该步骤302的判断步骤为优选步骤。
本实施例不对判断是否存储有第一数据标识对应的历史数据的判断方法进行限定,具体实施时,在判断是否存储有第一数据标识对应的历史数据之前,可以先获取数据库中已存储的数据对应的数据标识,并预先设置至少两个数据标识列表,将获取到的每个数据标识分别存储至对应的数据标识列表中。基于已经存储的数据标识列表,判断是否存储有第一数据标识对应的历史数据。具体判断过程包括但不限于确定第一数据标识所在的数据标识列表,并在第一数据标识所在的数据标识列表中查询第一数据标识;如果查询到第一数据标识,则确定存储有第一数据标识对应的历史数据,再执行步骤304中查询内存中是否存储有第一数据标识对应的历史数据的步骤。如果未查询到第一数据标识,则确定未存储有第一数据标识对应的历史数据,直接执行步骤303。
具体地,在本实施例中,上述获取数据库中已存储的数据对应的数据标识具体可以是在历史更新数据过程中记录存储到数据库的数据对应的数据标识,当有新数据(即数据库中未存储该数据的历史数据)时,记录该数据的数据标识并添加到数据标识列表中。
其中,将获取到的每个数据标识分别存储至对应的数据标识列表中时,可以采用表单拆分的方式对数据库中已存储的数据对应的数据标识进行存储,包括但不限于按照数据标识与数据标识列表的数量取余的方式将每个数据标识存储至对应的数据标识列表。
例如,预先设置100张数据标识列表table_1、table_2、table_3……table_100,通过对数据标识user_id%100进行取余实现将数据标识存储至对应的数据标识列表。例如,将user_id%100为1的数据标识存储至table_1的数据标识列表中,将user_id%100为2的数据标识存储至table_2的数据标识列表中,依此类推,user_id%100为n的数据标识存储至table_n的数据标识列表中。
基于上述存储数据标识的方式,判断是否存储有第一数据标识对应的历史数据时,先确定第一数据标识所在的数据标识列表,并在第一数据标识所在的数据标识列表中查询第一数据标识。确定第一数据标识所在的数据标识列表时,也可以按照第一数据标识与数据标识列表数量取余的方式来确定。例如,如果第一数据标识user_id%100为m,则确定第一数据标识存储在table_m的数据标识列表中,从而在table_m的数据标识列表中查询第一数据标识。
303:将第一数据标识及第一数据标识对应的更新数据存储至内存,执行步骤308及后续步骤;
本实施例不对将第一数据标识及第一数据标识对应的更新数据存储至内存的具体存储方式进行限定,包括但不限于:如果预先设置内存中第一数据标识及第一数据标识对应的历史数据以哈希结构进行存储,则将第一数据标识及第一数据标识对应的更新数据通过哈希结构存储至内存。
具体的,如果预先设置内存中第一数据标识及第一数据标识对应的历史数据以如下user_profile_t结构进行存储,其中user_id为第一数据标识,gold_num为第一数据标识对应的金币数量,则将ID1及D1通过user_profile_t结构存储至内存中。
当然,内存中第一数据标识及第一数据标识对应的历史数据的存储结构还可以为其它结构,本实施例不对内存中第一数据标识及第一数据标识对应的历史数据的具体存储结构进行限定。user_profile_t结构中各参数名称命名及类型还可以为其它参数名称及类型,本实施例不对user_profile_t结构中各参数名称的具体命名及具体类型进行限定。
304:查询内存中是否存储有第一数据标识对应的历史数据,如果内存中未存储有第一数据标识对应的历史数据,则执行步骤305,否则,执行步骤307;
本实施例不对查询内存中是否存储有第一数据标识对应的历史数据的具体查询方法进行限定,包括但不限于:在存储第一数据标识及第一数据标识对应的历史数据的哈希结构中查找是否有第一数据标识对应的历史数据。
具体的,如果第一数据标识及第一数据标识对应的历史数据以步骤303中所示user_profile_t结构存储,则查找user_profile_t中是否有user_id为ID1的数据,如果有,则确定内存中存储有第一数据标识对应的历史数据,且user_id为ID1的user_profile_t中对应的gold_num为ID1对应的历史数据,否则,确定内存中未存储有第一数据标识对应的历史数据。
305:从数据库中获取第一数据标识对应的历史数据;
本实施例不对从数据库中获取第一数据标识对应的历史数据的具体获取方法进行限定,包括但不限于:如果数据库加速服务中以DBhepler做数据库和连接池管理,则通过DBhepler从数据存储设备103中存储的数据库中获取第一数据标识对应的历史数据。
具体的,以图4中402所示第一数据标识对应的历史数据未存储在内存为例,则通过DBhepler从数据库中获取ID1对应的历史数据。
需要说明的,为了提高从数据库中获取数据的速度,数据库可以采用表单拆分的方式对数据进行存储。即利用访问条件将数据库中存储的表单拆分成至少两个子表单。
具体的,以访问条件为user_id,数据库将数据标识列表拆分成100个前缀为table_的数据标识列表为例,将数据库中存储金币数量的表单依据user_id%100进行取余实现数据标识列表的动态拆分。即user_id%100为1的数据存储在table_1的数据标识列表中,user_id%100为2的数据存储在table_2的数据标识列表中,依次拆分,user_id%100为n的数据存储在table_n的数据标识列表中。当然,访问条件还可以为其它条件,本实施例不对具体访问条件进行限定。拆分依据还可以为其它条件,本实施例不对具体的拆分依据进行限定。
另外,为了提高从数据库中获取数据的速度,拆分后的子表单在实际部署时,可以通过多进程的方式进行部署。例如,将进程数量确定为数据标识列表数量,每一进程通过一个监听端口服务于一个数据标识列表,实现对数据标识列表的调用。当然,数据标识列表的部署方式还可以为其它方式,本实施例不对数据标识列表的具体部署方式进行限定。
306:将从数据库中获取到的第一数据标识对应的历史数据存储至内存;
本实施例不对将从数据库中获取到的第一数据标识对应的历史数据存储至内存的具体存储方式进行限定,包括但不限于:如果预先设置内存中第一数据标识及第一数据标识对应的历史数据以哈希结构进行存储,则将从数据库中获取到的第一数据标识对应的历史数据通过哈希结构存储至内存。
具体的,如果第一数据标识及第一数据标识对应的历史数据以步骤303中所示user_profile_t结构存储,则将从数据库中获取到的ID1对应的历史数据作为user_profile_t中的gold_num,ID1作为user_profile_t中的user_id存储至内存。
307:根据更新数据更新内存中存储的第一数据标识对应的历史数据;
本实施例不对根据更新数据更新内存中存储的第一数据标识对应的历史数据的具体更新方法进行限定,包括但不限于:如果预先设置内存中第一数据标识及第一数据标识对应的历史数据以哈希结构进行存储,则将第一数据标识对应的哈希结构中的第一数据标识对应的历史数据更新为更新数据。
具体的,如图4中403第一数据标识对应的历史数据存储在内存为例,如果第一数据标识及第一数据标识对应的历史数据以步骤303中所示user_profile_t结构存储,则将ID1对应的user_profile_t中的gold_num值更新为n1。
308:记录第一数据标识对应的更新时间,并将第一数据标识对应的更新状态更新为未更新到数据库状态;
本实施例不对记录第一数据标识对应的更新时间的具体记录方式进行限定,包括但不限于:如果预先设置内存中第一数据标识对应的更新时间以LRU(Least RecentlyUsed,最近最少使用)链表结构进行存储,则将LRU链表中第一数据标识对应的更新时间更新为当前时间。进一步地,更新状态包括但不限于更新到数据库状态和未更新到数据库状态。本实施例不对将第一数据标识对应的更新状态更新为未更新到数据库状态的具体更新方式进行限定,包括但不限于:如果预先设置内存中第一数据标识对应的更新状态以LRU链表结构进行存储,则将LRU链表中第一数据标识对应的更新状态更新为未更新到数据库状态。
具体的,如图4中404,如果预先设置内存中第一数据标识对应的更新时间及第一数据标识对应的更新状态以如下user_list_t的LRU结构进行存储,则找到user_id为ID1的user_list_t,并将该user_list_t中的changetime更新为当前时间,将该user_list_t中的write更新为未更新到数据库状态。其中,user_id为第一数据标识,write为第一数据标识对应的更新状态,changetime为第一数据标识对应的更新时间,pre为LRU链表中该第一数据标识对应的前一第一数据标识,next为LRU链表中该第一数据标识对应的后一第一数据标识。
当然,内存中第一数据标识对应的更新时间及第一数据标识对应的更新状态的存储结构还可以为其它结构,本实施例对此不进行限定。user_list_t结构中各参数名称命名及类型还可以为其它参数名称及类型,本实施例不对user_list_t结构中各参数名称的具体命名及具体类型进行限定。
需要说明的,如果步骤304中查询到内存中未存储有第一数据标识对应的历史数据,则本步骤执行步骤305之前为第一数据标识分配内存空间,该内存空间用于存储第一数据标识对应的历史数据、更新时间及更新状态。本实施例不对第一数据标识分配内存空间的具体分配方法进行限定。
另外,对第一数据标识分配内存空间时,当空闲内存接近预设上限或者没有空闲内存时,由于第一数据标识对应的更新时间及第一数据标识对应的更新状态的存储结构为LRU结构。因此,会在已经存储在LRU结构中的各个第一数据标识对应的更新时间及更新状态选择至少一个第一数据标识对应的更新时间及更新状态,并释放选择的第一数据标识占用的内存。本实施例不对选择至少一个第一数据标识对应的更新时间及更新状态的具体选择标准进行限定,例如按照第一数据标识的活跃度选择,选择活跃度最小的第一数据标识对应的更新时间及更新状态。
此外,为了减少数据更新次数,在执行将第一数据标识对应的更新状态更新为未更新到数据库状态步骤时,也可以先判断第一数据标识对应的更新状态,当第一数据标识对应的更新状态为已更新到数据库状态时再将第一数据标识对应的更新状态更新为未更新到数据库状态。当第一数据标识对应的更新状态为未更新到数据库状态时,不再更新第一数据标识对应的更新状态。同时为了避免第一数据标识对应的更新状态为未更新到数据库状态时,不再更新第一数据标识对应的更新状态而造成该第一数据标识对应的活跃度不高,而释放该第一表示占用的内存,可以当第一数据标识对应的更新状态为未更新到数据库状态时,增加该第一数据标识对应的活跃度。
此外,在执行完成步骤308后还可以如图4中步骤405所示向数据更新的前端设备102发送更新成功消息。
309:每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库。
每隔预设周期再将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库,可以在减少更新次数的情况下,达到同样的更新效果。例如,对于一个用户的金币数量变化,一个用户也许一分钟获取到10-100次金币,如果按现有的数据更新方式,则需要在一分钟进行10-100次数据更新。但如果按照本实施例提供的方法将一分钟的更新分成两次,即30秒更新一次,则可以将一分钟的10-100次的更新次数减少到两次。
其中,预设周期可以为1分钟、2分钟等等,本实施例不对预设周期的长短进行限定。阈值可以为60秒、30秒等等,本实施例同样不对阈值大小进行限定。此外,关于更新内存中存储的数据的计时方式,本实施例也不做具体限定,包括但不限于通过定时更新进程进行时间统计。
例如,以预设周期为15分钟,阈值为2分钟为例,通过图4中406的定时更新进程定时更新内存,每隔15分钟将内存中存储的更新时间与当前时间的差值达到2分钟且更新状态为未更新到数据库状态的数据更新至数据库,如图4中步骤407。当然,预设周期还可以为其它时间,本实施例不对预设周期的具体数值进行限定。阈值还可以为其它时间,本实施例不对预设周期的具体数值进行限定。
另外,如果将内存中数据更新至数据库的更新时间为预设周期,则在本次将内存中数据更新至数据库后直接进行下一次将内存中数据更新至数据库的步骤;如果将内存中数据更新至数据库的更新时间小于预设周期,则在到达预设周期时结束本次将内存中数据更新至数据库的步骤,直接进行下一次将内存中数据更新至数据库,并向数据更新的前端设备102发送将内存中数据更新至数据库的更新时间大于预设周期的错误报告。
本实施例提供的方法,通过获取数据更新请求后,先将其更新至内存中,再每隔预设时间将内存中的数据同步至数据库中,避免在更新频繁的应用场景中,频繁访问数据库,而给数据库造成比较严重的文件碎片,提高数据库性能。
实施例三
本发明实施例提供了一种数据更新的方法,该方法在通过上述实施例实现对内存及数据库中的数据进行更新后,还可以应用上述实施例提供的方法以更新后的内存及数据库为基础进行数据读取。为了便于理解,结合图1及上述实施例一的内容,以读取用户的金币变化的应用场景为例。其中,待读取的第一数据标识为user_id即ID2,ID2对应的历史数据为ID2的金币数量n2,对本实施例提供的方法进行详细地举例说明。参见图5,本实施例提供的方法流程包括:
501:获取数据读取请求,数据读取请求中携带有第二数据标识;
本实施例不对获取数据读取请求的具体方式进行限定,例如,数据更新的后端设备101通过get接口从数据更新的前端设备102获取数据读取请求。
具体的,如图6所示的数据读取的交互图中的601,数据更新的后端设备101通过get接口从数据更新的前端设备102获取程序请求:基于第二数据标识的读取,其中,数据读取请求中携带ID2及n2。
502:判断是否存储有第二数据标识对应的历史数据,如果未存储有第二数据标识对应的历史数据,则执行步骤503,否则,执行步骤504;
该步骤与上述实施例二中步骤302的步骤原理相同,为了提高数据更新效率,可以先判断是否存储有该数据读取请求中携带的第二数据标识对应的历史数据,如果判断得出未存储有该第二数据标识对应的历史数据,则可以直接返回空值,而无需再执行查询过程,进而节省读取数据的时间,提高读取效率,即直接执行步骤503。对于判断出存储有该第二数据标识对应的历史数据的情况,再执行向内存进行查询的操作,即执行步骤504。也就是说,该步骤502的判断步骤为优选步骤。
本实施例不对判断是否存储有第二数据标识对应的历史数据的判断方法进行限定,具体实施时,在判断是否存储有第二数据标识对应的历史数据之前,可以先获取数据库中已存储的数据对应的数据标识,并预先设置至少两个数据标识列表,将获取到的每个数据标识分别存储至对应的数据标识列表中。基于已经存储的数据标识列表,判断是否存储有第二数据标识对应的历史数据。具体判断过程包括但不限于确定第二数据标识所在的数据标识列表,并在第二数据标识所在的数据标识列表中查询第二数据标识;如果查询到第二数据标识,则确定存储有第二数据标识对应的历史数据,再执行步骤504中查询内存中是否存储有第二数据标识对应的历史数据的步骤。如果未查询到第二数据标识,则确定未存储有第二数据标识对应的历史数据,直接执行步骤503。
其中,将获取到的每个数据标识分别存储至对应的数据标识列表中时,可以采用表单拆分的方式对数据库中已存储的数据对应的数据标识进行存储,包括但不限于按照数据标识与数据标识列表的数量取余的方式将每个数据标识存储至对应的数据标识列表。具体实现方式可参考上述实施例二中步骤302的相关内容,此处不再赘述。
基于上述存储数据标识的方式,判断是否存储有第二数据标识对应的历史数据时,先确定第二数据标识所在的数据标识列表,并在第二数据标识所在的数据标识列表中查询第二数据标识。确定第二数据标识所在的数据标识列表时,也可以按照第二数据标识与数据标识列表数量取余的方式来确定。具体同样可以参考上述实施例二中步骤302的相关内容,此处不再赘述。
此外,还可以将第二数据标识进行哈希映射得到的哈希值对数据标识列表进行拆分。例如,将哈希值在区间(0,3]的第二数据标识存储在table_1的数据标识列表中,将哈希值在区间(3,6]的第二数据标识存储在table_2的数据标识列表中。如果第二数据标识为ID2,则可以将ID2进行哈希映射得到哈希值4,4在区间(3,6]中,确定ID2所在的数据标识列表为table_2,并在table_2中查询ID2。当然,数据标识列表存储方式还可以为其它方式,本实施例不对具体存储方式进行限定。
503:返回空值,结束流程;
504:查询内存中是否存储有第二数据标识对应的历史数据,如果内存中存储有第二数据标识对应的历史数据,则执行步骤505,如果内存中未存储第二数据标识对应的历史数据,则执行步骤506;
本实施例不对查询内存中是否存储有第二数据标识对应的历史数据的具体查询方法进行限定,包括但不限于:在存储第二数据标识及第二数据标识对应的历史数据的哈希结构中查找是否有第二数据标识对应的历史数据。
具体的,如果第二数据标识及第二数据标识对应的历史数据以步骤303中所示user_profile_t结构存储,则查找user_profile_t中是否有user_id为ID2的数据,如果如图6中602第二数据标识对应的历史数据存储在内存,则确定内存中存储有第二数据标识对应的历史数据,且user_id为ID2的user_profile_t中对应的gold_num为ID2对应的历史数据,否则如图6中603第二数据标识对应的历史数据未存储在内存,确定内存中未存储有第二数据标识对应的历史数据。
505:从内存中读取第二数据标识对应的历史数据;
具体的,从内存中读取user_id为ID2的user_profile_t中对应的gold_num,即ID2。
另外,在读取第二数据标识对应的历史数据后,还可以如图6中步骤604所示,将存储的第二数据标识对应的历史数据直接返回给数据更新的前端设备102。
506:从数据库中读取第二数据标识对应的历史数据。
本实施例不对从数据库中读取第二数据标识对应的历史数据的具体获取方法进行限定,包括但不限于:如果数据库加速服务中以DBhepler做数据库和连接池管理,则通过DBhepler从数据存储设备103中存储的数据库中获取第二数据标识对应的历史数据。
具体的,以图6中605读取数据所示,通过DBhepler从数据库中获取ID1对应的历史数据。
另外,从数据库中读取第二数据标识对应的历史数据后,还可以如图6中步骤606所示,将读取的第二数据标识对应的历史数据返回给数据更新的前端设备102。
需要说明的,为了减少从数据库中直接获取数据的频率,在执行本步骤502至步骤505之前,还可以获取数据库中已存储的数据对应的数据标识,并预先设置至少两个数据标识列表,将获取到的每个数据标识分别存储至对应的数据标识列表中。
本实施例不对预先设置至少两个数据标识列表的具体方法进行限定。
例如,预先设置用于存储第二数据标识及第二数据标识对应的历史数据的user_profile_t数据列表,如下user_profile_t表所示,其中user_id为第二数据标识,gold_num为第二数据标识对应的金币数量。
以及如下user_list_t表所示,预先设置用于存储第二数据标识对应的更新时间及第二数据标识对应的更新状态的user_list_t的LRU结构数据列表。其中,user_id为第二数据标识,write为第二数据标识对应的更新状态,changetime为第二数据标识对应的更新时间,pre为LRU链表中该第二数据标识对应的前一第二数据标识,next为LRU链表中该第二数据标识对应的后一第二数据标识。
本实施例提供的方法,获取数据读取请求后,先确定是否存储有待获取的数据,如果有再确定待获取的数据的存储位置,并在该位置获取待获取的数据,避免在更新频繁的应用场景中,频繁访问数据库,而给数据库造成比较严重的文件碎片,提高数据库性能。
实施例四
本发明实施例提供了一种数据更新的装置,参见图7,该装置包括:
第一获取模块701,用于获取数据更新请求,数据更新请求中携带有待更新的第一数据标识及第一数据标识对应的更新数据;
查询模块702,用于查询内存中是否存储有第一数据标识对应的历史数据;
第一更新模块703,用于当内存中存储有第一数据标识对应的历史数据时,根据更新数据更新内存中存储的第一数据标识对应的历史数据;
第二更新模块704,用于记录更新时间,并将第一数据标识对应的更新状态更新为未更新到数据库状态;
第三更新模块705,用于每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库。
参见图8,该装置,还包括:
第二获取模块706,用于当内存中未存储第一数据标识对应的历史数据时,从数据库中获取第一数据标识对应的历史数据;
第一存储模块707,用于将从数据库中获取到的第一数据标识对应的历史数据存储至内存。
参见图9,该装置,还包括:
第三获取模块708,用于获取数据读取请求,数据读取请求中携带有第二数据标识;
查询模块702,还用于查询内存中是否存储有第二数据标识对应的历史数据;
第一读取模块709,用于当内存中存储有第二数据标识对应的历史数据时,从内存中读取第二数据标识对应的历史数据;
第二读取模块710,用于当内存中未存储第二数据标识对应的历史数据时,从数据库中读取第二数据标识对应的历史数据。
参见图10,该装置,还包括:
第四获取模块711,用于获取数据库中已存储的数据对应的数据标识;
设置模块712,用于预先设置至少两个数据标识列表;
第二存储模块713,用于将获取到的每个数据标识分别存储至对应的数据标识列表中;
查询模块702,还用于确定第一数据标识所在的数据标识列表,并在第一数据标识所在的数据标识列表中查询第一数据标识;当查询到第一数据标识时,执行查询内存中是否存储有所述第一数据标识对应的历史数据的步骤;
查询模块702,还用于确定第二数据标识所在的数据标识列表,并在第二数据标识所在的数据标识列表中查询第二数据标识;当查询到第二数据标识时,执行查询内存中是否存储有第二数据标识对应的历史数据的步骤。
参见图11,该装置,还包括:
第三存储模块714,用于当未查询到第一数据标识时,将第一数据标识及第一数据标识对应的更新数据存储至内存;
返回模块715,用于当未查询到第二数据标识时,返回空值。
综上所述,本发明实施例所述设备,通过获取数据更新请求后,先将其更新至内存中,再每隔预设时间将内存中的数据同步至数据库中;同时,获取数据读取请求后,先确定是否存储有待获取的数据,如果有再确定待获取的数据的存储位置,并在该位置获取待获取的数据,避免在更新频繁的应用场景中,频繁访问数据库,而给数据库造成比较严重的文件碎片,提高数据库性能。
需要说明的是:上述实施例提供的数据更新的装置在实现数据更新时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据更新的装置与实现数据更新的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种数据更新的方法,其特征在于,所述方法包括:
获取数据更新请求,所述数据更新请求中携带有待更新的第一数据标识及所述第一数据标识对应的更新数据;
获取数据库中已存储的数据对应的数据标识,并预先设置至少两个数据标识列表,将获取到的每个数据标识分别存储至对应的数据标识列表中;
确定所述第一数据标识所在的数据标识列表,并在所述第一数据标识所在的数据标识列表中查询所述第一数据标识;
如果查询到所述第一数据标识,则执行查询内存中是否存储有所述第一数据标识对应的历史数据的步骤;
如果未查询到所述第一数据标识,则将所述第一数据标识及所述第一数据标识对应的更新数据存储至内存,执行记录更新时间,并将所述第一数据标识对应的更新状态更新为未更新到数据库状态的步骤及后续步骤;
查询内存中是否存储有所述第一数据标识对应的历史数据;
如果内存中存储有所述第一数据标识对应的历史数据,则根据所述更新数据更新内存中存储的所述第一数据标识对应的历史数据,记录更新时间,并将所述第一数据标识对应的更新状态更新为未更新到数据库状态;每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库;
如果内存中未存储所述第一数据标识对应的历史数据,则从数据库中获取所述第一数据标识对应的历史数据;将从数据库中获取到的所述第一数据标识对应的历史数据存储至内存,并执行根据所述更新数据更新内存中存储的所述第一数据标识对应的历史数据的步骤及后续步骤;
所述方法还包括:
获取数据读取请求,所述数据读取请求中携带有第二数据标识;
查询内存中是否存储有所述第二数据标识对应的历史数据;
如果内存中存储有所述第二数据标识对应的历史数据,则从内存中读取所述第二数据标识对应的历史数据;
如果内存中未存储所述第二数据标识对应的历史数据,则从数据库中读取所述第二数据标识对应的历史数据。
2.根据权利要求1所述的方法,其特征在于,所述查询内存中是否存储有所述第二数据标识对应的历史数据之前,还包括:
确定所述第二数据标识所在的数据标识列表,并在所述第二数据标识所在的数据标识列表中查询所述第二数据标识;
如果查询到所述第二数据标识,则执行查询内存中是否存储有所述第二数据标识对应的历史数据的步骤;
如果未查询到所述第二数据标识,则返回空值。
3.一种数据更新的装置,其特征在于,所述装置包括:
第一获取模块,用于获取数据更新请求,所述数据更新请求中携带有待更新的第一数据标识及所述第一数据标识对应的更新数据;
第四获取模块,用于获取数据库中已存储的数据对应的数据标识;
设置模块,用于预先设置至少两个数据标识列表;
第二存储模块,用于将获取到的每个数据标识分别存储至对应的数据标识列表中;
查询模块,用于确定所述第一数据标识所在的数据标识列表,并在所述第一数据标识所在的数据标识列表中查询所述第一数据标识;当查询到所述第一数据标识时,执行查询内存中是否存储有所述第一数据标识对应的历史数据的步骤;
第三存储模块,用于当未查询到所述第一数据标识时,将所述第一数据标识及所述第一数据标识对应的更新数据存储至内存;
所述查询模块,还用于查询内存中是否存储有所述第一数据标识对应的历史数据;
第一更新模块,用于当内存中存储有所述第一数据标识对应的历史数据时,根据所述更新数据更新内存中存储的所述第一数据标识对应的历史数据;
第二更新模块,用于记录更新时间,并将所述第一数据标识对应的更新状态更新为未更新到数据库状态;
第三更新模块,用于每隔预设周期将内存中存储的更新时间与当前时间的差值达到阈值且更新状态为未更新到数据库状态的数据更新至数据库;
第二获取模块,用于当内存中未存储所述第一数据标识对应的历史数据时,从数据库中获取所述第一数据标识对应的历史数据;
第一存储模块,用于将从数据库中获取到的所述第一数据标识对应的历史数据存储至内存;
所述装置还包括:
第三获取模块,用于获取数据读取请求,所述数据读取请求中携带有第二数据标识;
所述查询模块,还用于查询内存中是否存储有所述第二数据标识对应的历史数据;
第一读取模块,用于当内存中存储有所述第二数据标识对应的历史数据时,从内存中读取所述第二数据标识对应的历史数据;
第二读取模块,用于当内存中未存储所述第二数据标识对应的历史数据时,从数据库中读取所述第二数据标识对应的历史数据。
4.根据权利要求3所述的装置,其特征在于,所述查询模块,还用于确定所述第二数据标识所在的数据标识列表,并在所述第二数据标识所在的数据标识列表中查询所述第二数据标识;当查询到所述第二数据标识时,执行查询内存中是否存储有所述第二数据标识对应的历史数据的步骤;
所述装置,还包括:
返回模块,用于当未查询到所述第二数据标识时,返回空值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310747066.2A CN104750740B (zh) | 2013-12-30 | 2013-12-30 | 数据更新的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310747066.2A CN104750740B (zh) | 2013-12-30 | 2013-12-30 | 数据更新的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104750740A CN104750740A (zh) | 2015-07-01 |
CN104750740B true CN104750740B (zh) | 2018-05-08 |
Family
ID=53590437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310747066.2A Active CN104750740B (zh) | 2013-12-30 | 2013-12-30 | 数据更新的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104750740B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106485583B (zh) * | 2015-08-26 | 2020-12-01 | 腾讯科技(北京)有限公司 | 数据更新方法及装置 |
CN106549983B (zh) * | 2015-09-16 | 2020-03-31 | 中国移动通信集团公司 | 一种数据库的访问方法及终端、服务器 |
CN105354322B (zh) * | 2015-11-13 | 2017-07-21 | 广东电网有限责任公司电力科学研究院 | 将电力系统历史数据高效完整同步到综合数据平台的方法 |
CN107515880B (zh) * | 2016-06-17 | 2020-12-22 | 宏碁股份有限公司 | 数据分散处理系统与方法 |
CN106326487B (zh) * | 2016-09-05 | 2019-12-27 | 天脉聚源(北京)科技有限公司 | 一种数据存储方法及装置 |
CN108427684B (zh) * | 2017-02-14 | 2020-12-25 | 华为技术有限公司 | 数据查询方法、装置及计算设备 |
CN107682356B (zh) * | 2017-10-26 | 2020-08-04 | 广州市雷军游乐设备有限公司 | 数据的更新方法及装置、设备以及存储介质 |
CN108282219B (zh) * | 2018-01-31 | 2021-06-29 | 中电福富信息科技有限公司 | 用于车辆卫星定位系统的数据通讯的长链接切换处理方法 |
CN109597818A (zh) * | 2018-11-28 | 2019-04-09 | 优刻得科技股份有限公司 | 数据更新方法、装置、存储介质和设备 |
CN110490581B (zh) * | 2019-07-18 | 2022-09-30 | 拉货宝网络科技有限责任公司 | 一种分布式系统临界数据资源更新方法及系统 |
CN111177736A (zh) * | 2019-07-30 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 一种数据存储和访问的系统、方法和装置 |
CN110909006A (zh) * | 2019-10-15 | 2020-03-24 | 中国平安人寿保险股份有限公司 | 数据同步的方法、装置、计算机设备及存储介质 |
CN110941623A (zh) * | 2019-11-12 | 2020-03-31 | 北京达佳互联信息技术有限公司 | 数据的同步方法及装置 |
CN111614743B (zh) * | 2020-05-14 | 2021-08-17 | 深圳华锐金融技术股份有限公司 | 文件检测方法、装置、计算机设备和存储介质 |
CN115080582A (zh) * | 2022-06-29 | 2022-09-20 | 中电金信软件有限公司 | 一种数据更新方法、装置、电子设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100174863A1 (en) * | 2007-11-30 | 2010-07-08 | Yahoo! Inc. | System for providing scalable in-memory caching for a distributed database |
CN102331986B (zh) * | 2010-07-12 | 2014-07-16 | 阿里巴巴集团控股有限公司 | 一种数据库缓存管理方法及一种数据库服务器 |
CN102024032A (zh) * | 2010-11-29 | 2011-04-20 | 广州明朝网络科技有限公司 | 一种基于Erlang的分布式数据缓存和持久化的方法和系统 |
CN102541927B (zh) * | 2010-12-30 | 2013-11-13 | 北京新媒传信科技有限公司 | 一种实现数据缓存的方法和装置 |
-
2013
- 2013-12-30 CN CN201310747066.2A patent/CN104750740B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN104750740A (zh) | 2015-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104750740B (zh) | 数据更新的方法及装置 | |
CN102147711B (zh) | 一种基于数据内容识别的存储方法及装置 | |
CN107832401B (zh) | 数据库数据访问方法、系统、装置及计算机可读存储介质 | |
CN107644071A (zh) | 缓存更新方法、装置及数据存储系统 | |
CN109690500A (zh) | 使用在以处理器为基础的系统中的空间服务质量(QoS)标记提供异质存储器系统的弹性管理 | |
CN103914462B (zh) | 一种数据存储和查询方法以及装置 | |
CN102298633B (zh) | 一种分布式海量数据排重方法及系统 | |
CN104123238A (zh) | 数据存储方法及装置 | |
CN104281535B (zh) | 一种映射表在内存中的处理方法和装置 | |
CN104112008A (zh) | 一种多表数据关联查询优化方法和装置 | |
WO2018095299A1 (zh) | 一种时序数据管理方法、设备和装置 | |
CN104104717A (zh) | 投放渠道数据统计方法及装置 | |
CN109033360B (zh) | 一种数据查询方法、装置、服务器及存储介质 | |
CN107154957A (zh) | 基于虚拟环负载均衡算法的分布式存储控制方法 | |
CN109213761A (zh) | 一种自由扩展免迁移的分库分表方法 | |
US9235613B2 (en) | Flexible partitioning of data | |
CN101093482A (zh) | 一种大量信息存储和检索的方法 | |
CN108694218A (zh) | 一种数据写入及读取的方法和装置 | |
CN104158744A (zh) | 用于网络处理器的建表和查找方法 | |
CN104657435A (zh) | 一种应用数据的存储管理方法和网络管理系统 | |
CN106970958A (zh) | 一种流文件的查询与存储方法和装置 | |
CN104346458A (zh) | 数据存储方法和存储设备 | |
CN106407191A (zh) | 一种数据处理方法及服务器 | |
CN109597574A (zh) | 分布式数据存储方法、服务器及可读存储介质 | |
CN105468699B (zh) | 去重数据统计方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: Room 810, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080 Patentee after: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building block A room 602 Patentee before: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |