发明内容
有鉴于此,本发明提供了一种海量数据的接收存储方法及系统,可以减少数据接收和存储时的数据丢失问题,提高数据安全性。
为达上述目的,本发明的技术方案具体是这样实现的:
一种海量数据的接收存储方法,该方法包括:
为用户请求分配缓存标识;
将根据用户请求产生的用户数据写入所述缓存标识对应的缓存模块;
当所述缓存模块达到缓存上限时,将所述缓存模块中已缓存的用户数据进行数据入库处理。
较佳地,所述将用户数据写入所述缓存标识对应的缓存模块,包括:
读取所述缓存标识对应的缓存模块的缓存状态值,若所述缓存状态值达到预设的最大值,则将已缓存的用户数据写入数据服务器,清空缓存之后,将所述待缓存的用户数据写入所述缓存模块;若未达到预设的最大值,则对该缓存模块加锁,将待缓存的用户数据写入到该缓存模块后解除锁定。
较佳地,所述数据入库处理包括:
将所述缓存模块中缓存的所有用户数据写入数据服务器中,并清空缓存;
定时将所述数据服务器中保存的用户数据转移到临时数据库;
定时对所述临时数据库中保存的用户数据进行汇总和过滤,并将得到的最终用户数据写入正式数据库。
较佳地,该方法进一步包括:
定时检查所述缓存模块是否正常,若不正常,则将缓存模块将已缓存的用户数据写入数据服务器并清空缓存。
较佳地,所述不正常包括:
缓存的用户数据与预设的结构不同、缓存状态值不在预设的最大值之内、或缓存模块状态异常之中任意一项或多项。
较佳地,所述数据服务器中的用户数据以多个数据文件形式分布在不同硬盘中。
一种海量数据的接收存储系统,该系统包括:接口模块、多个缓存模块和数据存储模块;
所述接口模块,为用户请求分配缓存标识;并根据所述缓存标识,将根据用户请求产生的用户数据写入所述缓存标识对应的缓存模块;当所述缓存模块达到缓存上限时,指令所述缓存模块将已缓存的用户数据转移到所述数据存储模块;
所述缓存模块,用于缓存用户数据;根据所述接口模块的指令,将缓存的所有用户数据转移到所述数据存储模块;
所述数据存储模块,用于对从所述缓存模块接收到的用户数据进行数据入库处理。
较佳地,所述接口模块包括:
标识分配单元,用于接收用户请求,并为用户请求随机分配缓存标识;
缓存状态获取单元,用于读取所述缓存标识对应的缓存模块的缓存状态值;
数据写入单元,若所述缓存状态值达到预设的最大值,则指令所述缓存模块将已缓存的用户数据写入数据存储模块,清空缓存之后,将所述待缓存的用户数据写入所述缓存模块;若未达到预设的最大值,则对该缓存模块加锁,将待缓存的用户数据写入到该缓存模块后解除锁定。
较佳地,所述数据存储模块包括:数据服务器、临时数据库和正式数据库;
所述数据服务器,用于保存所述缓存模块写入的用户数据,并定时将自身保存的用户数据转移到临时数据库;
所述临时数据库,用于保存所述缓存模块写入的用户数据,并定时对自身保存的用户数据进行汇总和过滤,并将得到的最终用户数据写入正式数据库;
所述正式数据库,用于保存所述临时数据库写入的最终用户数据。
较佳地,所述接口模块进一步包括:
缓存检查单元,定时检查所述缓存模块是否正常,若不正常,则指令缓存模块将已缓存的用户数据写入数据服务器并清空缓存。
较佳地,所述缓存检查单元,在所述缓存模块缓存的用户数据与预设的结构不同、缓存状态值不在预设的最大值之内、或缓存模块状态异常之中任意一项或多项发生时,判定所述缓存模块不正常。
较佳地,所述数据服务器中的用户数据以多个数据文件形式分布在不同硬盘中。
由上述技术方案可见,本发明的这种海量数据的接收存储方法及系统,在用户数据的接收到正式存储入库之间对用户数据进行缓存,且同时通过对用户数据分配不同的缓存标识,从而将用户的数据均衡分配到不同的缓存模块中缓存,从而减少高并发用户请求可能造成的数据拥挤丢失。更进一步地,通过将用户数据形成的数据库文件分布在不同存储介质上,可以降低同一存储介质的并发IO数量,减少存储过程的延迟和卡死,提高数据安全性。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明主要是在用户数据的接收到正式存储入库之间对用户数据进行缓存,且同时通过对用户数据分配不同的缓存标识,从而将用户的数据均衡分配到不同的缓存模块中缓存,从而减少高并发用户请求可能造成的数据拥挤丢失。更进一步地,通过将用户数据形成的数据库文件分布在不同存储介质上,可以降低同一存储介质的并发IO数量,减少存储过程的延迟和卡死,提高数据安全性。
图1为本发明的海量数据接收存储方法流程图,如图1所示,该方法包括如下步骤:
步骤101,为用户请求分配缓存标识;
当用户请求数据时,对用户的请求分配缓存标识,具体分配方法可以随机分配,或者按照预设的规则分配,例如有9个缓存模块,则分配时,可以从第一个缓存模块开始按顺序分配,具体分配方式任意,且缓存标识的具体形式任意,数字、字母等都可以。
步骤102,将根据用户请求产生的用户数据写入所述缓存标识对应的缓存模块;
具体写入时,可以根据缓存模块的状态来写入,如果缓存已满,则需要先将缓存模块内的已缓存的用户数据转移并清空缓存后再写入;具体例如,可以先读取所述缓存标识对应的缓存模块的缓存状态值,若所述缓存状态值达到预设的最大值,则将已缓存的用户数据写入数据服务器,清空缓存之后,将所述待缓存的用户数据写入所述缓存模块;若未达到预设的最大值,则对该缓存模块加锁,将待缓存的用户数据写入到该缓存模块后解除锁定。加锁的作用是避免同时操作缓存模块,造成数据丢失。
步骤103,当所述缓存模块达到缓存上限时,将所述缓存模块中已缓存的用户数据进行数据入库处理。
具体入库处理即将缓存的用户数据保存到正式的数据库中,在入库过程可以将用户数据直接入库,也可以在入库之前也进一步对数据进行缓存和处理后再入库,例如可以先将所述缓存模块中已缓存的用户数据写入数据服务器,并清空缓存;
数据服务器定时将从缓存模块接收到的用户数据转移到临时数据库;
并定时对所述临时数据库中保存的用户数据进行汇总和过滤,并将得到的最终用户数据写入正式数据库。
另外,为了进一步减少存储介质的并发IO,所述数据服务器中的用户数据可以以多个数据文件形式分布在不同的存储介质,如硬盘、SSD中。
为进一步提高数据安全性,避免缓存问题,还可以定时检查所述缓存模块是否正常,若不正常,则将缓存模块已缓存的用户数据写入数据服务器并清空缓存。不正常可以包括:缓存的用户数据与预设的结构不同、缓存状态值不在预设的最大值之内、或缓存模块状态异常之中任意一项或多项。
另外,对于web应用,用户在请求网址时,还可以进一步在域名解析时,将使用不同网络的用户分流到对应网络内的web应用服务器,从而进一步分流用户请求。
本发明还提供一种海量数据的接收存储系统,如图2所示,该系统包括:接口模块201、多个缓存模块202和数据存储模块203;
所述接口模块201,为用户请求分配缓存标识;并根据所述缓存标识,将根据用户请求产生的用户数据写入所述缓存标识对应的缓存模块202;当所述缓存模块达到缓存上限时,指令所述缓存模块将已缓存的用户数据转移到所述数据存储模块203;
所述缓存模块202,用于缓存用户数据;根据所述接口模块的指令,将缓存的所有用户数据转移到所述数据存储模块203;
所述数据存储模块203,用于对从所述缓存模块202接收到的用户数据进行数据入库处理。
其中,所述接口模块201如图3所示,包括:
标识分配单元301,用于接收用户请求,并为用户请求随机分配缓存标识;
缓存状态获取单元302,与所述标识分配单元301相连,用于读取所述缓存标识对应的缓存模块202的缓存状态值;
数据写入单元303,与所述缓存状态获取单元302相连,若所述缓存状态值达到预设的最大值,则指令所述缓存模块202将已缓存的用户数据写入数据存储模块203,清空缓存之后,将待缓存的用户数据写入缓存模块202;若未达到预设的最大值,则对该缓存模块202加锁,将数据写入到该缓存模块202后解除锁定。
作为另一实施例,所述接口模块201可以进一步包括:
缓存检查单元304,定时检查所述缓存模块202是否正常,若不正常,则指令缓存模块202将已缓存的用户数据写入数据存储模块203并清空缓存。
其中,所述缓存检查单元304,在所述缓存模块202缓存的用户数据与预设的结构不同、缓存状态值不在预设的最大值之内、或缓存模块状态异常之中任意一项或多项发生时,判定所述缓存模块202不正常,具体检查缓存可以通过计划任务完成。
所述数据存储模块203如图4所示,包括:数据服务器401、临时数据库402和正式数据库403;
所述数据服务器401,用于保存所述缓存模块202写入的用户数据,并定时将自身保存的用户数据转移到临时数据库402;较佳地,所述数据服务器401中的用户数据以多个数据文件形式分布在不同硬盘中。
所述临时数据库402,用于保存所述缓存模块202写入的用户数据,并定时对自身保存的用户数据进行汇总和过滤,并将得到的最终用户数据写入正式数据库403;
所述正式数据库403,用于保存所述临时数据库402写入的最终用户数据。
对于web应用,上述接口模块201可以通过web程序如PHP程序实现,多个缓存模块202可以通过一台服务器启动多线程实现,也可以通过多台服务器如Memcached服务器实现。数据存储模块203则可以通过数据库服务器如sqlserver服务器实现。
另外,与方法实施例相应地,接口模块201也可以有多个,分布在不同网络内,用户在请求网址时,可以进一步在域名解析时,将使用不同网络的用户分流到对应网络内的接口模块如web服务器,从而进一步分流用户请求。
由上述的实施例可见,本发明的这种海量数据的接收存储方法及系统,在用户数据的接收到正式存储入库之间对用户数据进行缓存,且同时通过对用户数据分配不同的缓存标识,从而将用户的数据均衡分配到不同的缓存模块中缓存,从而减少高并发用户请求可能造成的数据拥挤丢失。更进一步地,通过将用户数据形成的数据库文件分布在不同存储介质上,可以降低同一存储介质的并发IO数量,减少存储过程的延迟和卡死,提高数据安全性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。