CN103885887A - 用户数据存储方法、读取方法及*** - Google Patents
用户数据存储方法、读取方法及*** Download PDFInfo
- Publication number
- CN103885887A CN103885887A CN201210564064.5A CN201210564064A CN103885887A CN 103885887 A CN103885887 A CN 103885887A CN 201210564064 A CN201210564064 A CN 201210564064A CN 103885887 A CN103885887 A CN 103885887A
- Authority
- CN
- China
- Prior art keywords
- user data
- user
- basic document
- data
- storage
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及互联网海量数据存储技术领域,公开了一种用户数据存储方法,包括步骤:将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储,所述基础文件存储预定用户数的用户数据;在所述基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引。还公开了一种用户数据存储***、用户数据读取方法及***。本发明通过采用基础文件来存储预定用户数的用户数据,且用户数据连续的存储在基础文件中,从而提高了数据的查询或读取的效率;且不需要像现有技术一样维护全量用户的第一个数据节点信息,避免了额外的内存资源开销,降低了运维成本。
Description
技术领域
本发明涉及互联网海量数据存储技术领域,特别涉及一种用户数据存储方法、读取方法及***。
背景技术
用户原创内容(User Generated Content,UGC)是一种用户使用互联网的新方式,即由原来的以下载为主变成下载和上传并重。社区网络、视频分享和博客等都是UGC的主要应用形式。随着全球互联网业务的不断发展,UGC业务正在日渐崛起,引起了业界的广泛关注。
由于数据是用户产生的,海量的用户催生出海量的数据,同时又会带来海量的读写量。如何有效地存储这些用户数据,如何提供高并发的读写服务是技术领域必然面临的问题。
现有技术中将用户数据以数据文件的形式存储,所有文件都是串起来的,组成一个链,文件个数越多,链就越长。一个文件由若干个“节点”组成,每个节点代表一个数据单元,每个数据单元只能存储一个用户的数据。每个用户的数据由若干个不连续的节点组成,一个用户的所有节点在逻辑上是头尾相连的,组成一个链。也就是说,一个文件里有多个节点,且可能存放多个用户的数据。一个用户的数据是由多个不连续的节点组成,也就是说一个用户的数据可能分布在多个文件中。其文件存储结构示意图如图1所示,内存索引中标记所有用户在文件中第一个节点的位置。一次读请求的处理逻辑是:先读取内存索引,获取用户在文件中的第一个节点的位置。找到该节点获取该节点的数据,如果满足读取条件则返回,否则通过第一个节点,继续找第二个节点的数据(每个节点都有指向下一个节点位置的信息),依此类推,直到用户所有节点都读取完毕或者满足读取条件为止。
上述用户数据的存储方法具有如下缺陷:
1、若每个文件大小为2GB,随着时间的推移,数据量越来越多,文件个数也越来越多,用户的数据也越来越长,用户数据分布的文件数会越来越多,读取一个用户的数据可能要打开操作多个数据文件,处理的复杂度是O(n),这样会导致互联网产品运营成本高、数据查询效率低、服务质量差;
2、内存索引保存用户的第一个节点的数据,如果内存索引里的数据丢失,将丢失用户的第一个节点的信息,也就找不到后继节点的位置,那用户的数据也将丢失;
3、内存索引需要保存全量用户的第一条节点信息,而用户数又非常多,这需要消耗非常大的内存。
尤其是对于微博数据,海量用户频繁地读取、更新微博数据,上述缺陷更加明显,在时间和空间上随着用户量的增加而剧增。
如果能有一种简单、高效、低成本的方法,将极大地缩减运维复杂度以及成本,也能为以后类似的服务模型提供一种新的思路。
发明内容
本发明的目的在于提供一种用户数据存储方法及***,旨在解决海量用户数据在存储时资源消耗大、运维成本高及查询时效率低的问题。
为解决上述技术问题,本发明提供了一种用户数据存储方法,包括步骤:
将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储,所述基础文件存储预定用户数的用户数据;
在所述基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引。
其中,将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储的步骤具体包括:
通过用户ID计算存储所述用户的用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1,/为整除运算;
若该基础文件已创建,则将所述用户数据连续存储在基础文件的相应区域;若该基础文件未创建,则创建该基础文件,并将所述用户数据连续存储在基础文件中。
其中,在所述基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引的步骤具体包括:
通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,%为取模运算;
将所述位置索引存储在基础文件的头文件的地址偏移所在的存储单元。
其中,所述用户数据按时间顺序有序存储,存储用户数据时同时存储该用户数据被存储时的时间信息,当连续存储的用户数据的数据量超过预定量时,按所述预定量的用户数据划分一个逻辑区块,并将该逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系作为所述位置索引存储在所述文件头中。
其中,将所述用户数据存储在所述基础文件的文件体中时,若用户数据的大小超过预定阈值,则创建扩展文件,将所述用户数据迁移到所述扩展文件中存储,并在所述存储位置记录所述用户数据在所述扩展文件中的地址信息。
其中,所述扩展文件包括一个或多个用户的用户数据。
本发明还提供了一种用户数据存储***,包括:
用户数据存储模块,用于将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储,所述基础文件存储预定用户数的用户数据;
位置索引记录模块,用于在所述基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引。
其中,所述用户数据存储模块具体包括:
基础文件ID计算模块,用于通过用户ID计算存储所述用户的用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1;
判断存储模块,用于在该基础文件已创建时将所述用户数据连续存储在基础文件的相应区域;在未创建时创建该基础文件,并将所述用户数据连续存储在基础文件中。
其中,所述位置索引记录模块具体包括:
地址偏移计算模块,用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数;
位置索引存储模块,用于将所述位置索引存储在基础文件的头文件的地址偏移所在的存储单元。
其中,还包括:逻辑区块划分模块,用于当连续存储的用户数据的数据量超过预定量时,按所述预定量的用户数据划分一个逻辑区块,并将该逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系作为所述位置索引存储在所述文件头中,所述用户数据按时间顺序有序存储,存储用户数据时同时存储该用户数据被存储时的时间信息。
其中,还包括:扩展文件创建模块,用于当存储的用户数据的大小超过预定阈值时创建扩展文件,将所述用户数据迁移到所述扩展文件中存储,并在所述存储位置记录所述用户数据在所述扩展文件中的地址信息。
本发明还提供了一种用户数据读取方法,读取步骤包括:
定位指向用户数据的位置索引所在的基础文件,并将所述基础文件加载到内存,所述基础文件包括用于存储用户数据的文件体和用于存储用户数据在基础文件中的存储位置的位置索引的文件头;
查询所述位置索引,定位用户的用户数据所在的存储位置;
从所述存储位置读取所述用户数据。
其中,定位指向用户数据的位置索引所在的基础文件的具体方式为:
通过用户ID计算存储所述用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1。
其中,查询所述位置索引,定位用户的用户数据所在的存储位置的具体方式为:
通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,从所述地址偏移所在的存储单元读取所述位置索引。
其中,查询所述位置索引,定位用户的用户数据所在的存储位置的具体方式为:
通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,根据用户设定的时间或时间段从所述地址偏移所在的存储单元记录的逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系表中读取与所述时间或时间段对应的逻辑区块的起始地址及结尾地址。
其中,从所述存储位置读取所述用户数据具体方式为:
若位置索引所指的基础文件中的存储位置存储有用户数据,则直接读取所述用户数据;若位置索引所指的基础文件中的存储位置存储的是地址信息,则从地址信息所指向的扩展文件中读取所述用户数据,读取用户数据后,从读取的用户数据中筛选所需的数据。
本发明还提供了一种用户数据读取***,包括:
基础文件定位模块,用于定位指向用户数据的位置索引所在的基础文件,并将所述基础文件加载到内存,所述基础文件包括用于存储用户数据的文件体和用于存储用户数据在基础文件中的存储位置的位置索引的文件头;
存储位置定位模块,用于查询所述位置索引,定位用户的用户数据所在的存储位置;
用户数据读取模块,用于从所述存储位置读取所述用户数据。
其中,所述基础文件定位模块具体用于通过用户ID计算存储所述用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1。
其中,所述存储位置定位模块具体用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,从所述地址偏移所在的存储单元读取所述位置索引。
其中,所述存储位置定位模块具体用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,根据用户设定的时间或时间段从所述地址偏移所在的存储单元记录的逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系表中读取与所述时间或时间段对应的逻辑区块的起始地址及结尾地址。
其中,所述用户数据读取模块具体用于若位置索引所指的基础文件中的存储位置存储有用户数据,则直接读取所述用户数据;若位置索引所指的基础文件中的存储位置存储的是地址信息,则从地址信息所指向的扩展文件中读取所述用户数据,读取用户数据后,从读取的用户数据中筛选所需的数据。
本发明采用基础文件存储用户数据,每个用户的数据连续的存储在基础文件中,从而提高了数据的查询或读取的效率;且不需要像现有技术一样维护全量用户的第一个数据节点信息,避免了额外的内存资源开销,降低了运维成本。
附图说明
图1是现有技术中的用户数据文件结构示意图;
图2是本发明实施例的一种用户数据存储方法流程图;
图3是按图2中方法建立的用户数据文件结构示意图;
图4是本发明实施例的一种用户数据存储***结构示意图;
图5是本发明实施例的一种用户数据读取方法流程图;
图6是本发明实施例的一种用户数据读取***结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明的方法适用于互联网上海量用户数据的存储,例如微博数据的存储,在微博中,用户的个人页信息会显示这个用户发表的微博,以及用户的收件箱存储用户收到的微博。内存存储只能有限存储用户最新的若干条(约200条左右),而文件存储需要全量存储这个用户的所有数据。当用户数据量较多时,就需要特别的文件存储结构来存储这个用户的数据。如图2所示,为本发明实施例的用户数据存储方法流程图,包括:
步骤S201,将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储,以方便用户数据的读取,而且该基础文件存储预定用户数的用户数据。本实施例中按10万个用户(该预定用户数可根据实际的总用户数和可允许的基础文件的大小来确定)为一组,即一个基础文件存储10万个用户的数据。
当用户上传数据时,通过该用户的用户ID(用户ID唯一标识一个用户,通常为数字,若不为数字也可以将字符转换成二进制数)计算存储其用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1,/为整除运算。通常基础文件也以基础文件ID命名。
由于一个基础文件存储10万个用户的用户数据,当某用户上传数据时,其相应的基础文件可能已创建或还未创建。若该基础文件已创建,则将用户数据连续存储在基础文件的相应区域;若该基础文件未创建,则创建该基础文件,并将用户数据连续存储在基础文件中。
其中,基础文件中存储某个用户的用户数据的相应区域可以是预先按用户ID的排序划分的一定大小存储区域,也可以是一开始连续存储每个用户的用户数据,当某一用户新上传数据时,找到存储其数据的相应区域的末尾,***新上传的数据,然后向后移动后面用户的用户数据。存储时为了节省存储空间采用紧缩存储的方式将不同的用户的数据依次存储在基础文件中。
用户随机上传一条数据的过程通常如下:先将这条数据记录在内存当中,此时可以实时地对外提供对这条数据的读取与修改操作;然后将这条操作记录追加写入binlog文件(binlog文件和基础文件的区别是:binlog文件记录的是操作,而基础文件是用户真正的数据)末尾;最后周期性地从binlog文件指定位置开始读取操作记录,将相同用户的操作合并起来,与内存中原有的数据进行合并,这样可以生成新的用户数据,并将新的用户数据存储在基础文件中。
步骤S202,在基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引。位置索引用于标识该用户数据存储在基础文件中的地址段,可以通过起始地址和终止地址来标识,还可以通过起始地址和当前数据长度来标识。本实施例中记录位置索引的方式如下:
通过用户ID计算基础文件的头文件中的存储该用户的用户数据的位置索引的地址偏移,地址偏移=用户ID%预定用户数,%为取模运算。将位置索引存储在基础文件的头文件的地址偏移所在的存储单元。
本实施例采用上述基础文件来存储预定数量的用户数据,且每个用户的用户数据连续的存储在基础文件中,而不是分布在不同的文件中,可以一次性查询或读取用户数据,其复杂度为O(1),提高了数据的查询或读取的效率;且不需要像现有技术一样维护全量用户的第一个数据节点信息,避免了额外的内存资源开销,降低了运维成本;另外,其基础文件自身包含了用户数据的索引,不再需要内存索引,避免了服务器***掉电内存索引丢失而导致的用户数据丢失的现象。
当用户数据量较小时,来读取这个用户数据是一次性全部读取,然后再在这些用户数据里筛选(如:按用户输入的关键词查找)出需要的数据。当用户的数据量较大时,例如微博数据,即当用户的发表微博比较频繁,数据量较大的情况下(超过3000条),一次性全部读取这个用户的微博数据显然需要耗费较大的时间和空间资源。
进一步地,为了便于后续快速地读取所需的用户数据,用户数据量小的情况下与用户数据量大的情况下采用不同的存储方式。本实施例中,用户数据按时间顺序有序存储,存储用户数据时同时存储该用户数据被存储时的时间信息。当连续存储的用户数据的数据量超过预定量(对于微博数据为3000条以上)时,按预定量的用户数据划分一个逻辑区块,并将该逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系作为该逻辑区块的位置索引存储在所述文件头中。这样,在查找数据时可根据用户设定的时间或时间段找到对应的逻辑区块,再从该逻辑区块中筛选出所需的用户数据,而不是读取整个用户数据,在其中去查找,从而加快读取速度。
由于后续读取用户数据时,需要先读取基础文件,即将基础文件加载到内存。为了避免基础文件过大,影响加载速度,进一步地,当某个用户的用户数据大小超过预定阈值时,则创建扩展文件,并将该用户数据迁移到扩展文件中存储,并在基础文件中原来存储用户数据的存储位置记录用户数据在扩展文件中的地址段。对于按逻辑区块的存储方式,基础文件中原来存储用户数据的存储位置记录用户数据在扩展文件中的各个逻辑区块的地址段。
按上述用户数据存储方法形成的用户数据文件存储结构如图3所示,一个基础文件对应一个或多个扩展文件,也可以没有扩展文件。其中扩展文件可以包括一个或多个用户的用户数据。
其中,预定阈值可根据实际情况来设定,如:对于文本数据,优选设为2GB~4GB。2GB~4GB可满足用户存储大量的用户数据,因此可保证用户数据都连续地存储在基础文件中,而且几乎不需要或只需要较少的扩展文件,从而提高了用户数据的读取速度,降低了运维成本。对于大于预定阈值的数据则为其创建扩展文件,优选地,为了方便维护管理,一个扩展文件只存储一个用户的用户数据。
本发明还提供了一种用户数据文件结构建立***,如图4所示,包括:用户数据存储模块401及位置索引记录模块402。
用户数据存储模块401用于将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储,基础文件存储预定用户数的用户数据。
位置索引记录模块402用于在基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引。
其中,用户数据存储模块401包括:
基础文件ID计算模块,用于通过用户ID计算存储所述用户的用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1;
判断存储模块,用于在该基础文件已创建时将所述用户数据连续存储在基础文件的相应区域;在未创建时创建该基础文件,并将所述用户数据连续存储在基础文件中。
其中,位置索引记录模块402包括:
地址偏移计算模块,用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数;
位置索引存储模块,用于将所述位置索引存储在基础文件的头文件的地址偏移所在的存储单元。
进一步地,该***还包括:逻辑区块划分模块,用于当连续存储的用户数据的数据量超过预定量时,按所述预定量的用户数据划分一个逻辑区块,并将该逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系作为所述位置索引存储在所述文件头中,所述用户数据按时间顺序有序存储,存储用户数据时同时存储该用户数据被存储时的时间信息。
进一步地,该***还包括扩展文件创建模块,用于当存储的用户数据的大小超过预定阈值时创建扩展文件,将所述用户数据迁移到所述扩展文件中存储,并在所述存储位置记录所述用户数据在所述扩展文件中的地址信息。
基于上述用户数据存储方法对应的用户数据读取方法如图5所示,包括:
步骤S501,定位指向用户数据的位置索引所在的基础文件,并将所述基础文件加载到内存。当用户请求读取数据时,通过用户ID计算存储用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1,从而定位存储该用户的用户数据的基础文件。
步骤S502,查询位置索引,定位用户的用户数据所在的存储位置。通过用户ID计算基础文件的头文件中的存储位置索引的地址偏移,地址偏移=用户ID%预定用户数。得到地址偏移后便可从该地址偏移所在的存储单元中获取存储实际用户数据的存储位置的地址。
对应于用户数据量较大时的存储方式,该步骤S502通过用户ID计算基础文件的头文件中的存储位置索引的地址偏移,地址偏移=用户ID%预定用户数,根据用户设定的时间或时间段从地址偏移所在的存储单元记录的逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系表中读取与时间或时间段对应的逻辑区块的起始地址及结尾地址。
需要说明的是与用户设定的时间或时间段对应的逻辑区块可能不止一个,如:在某段很短的时间数据量可能很大,可能超出预定的数据量(如3000条微博数据),或时间段的起始时间和终止时间本身就跨越了不止一个逻辑区块,这时,将该时间或时间段对应的逻辑区块全部读出。用户可以控制时间参数来对应较少的逻辑区块。由于只读取一个或几个少量的逻辑区块,在后续的步骤S503中,只在少量的逻辑区块中的数据中筛选所需的数据,从而提高了用户数据的读取效率。用户还可以通过只设定时间参数,提取该时间参数对应的用户数据。
步骤S503,从存储位置读取用户数据。在读取时,若位置索引所指的基础文件中的存储位置存储有用户数据,则直接读取用户数据;若位置索引所指的基础文件中的存储位置存储的是地址信息,则从地址信息所指向的扩展文件中读取用户数据。读取用户数据后,从读取的用户数据中筛选(如:根据用户指定的关键词查询)所需的数据。
由于采用了上述的基础文件加扩展文件的用户数据存储结构,其用户数据读取速度大大提高。
本发明还提供了一种用户数据读取***,如图6所示,包括:基础文件定位模块601、存储位置定位模块602及用户数据读取模块603。
基础文件定位模块601用于定位指向用户数据的位置索引所在的基础文件,并将所述基础文件加载到内存,具体用于通过用户ID计算存储所述用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1,从而得到基础文件ID。
存储位置定位模块602用于查询所述位置索引,定位用户的用户数据所在的存储位置,具体通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,从所述地址偏移所在的存储单元读取所述位置索引。
对于用户数据量较大的情况,存储位置定位模块602具体用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,根据用户设定的时间或时间段从所述地址偏移所在的存储单元记录的逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系表中读取与所述时间或时间段对应的逻辑区块的起始地址及结尾地址。
用户数据读取模块603用于从所述存储位置读取所述用户数据。该用户数据读取模块603在读取用户数据时,若位置索引所指的基础文件中的存储位置存储有用户数据,则直接读取所述用户数据;若位置索引所指的基础文件中的存储位置存储的是地址信息,则从地址信息所指向的扩展文件中读取所述用户数据,读取用户数据后,从读取的用户数据中筛选所需的数据。
本发明的用户数据存储方法、读取方法及***可以广泛用于海量用户对用户数据进行存储及读取的场景,如:微博用户对微博数据的存储及读取。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (21)
1.一种用户数据存储方法,其特征在于,包括步骤:
将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储,所述基础文件存储预定用户数的用户数据;
在所述基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引。
2.如权利要求1所述的用户数据存储方法,其特征在于,将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储的步骤具体包括:
通过用户ID计算存储所述用户的用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1,/为整除运算;
若该基础文件已创建,则将所述用户数据连续存储在基础文件的相应区域;若该基础文件未创建,则创建该基础文件,并将所述用户数据连续存储在基础文件中。
3.如权利要求1所述的用户数据存储方法,其特征在于,在所述基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引的步骤具体包括:
通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,%为取模运算;
将所述位置索引存储在基础文件的头文件的地址偏移所在的存储单元。
4.如权利要求1所述的用户数据存储方法,其特征在于,所述用户数据按时间顺序有序存储,存储用户数据时同时存储该用户数据被存储时的时间信息,当连续存储的用户数据的数据量超过预定量时,按所述预定量的用户数据划分一个逻辑区块,并将该逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系作为所述位置索引存储在所述文件头中。
5.如权利要求1~4中任一项所述的用户数据存储方法,其特征在于,将所述用户数据存储在所述基础文件的文件体中时,若用户数据的大小超过预定阈值,则创建扩展文件,将所述用户数据迁移到所述扩展文件中存储,并在所述存储位置记录所述用户数据在所述扩展文件中的地址信息。
6.如权利要求5所述的用户数据存储方法,其特征在于,所述扩展文件包括一个或多个用户的用户数据。
7.一种用户数据存储***,其特征在于,包括:
用户数据存储模块,用于将用户的用户数据存储在预先创建的基础文件的文件体中,使同一用户的用户数据连续存储,所述基础文件存储预定用户数的用户数据;
位置索引记录模块,用于在所述基础文件的文件头中记录用户数据在基础文件中的存储位置的位置索引。
8.如权利要求7所述的用户数据存储***,其特征在于,所述用户数据存储模块具体包括:
基础文件ID计算模块,用于通过用户ID计算存储所述用户的用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1;
判断存储模块,用于在该基础文件已创建时将所述用户数据连续存储在基础文件的相应区域;在未创建时创建该基础文件,并将所述用户数据连续存储在基础文件中。
9.如权利要求7所述的用户数据存储***,其特征在于,所述位置索引记录模块具体包括:
地址偏移计算模块,用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数;
位置索引存储模块,用于将所述位置索引存储在基础文件的头文件的地址偏移所在的存储单元。
10.如权利要求7所述的用户数据存储***,其特征在于,还包括:逻辑区块划分模块,用于当连续存储的用户数据的数据量超过预定量时,按所述预定量的用户数据划分一个逻辑区块,并将该逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系作为所述位置索引存储在所述文件头中,所述用户数据按时间顺序有序存储,存储用户数据时同时存储该用户数据被存储时的时间信息。
11.如权利要求7~10中任一项所述的用户数据存储***,其特征在于,还包括:扩展文件创建模块,用于当存储的用户数据的大小超过预定阈值时创建扩展文件,将所述用户数据迁移到所述扩展文件中存储,并在所述存储位置记录所述用户数据在所述扩展文件中的地址信息。
12.一种用户数据读取方法,其特征在于,读取步骤包括:
定位指向用户数据的位置索引所在的基础文件,并将所述基础文件加载到内存,所述基础文件包括用于存储用户数据的文件体和用于存储用户数据在基础文件中的存储位置的位置索引的文件头;
查询所述位置索引,定位用户的用户数据所在的存储位置;
从所述存储位置读取所述用户数据。
13.如权利要求12所述的用户数据读取方法,其特征在于,定位指向用户数据的位置索引所在的基础文件的具体方式为:
通过用户ID计算存储所述用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1。
14.如权利要求12所述的用户数据读取方法,其特征在于,查询所述位置索引,定位用户的用户数据所在的存储位置的具体方式为:
通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,从所述地址偏移所在的存储单元读取所述位置索引。
15.如权利要求12所述的用户数据读取方法,其特征在于,查询所述位置索引,定位用户的用户数据所在的存储位置的具体方式为:
通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,根据用户设定的时间或时间段从所述地址偏移所在的存储单元记录的逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系表中读取与所述时间或时间段对应的逻辑区块的起始地址及结尾地址。
16.如权利要求12~15中任一项所述的用户数据读取方法,其特征在于,从所述存储位置读取所述用户数据具体方式为:
若位置索引所指的基础文件中的存储位置存储有用户数据,则直接读取所述用户数据;若位置索引所指的基础文件中的存储位置存储的是地址信息,则从地址信息所指向的扩展文件中读取所述用户数据,读取用户数据后,从读取的用户数据中筛选所需的数据。
17.一种用户数据读取***,其特征在于,包括:
基础文件定位模块,用于定位指向用户数据的位置索引所在的基础文件,并将所述基础文件加载到内存,所述基础文件包括用于存储用户数据的文件体和用于存储用户数据在基础文件中的存储位置的位置索引的文件头;
存储位置定位模块,用于查询所述位置索引,定位用户的用户数据所在的存储位置;
用户数据读取模块,用于从所述存储位置读取所述用户数据。
18.如权利要求17所述的用户数据读取***,其特征在于,所述基础文件定位模块具体用于通过用户ID计算存储所述用户数据的基础文件ID,基础文件ID=(用户ID/预定用户数)+1。
19.如权利要求17所述的用户数据读取***,其特征在于,所述存储位置定位模块具体用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,从所述地址偏移所在的存储单元读取所述位置索引。
20.如权利要求17所述的用户数据读取方法,其特征在于,所述存储位置定位模块具体用于通过用户ID计算所述基础文件的头文件中的存储所述位置索引的地址偏移,地址偏移=用户ID%预定用户数,根据用户设定的时间或时间段从所述地址偏移所在的存储单元记录的逻辑区块的起始用户数据的时间信息、结尾用户数据的时间、起始地址及结尾地址的映射关系表中读取与所述时间或时间段对应的逻辑区块的起始地址及结尾地址。
21.如权利要求17~20中任一项所述的用户数据读取***,其特征在于,所述用户数据读取模块具体用于若位置索引所指的基础文件中的存储位置存储有用户数据,则直接读取所述用户数据;若位置索引所指的基础文件中的存储位置存储的是地址信息,则从地址信息所指向的扩展文件中读取所述用户数据,读取用户数据后,从读取的用户数据中筛选所需的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210564064.5A CN103885887B (zh) | 2012-12-21 | 2012-12-21 | 用户数据存储方法、读取方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210564064.5A CN103885887B (zh) | 2012-12-21 | 2012-12-21 | 用户数据存储方法、读取方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103885887A true CN103885887A (zh) | 2014-06-25 |
CN103885887B CN103885887B (zh) | 2018-07-27 |
Family
ID=50954795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210564064.5A Active CN103885887B (zh) | 2012-12-21 | 2012-12-21 | 用户数据存储方法、读取方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103885887B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104346458A (zh) * | 2014-10-31 | 2015-02-11 | 易准科技发展(上海)有限公司 | 数据存储方法和存储设备 |
CN104484332A (zh) * | 2014-11-11 | 2015-04-01 | 珠海天琴信息科技有限公司 | 一种嵌入式***中读写数据的方法及装置 |
CN105488225A (zh) * | 2015-12-31 | 2016-04-13 | 新浪网技术(中国)有限公司 | PaaS***中hbase数据导出方法及装置 |
CN106547784A (zh) * | 2015-09-22 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 一种数据拆分存储方法及装置 |
CN107085900A (zh) * | 2017-03-22 | 2017-08-22 | 百富计算机技术(深圳)有限公司 | 数据处理方法、装置、***及pos终端 |
CN109992535A (zh) * | 2017-12-29 | 2019-07-09 | 华为技术有限公司 | 一种存储控制方法、装置和*** |
WO2019149261A1 (zh) * | 2018-02-01 | 2019-08-08 | 中兴通讯股份有限公司 | 分布式文件***的文件存储方法及分布式文件*** |
CN110109865A (zh) * | 2019-05-07 | 2019-08-09 | 苏州浪潮智能科技有限公司 | 一种数据存储方法、装置、设备及可读存储介质 |
CN115630655A (zh) * | 2022-12-22 | 2023-01-20 | 星汉智能科技股份有限公司 | 读取sim卡的记录文件的方法、***及可读存储介质 |
WO2023143099A1 (zh) * | 2022-01-29 | 2023-08-03 | 华为技术有限公司 | 一种数据聚合方法及计算*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101175247A (zh) * | 2007-09-28 | 2008-05-07 | 中兴通讯股份有限公司 | 一种实现用户数据集中存放和使用的方法 |
CN101620702A (zh) * | 2008-06-30 | 2010-01-06 | ***通信集团黑龙江有限公司 | 一种出账处理方法、装置及*** |
US20100268820A1 (en) * | 2008-02-05 | 2010-10-21 | Huawei Technologies Co., Ltd. | User data server system, method and apparatus |
CN102694824A (zh) * | 2011-03-22 | 2012-09-26 | ***通信集团公司 | 一种用户数据存储***及其数据访问方法 |
CN102799628A (zh) * | 2012-06-21 | 2012-11-28 | 新浪网技术(中国)有限公司 | 在key-value数据库中进行数据分区的方法和装置 |
CN102810092A (zh) * | 2011-05-31 | 2012-12-05 | 腾讯科技(深圳)有限公司 | 数据读写方法及*** |
-
2012
- 2012-12-21 CN CN201210564064.5A patent/CN103885887B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101175247A (zh) * | 2007-09-28 | 2008-05-07 | 中兴通讯股份有限公司 | 一种实现用户数据集中存放和使用的方法 |
US20100268820A1 (en) * | 2008-02-05 | 2010-10-21 | Huawei Technologies Co., Ltd. | User data server system, method and apparatus |
CN101620702A (zh) * | 2008-06-30 | 2010-01-06 | ***通信集团黑龙江有限公司 | 一种出账处理方法、装置及*** |
CN102694824A (zh) * | 2011-03-22 | 2012-09-26 | ***通信集团公司 | 一种用户数据存储***及其数据访问方法 |
CN102810092A (zh) * | 2011-05-31 | 2012-12-05 | 腾讯科技(深圳)有限公司 | 数据读写方法及*** |
CN102799628A (zh) * | 2012-06-21 | 2012-11-28 | 新浪网技术(中国)有限公司 | 在key-value数据库中进行数据分区的方法和装置 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104346458B (zh) * | 2014-10-31 | 2018-05-18 | 阿里巴巴(中国)有限公司 | 数据存储方法和存储设备 |
CN104346458A (zh) * | 2014-10-31 | 2015-02-11 | 易准科技发展(上海)有限公司 | 数据存储方法和存储设备 |
CN104484332A (zh) * | 2014-11-11 | 2015-04-01 | 珠海天琴信息科技有限公司 | 一种嵌入式***中读写数据的方法及装置 |
CN106547784B (zh) * | 2015-09-22 | 2020-04-28 | 阿里巴巴集团控股有限公司 | 一种数据拆分存储方法及装置 |
CN106547784A (zh) * | 2015-09-22 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 一种数据拆分存储方法及装置 |
CN105488225A (zh) * | 2015-12-31 | 2016-04-13 | 新浪网技术(中国)有限公司 | PaaS***中hbase数据导出方法及装置 |
CN105488225B (zh) * | 2015-12-31 | 2019-01-25 | 新浪网技术(中国)有限公司 | PaaS***中hbase数据导出方法及装置 |
CN107085900A (zh) * | 2017-03-22 | 2017-08-22 | 百富计算机技术(深圳)有限公司 | 数据处理方法、装置、***及pos终端 |
CN109992535A (zh) * | 2017-12-29 | 2019-07-09 | 华为技术有限公司 | 一种存储控制方法、装置和*** |
CN109992535B (zh) * | 2017-12-29 | 2024-01-30 | 华为技术有限公司 | 一种存储控制方法、装置和*** |
WO2019149261A1 (zh) * | 2018-02-01 | 2019-08-08 | 中兴通讯股份有限公司 | 分布式文件***的文件存储方法及分布式文件*** |
CN110109886B (zh) * | 2018-02-01 | 2022-11-18 | 中兴通讯股份有限公司 | 分布式文件***的文件存储方法及分布式文件*** |
CN110109886A (zh) * | 2018-02-01 | 2019-08-09 | 中兴通讯股份有限公司 | 分布式文件***的文件存储方法及分布式文件*** |
CN110109865A (zh) * | 2019-05-07 | 2019-08-09 | 苏州浪潮智能科技有限公司 | 一种数据存储方法、装置、设备及可读存储介质 |
WO2023143099A1 (zh) * | 2022-01-29 | 2023-08-03 | 华为技术有限公司 | 一种数据聚合方法及计算*** |
CN115630655A (zh) * | 2022-12-22 | 2023-01-20 | 星汉智能科技股份有限公司 | 读取sim卡的记录文件的方法、***及可读存储介质 |
CN115630655B (zh) * | 2022-12-22 | 2023-04-14 | 星汉智能科技股份有限公司 | 读取sim卡的记录文件的方法、***及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103885887B (zh) | 2018-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103885887A (zh) | 用户数据存储方法、读取方法及*** | |
Das et al. | Big data analytics: A framework for unstructured data analysis | |
CN100468402C (zh) | 一种数据存储及查询方法 | |
CN103905311A (zh) | 流表匹配方法和装置以及交换机 | |
CN106503276A (zh) | 一种用于实时监控***的时间序列数据库的方法与装置 | |
CN102332029A (zh) | 一种基于Hadoop的海量可归类小文件关联存储方法 | |
CN103631538A (zh) | 冷热数据识别门限值计算方法、装置和*** | |
CN103370691A (zh) | 管理缓冲器溢出状况 | |
CN102111438B (zh) | 参数调整方法、装置和分布式计算平台*** | |
CN107832423A (zh) | 一种用于分布式文件***的文件读写方法 | |
CN102158349A (zh) | 一种日志管理装置及方法 | |
CN106682077A (zh) | 一种基于Hadoop技术的海量时序数据存储实现方法 | |
CN104035956A (zh) | 一种基于分布式列存储的时间序列数据存储方法 | |
CN104111924A (zh) | 一种数据库*** | |
CN104050248A (zh) | 一种文件存储***及存储方法 | |
CN104182487A (zh) | 一种支持多种存储方式的统一存储方法 | |
CN105354250A (zh) | 一种面向云存储的数据存储方法及装置 | |
CN109271449A (zh) | 一种基于文件的分布式存储查询***及查询方法 | |
CN103279489A (zh) | 一种元数据的存储方法、装置 | |
CN103778120A (zh) | 全局文件标识生成方法、生成装置及相应的分布式文件*** | |
CN104021088A (zh) | 日志存储方法和装置 | |
CN101963993B (zh) | 一种数据库单表记录快速查找的方法 | |
CN103310008A (zh) | 一种云控制服务器及其文件索引方法 | |
CN102402544A (zh) | 一种附件共享的方法、装置及业务*** | |
Guan et al. | HDFS optimization strategy based on hierarchical storage of hot and cold data |
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 |