一种数据存储方法、装置、机器可读介质及设备与流程

文档序号:24787709发布日期:2021-04-23 11:18阅读:129来源:国知局
一种数据存储方法、装置、机器可读介质及设备与流程

1.本发明涉及数据存储领域,具体涉及一种数据存储方法、装置、机器可读介质及设备。


背景技术:

2.随着大数据,云计算,物联网,5g等技术的不断发展,以及移动互联网产业的繁荣,数据流量的增长速率在不断加快,数据中心承载的压力也变得越来越大,据英特尔预测,全球数据总量在2020年将达到44zc(1zc=10亿tc=1万亿gc),而单单中国产生的数据量将达到8zc,大约占据全球总数据量的五分之一。
3.数据存储一直是各个企业中的核心竞争力,尤其是随着人工智能的发展,以及一批以深度学习,神经网络为代表的数据驱动型算法的提出,更是奠定了数据在i t领域的基础性地位。
4.数据存储也分为不同类型,包括单机存储,以及分布式存储等等。
5.同时,跟据不同的实际应用场景。数据存储策略的设计方式也不尽相同,在大多数场景上,可以利用现有的存储工具和存储设计方案来进行数据持久化,但在某些具体的应用场景中,现有存储方案并不能满足需求。
6.在工程实践和实际的项目开发中,遇到了以下应用场景,在一个较长的时间跨度上,有多个产生数据存储对象的数据源,可以源源不断的产生存储数据。产生的存储数据通过接口发送写入存储请求,最后持久化写入磁盘中。理论上讲,对于随着时间序列推移而不断产生数据的数据源,磁盘空间始终是有限的。同时考虑到未来数据源数量的增加,对磁盘空间的需求又进一步提出了新的挑战。在实际的项目工程实践中,由于成本、预算以及场地等多种现实条件的限制所拥有的磁盘存储区间可能无法满足所有的写入请求存储需求。


技术实现要素:

7.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种数据存储方法、装置、机器可读介质及设备,用于解决现有技术存在的问题。
8.为实现上述目的及其他相关目的,本发明提供一种数据存储方法,包括:
9.获取待写入数据的写入请求,所述写入请求包括待写入数据的大小;
10.根据所述待写入数据的大小以及预先划分的多个数据分布区间确定所述待写入数据所属的分布区间;
11.根据所述待写入数据所属的分布区间,从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;
12.将所述待写入数据写入所述目标存储区间。
13.可选地,通过胜者树结构从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;其中,每个所述存储区间维护一个双向循环链表,所述双向循环链表的每一个节点存储数据的元信息,双向循环链表的头节点存储最
早写入的数据的元信息;所述胜者树结构包括胜者树和多个相同存储区间维护的双向循环链表,所述胜者树的最后一层叶子节点中的每一个叶子节点对应一个双向循环链表的头结点。
14.可选地,所述元信息至少包括时间戳、数据的存储地址、前驱节点的地址、后继节点的地址。
15.可选地,根据高斯分布对数据的分布区间进行划分。
16.可选地,在将所述待写入数据写入所述目标存储区间前,判断最早写入目标存储区间的数据是否满足生命周期;若满足,则向所述目标存储区间中写入待写入数据,使所述待写入数据部分或全部覆盖最早写入的数据;若不满足,则拒绝写入所述待写入数据。
17.可选地,所述将所述待写入数据写入所述目标存储区间,包括:
18.获取最早写入的数据元信息;
19.根据所述元信息确定已写入数据的存储地址,从所述存储地址的起始地址开始写入所述待写入数据,使所述待写入数据完成对最早写入的数据的部分或全部覆盖;
20.向后移动所述头节点,更新所述胜者树结构。
21.为实现上述目的及其他相关目的,本发明提供一种数据存储装置,包括:
22.数据获取模块,用于获取待写入数据的写入请求,所述写入请求包括待写入数据的大小;
23.分布区间确定模块,用于根据所述待写入数据的大小以及预先划分的多个数据分布区间确定所述待写入数据所属的分布区间;
24.存储区间存确定模块,用于根据所述待写入数据所属的分布区间,从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;
25.数据写入模块,用于将所述待写入数据写入所述目标存储区间。
26.可选地,通过胜者树结构从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;其中,每个所述存储区间维护一个双向循环链表,所述双向循环链表的每一个节点存储数据的元信息,双向循环链表的头节点存储最早写入的数据的元信息;所述胜者树结构包括胜者树和多个相同存储区间维护的双向循环链表,所述胜者树的最后一层叶子节点中的每一个叶子节点对应一个双向循环链表的头结点。
27.可选地,所述元信息至少包括时间戳、数据的存储地址、前驱节点的地址、后继节点的地址。
28.可选地,根据高斯分布对数据的分布区间进行划分。
29.可选地,在将所述待写入数据写入所述目标存储区间前,判断最早写入目标存储区间的数据是否满足生命周期;若满足,则向所述目标存储区间中写入待写入数据,使所述待写入数据部分或全部覆盖最早写入的数据;若不满足,则拒绝写入所述待写入数据。
30.可选地,所述数据写入模块包括:
31.元信息获取子模块,用于获取最早写入的数据元信息;
32.数据写入子模块,用于根据所述元信息确定已写入数据的存储地址,从所述存储地址的起始地址开始写入所述待写入数据,使所述待写入数据完成对最早写入的数据的部分或全部覆盖;
33.更新子模块,用于向后移动所述头节点,并更新所述胜者树结构。
34.为实现上述目的及其他相关目的,本发明还提供一种电子设备,包括:
35.一个或多个处理器;和
36.其上存储有指令的一个或多个机器可读介质,当所述一个或多个处理器执行时,使得所述设备执行前述的一个或多个所述的方法。
37.为实现上述目的及其他相关目的,本发明还提供一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得设备执行前述的一个或多个所述的方法。
38.如上所述,本发明提供的一种数据存储方法、装置、机器可读介质及设备,具有以下有益效果:
39.本发明的一种数据存储方法,包括:获取待写入数据的写入请求,所述写入请求包括待写入数据的大小;根据所述待写入数据的大小以及预先划分的多个数据分布区间确定所述待写入数据所属的分布区间;根据所述待写入数据所属的分布区间,从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;将所述待写入数据写入所述目标存储区间。本发明通过将不同大小的待写入数据确定不同的写入位置,增加了空间利用率,提高数据的并发读取和写入效率,效的缓解的并发请求所带来的存储瓶颈,满足特定场景下的用户数据存储需求。
附图说明
40.图1为本发明一实施例一种数据存储方法的流程图;
41.图2为本发明一实施例磁盘维护的双向循环链表示意图;
42.图3为本发明一实施例双向循环链表+胜者树的结构示意图;
43.图4为本发明一实施例数据写入的方法的流程图;
44.图5为本发明一实施例一种数据处理装置的结构示意图;
45.图6为本发明一实施例数据写入模块的结构示意图;
46.图7为本发明一实施例中终端设备的硬件结构示意图;
47.图8为本发明一实施例中终端设备的硬件结构示意图。
具体实施方式
48.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
49.需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
50.如图1所示,本申请实施例提供一种数据存储方法,包括:
51.s11取待写入数据的写入请求,所述写入请求包括待写入数据的大小;
52.s12根据所述待写入数据的大小以及预先划分的多个数据分布区间确定所述待写入数据所属的分布区间;
53.s13根据所述待写入数据所属的分布区间,从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;
54.s14将所述待写入数据写入所述目标存储区间。
55.本发明通过将不同大小的写入数据确定不同的写入位置,增加了空间利用率,提高数据的并发读取和写入效率有效的缓解的并发请求所带来的存储瓶颈。
56.在一实施例中,可以根据高斯分布对数据的分布区间进行划分,其中,数据的分布区间的数量可以用n来表示。
57.根据对近万次的写入数据统计显示,写入数据的大小基本上服从一个期望为μ,方差为σ2的gauss(高斯)分布,因此,可以将数据的分布区间划分为多个区间,具体可以参考如表1所示的划分方式。
58.表1写入数据大小比例分布表
[0059][0060]
表1是根据gauss分布的数学理论统计结果,实际数据分布可能会有差异,但在具体的应用场景中,数据写入的数量为千万至亿级别,因此,根据大数定律和中心极限定理,随着写入数据的数量不断增加,数据大小基本满足表1分布。
[0061]
在步骤s13中,所述存储结构具有多个存储区间,若存储结构为磁盘阵列,则磁盘阵列中的每一个磁盘为一个存储单元,每一个存储单元具有多个存储区间,每一个存储区间可以用于存储大小在设定范围内的数据。其中,存储的数据的大小范围可以参照表1所示。如图2所示,每一个存储单元都具有多个存储区间,那么存储结构具有的多个存储区间指所有存储单元的存储区间。在这些存储区间中,会存在相同的存储区间,即存储区间的存储空间大小相同,都能够存储大小在某一范围内的数据。在数据存储时,从相同的存储区间中选择一个存储区间作为目标存储区间。
[0062]
例如,存储结构由8个磁盘组成的磁盘阵列,每个磁盘都具有图2所示的8个存储区间,每一个存储区间可以用于存储大小在设定范围内的数据。例如,同一个磁盘中的8个存储区间分别为(0,μ

3σ)、(μ

3σ,μ

2σ)、(μ

2σ,μ

σ)、(μ

σ,μ)、(μ,μ+σ)、(μ+σ,μ+2σ)、(μ+2σ,μ+3σ)、(μ+3σ,max)。在数据存储时,若待写入的数据的大小为a,其所属区间为(0,μ

3σ),由于每块磁盘中都会存在(0,μ

3σ)的存储区间,则存储结构中会存在8个属于(0,μ

3σ)的存储区间,在对待写入数据进行存储时,会从这8个存储区间中选择一个作为目标存储区间。
[0063]
在一实施例中,通过胜者树结构从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;其中,每个所述存储区间维护一个双向循环链表,所述双向循环链表的每一个节点存储数据的元信息,双向循环链表的头节点存储最早写入的数据的元信息;其中,所述元信息至少包括时间戳、数据的存储地址、前驱
节点的地址、后继节点的地址。
[0064]
例如,对于存储区间(0,μ

3σ)来说,其维护一个双向循环链表,双向循环链表的每一个节点存储一个数据的存储地址。例如,节点1对应存储区间(0,μ

3σ)中数据1的存储地址d1,节点2对应存储区间(0,μ

3σ)中数据2的存储地址d2,节点3对应存储区间(0,μ

3σ)中数据3的存储地址d3,节点4对应存储区间(0,μ

3σ)中数据4的存储地址d4等等。这里所述的地址d1、d2、d3、d4可以理解为一个范围,地址d1、d2、d3、d4可以是连续的。
[0065]
磁盘1的存储区间(0,μ

3σ)最早写入的数据为a1,数据为a1的元信息存储在双向循环链表1中的头节点中;磁盘2的存储区间(0,μ

3σ)最早写入的数据为a2,数据a2的元信息存储在双向循环链表2中的头节点中;磁盘3的存储区间(0,μ

3σ)最早写入的数据为a3,数据a3的元信息存储在双向循环链表3中的头节点中;磁盘4的存储区间(0,μ

3σ)最早写入的数据为a4,数据a4的元信息存储在双向循环链表4中的头节点中;磁盘5的存储区间(0,μ

3σ)最早写入的数据为a5,数据a5的元信息存储在双向循环链表5中的头节点中;磁盘6的存储区间(0,μ

3σ)最早写入的数据为a6,数据a6的元信息存储在双向循环链表6中的头节点中;磁盘7的存储区间(0,μ

3σ)最早写入的数据为a7,数据a7的元信息存储在双向循环链表7中的头节点中;磁盘8的存储区间(0,μ

3σ)最早写入的数据为a8,数据a8的元信息存储在双向循环链表8中的头节点中。
[0066]
图3显示了一种胜者树结构的示意图,如图3所示,所述胜者树结构包括胜者树和多个相同存储区间维护的双向循环链表,所述胜者树的最后一层叶子节点中的每一个叶子节点对应一个双向循环链表的头结点。
[0067]
在将数据写入存储区间时,会将写入数据的元信息封装成链表节点,按照写入的先后次序,添加至双向循环链表中。可以理解,前驱节点对应的数据写入的时间早于后继节点对应的数据的写入时间。很显然,双向循环链表是一个按照时间递增的有序序列,因此,可以通过获取双向循环链表的头节点来得到最早写入存储区间的数据。对于多个相同的存储区间,每个存储区间都会存在一个属于各自的最早写入数据,通过胜者树就可以从这多个存储区间中选择出最早写入数据的存储区间作为目标存储区间。
[0068]
由于每个存储区间中都维护一个双向循环链表,双向循环链表的头节点存储最早写入的数据的元信息,将这8个存储区间(0,μ

3σ)维护的双向循环链表利用胜者树组合起来,构成如图3所示的胜者树结构。胜者树最后一层子节点中的第一个子节点指向磁盘1的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第二个子节点指向磁盘2的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第三个子节点指向磁盘3的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第四个子节点指向磁盘4的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第五个子节点指向磁盘5的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第六个子节点指向磁盘6的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第七个子节点指向磁盘7的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第八个子节点指向磁盘8的存储区间(0,μ

3σ)所维护的双向循环链表的头节点。通过胜者树就可以确定最早写入的数据所对应的双向循环链表的头节点,从而确定出最早写入数据的存储区间。
[0069]
由于本发明的数据结构拥有多组胜者树+双向循环链表结构,当有多个不同大小的数据写入发请求并时,可更新不同的数据结构,支持并发完成需要被覆盖数据的选择,存
储结构及数据结构的更新,有效的缓解了并发请求所带来的存储瓶颈。另外,为了进一步缓解并发请求所带来的性能瓶颈,可以将树结构维护在多个服务器中,通过分布式应用协调服务来进行结构的配置同步,提高存储服务的响应速度和读写效率。而且,由于采用多组胜者树+双向循环链表结构,当磁盘阵列数量发生变化时,在基本的结构不变情况下,只需要增减对应磁盘的链表,并修改对应的胜者树结构,该数据结构依然能够正常运行也能够正常工作运行,从而提高可拓展性和可伸缩性。由于双向循环链表时间有序性,辅之胜者树(winner tree)数据结构,不需要遍历所有写入数据的信息,就可以在o(log(n))的时间内迅速选择被覆盖的数据,从而提高了确定目标存储区间的查询速度。
[0070]
在一实施例中,如图4所示,所述将所述待写入数据写入所述目标存储区间,包括:
[0071]
s41获取最早写入的数据元信息;
[0072]
s42根据所述元信息确定已写入数据的存储地址,从所述存储地址的起始地址开始写入所述待写入数据,使所述待写入数据完成对最早写入的数据的部分或全部覆盖;
[0073]
s43向后移动所述头节点,更新所述胜者树结构。
[0074]
在向所述目标存储区间写入数据时,会先判断所述目标存储区间是否满足数据写入需求,即磁盘的剩余空间是否充足或磁盘是否未达到存储阈值(存储阈值指存储结构所能存储的最大数据量占存储结构总量的百分比),若满足数据写入需求,则直接向目标存储区间的相应地址写入待写入数据;若不满足数据写入需求,调用存储告警模块,为用户提出告警提示,由用户决定是否执行数据的存储覆盖策略或者调用存储拒绝策略,拒绝该写入请求,同时提示用户存储空间已满,用户可以通过删除指定数据或者增加存储设备的方式,来继续进行数据存储。其中,所述存储覆盖策略,即对目标存储区间中的已写入数据进行部分覆盖或全部覆盖。
[0075]
本发明可以根据实际场景的数据流统计结果,计算数据大小所服从的gauss分布参数μ和σ2,可以根据μ和σ的数值,作为数据存储区间的划分依据,充分利用存储结构的存储空间,在保证最小化被覆盖数据数量的基础上,显著减少由于内部碎片而产生的浪费。
[0076]
而且在将待写入数据写入目标存储位置时,要保证被覆盖数据所占用存储空间的大小要大于或等于待写入数据的数据大小,当待写入数据写入目标存储区间时,可以减少被覆盖的其他数据。即在为待写入数据分配存储空间时,需要为所述待写入数据分配该数据所属的分布区间中最大的存储空间,例如,待写入数据的大小为a,其落入到存储区间(0,μ

3σ)中,此时为待写入数据分配的存储空间为μ

3σ。
[0077]
理论上讲,对于随着时间序列推移而不断产生数据的数据源,存储结构的存储空间始终是有限的。同时考虑到未来数据源数量的增加,对存储结构的需求又进一步提出了新的挑战。在实际的项目工程实践中,由于成本,预算以及场地等多种现实条件的限制。存储结构的存储空间可能无法满足所有数据的存储需求。因此,为了解决以上问题,基于实际的工程实践需求,本发明提出了生命周期。所谓生命周期,即保存数据所需要的最短时长。当存储单元的存储空间不足或达到存储阈值时,为满足新的数据写入请求,可以允许对保存时间大于生命周期的旧数据进行覆盖写入,用于新数据的存储。因此,在一实施例,在将所述待写入数据写入所述目标存储区间前,判断最早写入目标存储区间的数据是否满足生命周期;若满足,则向所述目标存储区间中写入待写入数据,使所述待写入数据部分或全部覆盖最早写入的数据;若不满足,则拒绝写入所述待写入数据。
[0078]
应该理解,上述各个实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0079]
如图5所示,本申请实施例提供一种数据存储装置,包括:
[0080]
数据获取模块51,用于获取待写入数据的写入请求,所述写入请求包括待写入数据的大小;
[0081]
分布区间确定模块52,用于根据所述待写入数据的大小以及预先划分的多个数据分布区间确定所述待写入数据所属的分布区间;
[0082]
存储区间存确定模块53,用于根据所述待写入数据所属的分布区间,从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;
[0083]
数据写入模块54,用于将所述待写入数据写入所述目标存储区间。
[0084]
本发明通过将不同大小的写入数据确定不同的写入位置,增加了空间利用率,提高数据的并发读取和写入效率有效的缓解的并发请求所带来的存储瓶颈。
[0085]
在一实施例中,可以根据高斯分布对数据的分布区间进行划分,其中,数据的分布区间的数量可以用n来表示。
[0086]
根据对近万次的写入数据统计显示,写入数据的大小基本上服从一个期望为μ,方差为σ2的gauss(高斯)分布,因此,可以将数据的分布区间划分为多个区间,具体可以参考如表1所示的划分方式。
[0087]
表1写入数据大小比例分布表
[0088][0089]
表1是根据gauss分布的数学理论统计结果,实际数据分布可能会有差异,但在具体的应用场景中,数据写入的数量为千万至亿级别,因此,根据大数定律和中心极限定理,随着写入数据的数量不断增加,数据大小基本满足表1分布。
[0090]
所述存储结构具有多个存储区间,若存储结构为磁盘阵列,则磁盘阵列中的每一个磁盘为一个存储单元,每一个存储单元具有多个存储区间,每一个存储区间可以用于存储大小在设定范围内的数据。其中,存储的数据的大小范围可以参照表1所示。如图2所示,每一个存储单元都具有多个存储区间,那么存储结构具有的多个存储区间指所有存储单元的存储区间。在这些存储区间中,会存在相同的存储区间,即存储区间的存储空间大小相同,都能够存储大小在某一范围内的数据。在数据存储时,从相同的存储区间中选择一个存储区间作为目标存储区间。
[0091]
例如,存储结构由8个磁盘组成的磁盘阵列,每个磁盘都具有图2所示的8个存储区间,每一个存储区间可以用于存储大小在设定范围内的数据。例如,同一个磁盘中的8个存储区间分别为(0,μ

3σ)、(μ

3σ,μ

2σ)、(μ

2σ,μ

σ)、(μ

σ,μ)、(μ,μ+σ)、(μ+σ,μ+2σ)、(μ+2σ,μ+3σ)、(μ+3σ,max)。在数据存储时,若待写入的数据的大小为a,其所属区间为(0,μ

3σ),由
于每块磁盘中都会存在(0,μ

3σ)的存储区间,则存储结构中会存在8个属于(0,μ

3σ)的存储区间,在对待写入数据进行存储时,会从这8个存储区间中选择一个作为目标存储区间。
[0092]
在一实施例中,通过胜者树结构从具有多个存储区间的存储结构中选择相同存储区间中最早写入数据的存储区间作为目标存储区间;其中,每个所述存储区间维护一个双向循环链表,所述双向循环链表的每一个节点存储数据的元信息,双向循环链表的头节点存储最早写入的数据的元信息;其中,所述元信息至少包括时间戳、数据的存储地址、前驱节点的地址、后继节点的地址。
[0093]
例如,对于存储区间(0,μ

3σ)来说,其维护一个双向循环链表,双向循环链表的每一个节点存储一个数据的存储地址。例如,节点1对应存储区间(0,μ

3σ)中数据1的存储地址d1,节点2对应存储区间(0,μ

3σ)中数据2的存储地址d2,节点3对应存储区间(0,μ

3σ)中数据3的存储地址d3,节点4对应存储区间(0,μ

3σ)中数据4的存储地址d4等等。这里所述的地址d1、d2、d3、d4可以理解为一个范围,地址d1、d2、d3、d4可以是连续的。
[0094]
磁盘1的存储区间(0,μ

3σ)最早写入的数据为a1,数据为a1的元信息存储在双向循环链表1中的头节点中;磁盘2的存储区间(0,μ

3σ)最早写入的数据为a2,数据a2的元信息存储在双向循环链表2中的头节点中;磁盘3的存储区间(0,μ

3σ)最早写入的数据为a3,数据a3的元信息存储在双向循环链表3中的头节点中;磁盘4的存储区间(0,μ

3σ)最早写入的数据为a4,数据a4的元信息存储在双向循环链表4中的头节点中;磁盘5的存储区间(0,μ

3σ)最早写入的数据为a5,数据a5的元信息存储在双向循环链表5中的头节点中;磁盘6的存储区间(0,μ

3σ)最早写入的数据为a6,数据a6的元信息存储在双向循环链表6中的头节点中;磁盘7的存储区间(0,μ

3σ)最早写入的数据为a7,数据a7的元信息存储在双向循环链表7中的头节点中;磁盘8的存储区间(0,μ

3σ)最早写入的数据为a8,数据a8的元信息存储在双向循环链表8中的头节点中。
[0095]
图3显示了一种胜者树结构的示意图,如图3所示,所述胜者树结构包括胜者树和多个相同存储区间维护的双向循环链表,所述胜者树的最后一层叶子节点中的每一个叶子节点对应一个双向循环链表的头结点。
[0096]
在将数据写入存储区间时,会将写入数据的元信息封装成链表节点,按照写入的先后次序,添加至双向循环链表中。可以理解,前驱节点对应的数据写入的时间早于后继节点对应的数据的写入时间。很显然,双向循环链表是一个按照时间递增的有序序列,因此,可以通过获取双向循环链表的头节点来得到最早写入存储区间的数据。对于多个相同的存储区间,每个存储区间都会存在一个属于各自的最早写入数据,通过胜者树就可以从这多个存储区间中选择出最早写入数据的存储区间作为目标存储区间。
[0097]
由于每个存储区间中都维护一个双向循环链表,双向循环链表的头节点存储最早写入的数据的元信息,将这8个存储区间(0,μ

3σ)维护的双向循环链表利用胜者树组合起来,构成如图3所示的胜者树结构。胜者树最后一层子节点中的第一个子节点指向磁盘1的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第二个子节点指向磁盘2的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第三个子节点指向磁盘3的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第四个子节点指向磁盘4的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第五个子节点指向磁盘5的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第六个子节点指向磁盘6的存储区间(0,μ

3σ)所维护的双向循环链表的头
节点,第七个子节点指向磁盘7的存储区间(0,μ

3σ)所维护的双向循环链表的头节点,第八个子节点指向磁盘8的存储区间(0,μ

3σ)所维护的双向循环链表的头节点。通过胜者树就可以确定最早写入的数据所对应的双向循环链表的头节点,从而确定出最早写入数据的存储区间。
[0098]
由于本发明的数据结构拥有多组胜者树+双向循环链表结构,当有多个不同大小的数据写入发请求并时,可更新不同的数据结构,支持并发完成需要被覆盖数据的选择,存储结构及数据结构的更新,有效的缓解了并发请求所带来的存储瓶颈。另外,为了进一步缓解并发请求所带来的性能瓶颈,可以将树结构维护在多个服务器中,通过分布式应用协调服务来进行结构的配置同步,提高存储服务的响应速度和读写效率。而且,由于采用多组胜者树+双向循环链表结构,当磁盘阵列数量发生变化时,在基本的结构不变情况下,只需要增减对应磁盘的链表,并修改对应的胜者树结构,该数据结构依然能够正常运行也能够正常工作运行,从而提高可拓展性和可伸缩性。由于双向循环链表时间有序性,辅之胜者树(winner tree)数据结构,不需要遍历所有写入数据的信息,就可以在o(log(n))的时间内迅速选择被覆盖的数据,从而提高了确定目标存储区间的查询速度。
[0099]
在一实施例中,如图6所示,所述数据写入模块包括:
[0100]
元信息获取子模块61,用于获取最早写入的数据元信息;
[0101]
数据写入子模块62,用于根据所述元信息确定已写入数据的存储地址,从所述存储地址的起始地址开始写入所述待写入数据,使所述待写入数据完成对最早写入的数据的部分或全部覆盖;
[0102]
更新子模块63,用于向后移动所述头节点,并更新所述胜者树结构。
[0103]
在向所述目标存储区间写入数据时,会先判断所述目标存储区间是否满足数据写入需求,即磁盘的剩余空间是否充足或磁盘是否未达到存储阈值(存储阈值指存储结构所能存储的最大数据量占存储结构总量的百分比),若满足数据写入需求,则直接向目标存储区间的相应地址写入待写入数据;若不满足数据写入需求,调用存储告警模块,为用户提出告警提示,由用户决定是否执行数据的存储覆盖策略或者调用存储拒绝策略,拒绝该写入请求,同时提示用户存储空间已满,用户可以通过删除指定数据或者增加存储设备的方式,来继续进行数据存储。其中,所述存储覆盖策略,即对目标存储区间中的已写入数据进行部分覆盖或全部覆盖。
[0104]
本发明可以根据实际场景的数据流统计结果,计算数据大小所服从的gauss分布参数μ和σ2,可以根据μ和σ的数值,作为数据存储区间的划分依据,充分利用存储结构的存储空间,在保证最小化被覆盖数据数量的基础上,显著减少由于内部碎片而产生的浪费。
[0105]
而且在将待写入数据写入目标存储位置时,要保证被覆盖数据所占用存储空间的大小要大于或等于待写入数据的数据大小,当待写入数据写入目标存储区间时,可以减少被覆盖的其他数据。即在为待写入数据分配存储空间时,需要为所述待写入数据分配该数据所属的分布区间中最大的存储空间,例如,待写入数据的大小为a,其落入到存储区间(0,μ

3σ)中,此时为待写入数据分配的存储空间为μ

3σ。
[0106]
理论上讲,对于随着时间序列推移而不断产生数据的数据源,存储结构的存储空间始终是有限的。同时考虑到未来数据源数量的增加,对存储结构的需求又进一步提出了新的挑战。在实际的项目工程实践中,由于成本,预算以及场地等多种现实条件的限制。存
储结构的存储空间可能无法满足所有数据的存储需求。因此,为了解决以上问题,基于实际的工程实践需求,本发明提出了生命周期。所谓生命周期,即保存数据所需要的最短时长。当存储单元的存储空间不足或达到存储阈值时,为满足新的数据写入请求,可以允许对保存时间大于生命周期的旧数据进行覆盖写入,用于新数据的存储。因此,在一实施例,在将所述待写入数据写入所述目标存储区间前,判断最早写入目标存储区间的数据是否满足生命周期;若满足,则向所述目标存储区间中写入待写入数据,使所述待写入数据部分或全部覆盖最早写入的数据;若不满足,则拒绝写入所述待写入数据。
[0107]
本申请实施例还提供了一种设备,该设备可以包括:一个或多个处理器;和其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述设备执行图1所述的方法。在实际应用中,该设备可以作为终端设备,也可以作为服务器,终端设备的例子可以包括:智能手机、平板电脑、电子书阅读器、mp3(动态影像专家压缩标准语音层面3,moving picture experts group audio layer iii)播放器、mp4(动态影像专家压缩标准语音层面4,moving picture experts group audio layer iv)播放器、膝上型便携计算机、车载电脑、台式计算机、机顶盒、智能电视机、可穿戴设备等等,本申请实施例对于具体的设备不加以限制。
[0108]
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例的图1中方法所包含步骤的指令(instructions)。
[0109]
图7为本申请一实施例提供的终端设备的硬件结构示意图。如图所示,该终端设备可以包括:输入设备1100、第一处理器1101、输出设备1102、第一存储器1103和至少一个通信总线1104。通信总线1104用于实现元件之间的通信连接。第一存储器1103可能包含高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器,第一存储器1103中可以存储各种程序,用于完成各种处理功能以及实现本实施例的方法步骤。
[0110]
可选的,上述第一处理器1101例如可以为中央处理器(central processing unit,简称cpu)、应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,该第一处理器1101通过有线或无线连接耦合到上述输入设备1100和输出设备1102。
[0111]
可选的,上述输入设备1100可以包括多种输入设备,例如可以包括面向用户的用户接口、面向设备的设备接口、软件的可编程接口、摄像头、传感器中至少一种。可选的,该面向设备的设备接口可以是用于设备与设备之间进行数据传输的有线接口、还可以是用于设备与设备之间进行数据传输的硬件插入接口(例如usc接口、串口等);可选的,该面向用户的用户接口例如可以是面向用户的控制按键、用于接收语音输入的语音输入设备以及用户接收用户触摸输入的触摸感知设备(例如具有触摸感应功能的触摸屏、触控板等);可选的,上述软件的可编程接口例如可以是供用户编辑或者修改程序的入口,例如芯片的输入引脚接口或者输入接口等;输出设备1102可以包括显示器、音响等输出设备。
[0112]
在本实施例中,该终端设备的处理器包括用于执行各设备中各模块的功能,具体功能和技术效果参照上述实施例即可,此处不再赘述。
[0113]
图8为本申请的一个实施例提供的终端设备的硬件结构示意图。图8是对图7在实
现过程中的一个具体的实施例。如图所示,本实施例的终端设备可以包括第二处理器1201以及第二存储器1202。
[0114]
第二处理器1201执行第二存储器1202所存放的计算机程序代码,实现上述实施例中图1所述方法。
[0115]
第二存储器1202被配置为存储各种类型的数据以支持在终端设备的操作。这些数据的示例包括用于在终端设备上操作的任何应用程序或方法的指令,例如消息,图片,视频等。第二存储器1202可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non

volatile memory),例如至少一个磁盘存储器。
[0116]
可选地,第二处理器1201设置在处理组件1200中。该终端设备还可以包括:通信组件1203,电源组件1204,多媒体组件1205,语音组件1206,输入/输出接口1207和/或传感器组件1208。终端设备具体所包含的组件等依据实际需求设定,本实施例对此不作限定。
[0117]
处理组件1200通常控制终端设备的整体操作。处理组件1200可以包括一个或多个第二处理器1201来执行指令,以完成上述数据存储方法中的全部或部分步骤。此外,处理组件1200可以包括一个或多个模块,便于处理组件1200和其他组件之间的交互。例如,处理组件1200可以包括多媒体模块,以方便多媒体组件1205和处理组件1200之间的交互。
[0118]
电源组件1204为终端设备的各种组件提供电力。电源组件1204可以包括电源管理系统,一个或多个电源,及其他与为终端设备生成、管理和分配电力相关联的组件。
[0119]
多媒体组件1205包括在终端设备和用户之间的提供一个输出接口的显示屏。在一些实施例中,显示屏可以包括液晶显示器(lcd)和触摸面板(tp)。如果显示屏包括触摸面板,显示屏可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
[0120]
语音组件1206被配置为输出和/或输入语音信号。例如,语音组件1206包括一个麦克风(mic),当终端设备处于操作模式,如语音识别模式时,麦克风被配置为接收外部语音信号。所接收的语音信号可以被进一步存储在第二存储器1202或经由通信组件1203发送。在一些实施例中,语音组件1206还包括一个扬声器,用于输出语音信号。
[0121]
输入/输出接口1207为处理组件1200和外围接口模块之间提供接口,上述外围接口模块可以是点击轮,按钮等。这些按钮可包括但不限于:音量按钮、启动按钮和锁定按钮。
[0122]
传感器组件1208包括一个或多个传感器,用于为终端设备提供各个方面的状态评估。例如,传感器组件1208可以检测到终端设备的打开/关闭状态,组件的相对定位,用户与终端设备接触的存在或不存在。传感器组件1208可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在,包括检测用户与终端设备间的距离。在一些实施例中,该传感器组件1208还可以包括摄像头等。
[0123]
通信组件1203被配置为便于终端设备和其他设备之间有线或无线方式的通信。终端设备可以接入基于通信标准的无线网络,如wifi,2g或3g,或它们的组合。在一个实施例中,该终端设备中可以包括sim卡插槽,该sim卡插槽用于插入sim卡,使得终端设备可以登录gprs网络,通过互联网与服务器建立通信。
[0124]
由上可知,在图8实施例中所涉及的通信组件1203、语音组件1206以及输入/输出接口1207、传感器组件1208均可以作为图7实施例中的输入设备的实现方式。
[0125]
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1