CN113312352A - 数据存储方法、装置、微控制单元和存储介质 - Google Patents
数据存储方法、装置、微控制单元和存储介质 Download PDFInfo
- Publication number
- CN113312352A CN113312352A CN202110620030.2A CN202110620030A CN113312352A CN 113312352 A CN113312352 A CN 113312352A CN 202110620030 A CN202110620030 A CN 202110620030A CN 113312352 A CN113312352 A CN 113312352A
- Authority
- CN
- China
- Prior art keywords
- data
- storage space
- storage
- chain table
- 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.)
- Pending
Links
- 238000013500 data storage Methods 0.000 title claims abstract description 79
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000004590 computer program Methods 0.000 claims description 4
- 238000011022 operating instruction Methods 0.000 claims description 3
- 238000004364 calculation method Methods 0.000 claims description 2
- 230000002349 favourable effect Effects 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 9
- 230000009286 beneficial effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000002457 bidirectional effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000013506 data mapping Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24562—Pointer or reference processing operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例涉及嵌入式领域,公开了一种数据存储方法、装置、电子设备和存储介质。本发明中,获取待存储的第一数据的关键字;计算关键字的哈希值,确定关键字的哈希值映射的第一存储空间;第一存储空间位于预先创建的数据存储空间中的普通区;若第一存储空间未存储有数据,则将第一数据存储到第一存储空间,并创建哈希链表;哈希链表用于指示具有相同哈希值的存储空间;若第一存储空间存储有数据,则将第一数据存储到第二存储空间,并将第二存储空间加入所述哈希链表;其中,第二存储空间位于数据存储空间的冲突区,本实施例在保证索引文件尽量小的情况下,还有利于减小时间复杂度,且能够避免时间复杂度随着冲突个数的增加明显上升。
Description
技术领域
本发明实施例涉及嵌入式领域,特别涉及数据存储方法、装置、电子设备和存储介质。
背景技术
电子设备中存储数据可以通过以下方式:第一,将数据顺序存储,该存储方法能够节约存储空间;第二,预先建立足够大的存储空间,每个数据标识均对应一个存储空间,例如,歌曲的标识码CRC-32码有32位,为每个CRC-32码对应的歌曲均建立一个存储空间,即建立4GB个存储空间,将歌曲存储在与其CRC-32码对应的存储该空间,该种方法有利于数据的查找,在查找数据时直接通过CRC-32码即可获取数据。
然而,上述数据的存储方式确难以应用于微控制单元(Microcontroller Unit;MCU)。微控制单元,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。即,MCU内存较小,主频低,对时间度复杂度要求高。
通过上述第一种方式存储的数据,在查找数据时,需要将查找的关键字与各数据的关键字逐个对比,时间复杂度高,第二种方式存储数据,存储所需的空间大,上述两种方式均难以应用于微控制单元。
发明内容
本发明实施例的目的在于提供一种数据存储方法、装置、电子设备和存储介质,在数据存储时,兼顾存储空间和时间复杂度,在保证文件的存储空间小的情况下,还能够尽量保证时间复杂度低,以适用于微控制单元。
为解决上述技术问题,本发明的实施例提供了一种数据存储方法,包括以下步骤:
获取待存储的第一数据的关键字;计算所述关键字的哈希值,确定所述关键字的哈希值映射的第一存储空间;所述第一存储空间位于预先创建的数据存储空间中的普通区;若所述第一存储空间未存储有数据,则将所述第一数据存储到所述第一存储空间,并创建哈希链表;所述哈希链表用于指示具有相同哈希值的存储空间;若所述第一存储空间存储有数据,则将所述第一数据存储到第二存储空间,并将所述第二存储空间加入所述哈希链表;其中,所述第二存储空间位于所述预先创建的数据存储空间的冲突区。
本发明的实施例还提供了一种数据存储装置,包括:获取模块,用于获取待存储的第一数据的关键字;计算模块,用于计算所述关键字的哈希值,确定所述关键字的哈希值映射的第一存储空间;所述第一存储空间位于预先创建的数据存储空间中的普通区;存储模块,用于若所述第一存储空间未存储有数据,则将所述第一数据存储到所述第一存储空间,并创建哈希链表;所述哈希链表用于指示具有相同哈希值的存储空间;若所述第一存储空间存储有数据,则将所述第一数据存储到第二存储空间,并将所述第二存储空间加入所述哈希链表;其中,所述第二存储空间位于所述预先创建的数据存储空间的冲突区。
本发明的实施例还提供了一种微控制单元,至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的数据存储方法。
本发明的实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据存储方法。
相对于相关技术而言,本发明的实施例中的数据存储空间,并不是每个关键字对应一个存储空间,而是根据实际存储的数据的个数创建的数据存储空间,有利于减小索引文件的存储空间。另外,本发明的实施例创建的数据空间包括冲突区和普通区,冲突区中各存储空间的地址为哈希值直接映射的地址,普通区为发生哈希冲突的数据存储的地址,本申请的实施例计算第一关键字的哈希值,当未发生哈希冲突的时候,将数据存储到该哈希值映射的存储空间,从而,便于直接基于计算得到的哈希值直接得到数据映射的地址,而无需与各数据一一进行比较,有利于简化数据的查找方式,降低时间复杂度,从而贴合MCU的需求。本实施例建立哈希链表,在发生哈希冲突区,将数据存储到冲突区,并加入哈希链表,便于根据哈希链表查找数据,相较于遍历冲突区存储的数据,本申请的实施例有利于实现基于哈希链表的数据查找,使得时间复杂度随着冲突个数的上升不会明显增加,进一步贴合MCU的需求。即,本申请的实施例在保证索引文件,即存储各数据的存储空间尽量小的情况下,还有利于减小时间复杂度,且能够避免时间复杂度随着冲突个数的增加明显上升。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定。
图1是根据本发明实施例中的数据存储方法的流程图;
图2是根据本发明一实施例中数据存储空间的示意图;
图3是根据本发明一实施例中数据存储的示意图;
图4是根据本发明一实施例中的对数据进行操作的流程图;
图5是根据本发明一实施例中数据存储装置的示意图;
图6是根据本发明一实施例中微控制单元的示意图。
具体实施方式
在相关技术的数据存储结构中,常用以下数据存储方法:
第一种,文件的数据进行顺序存储,例如标识为A的数据存储到存储空间01,下一个数据B存储到空间02,以此类推。这种方法能够节约存储空间,然而,基于顺序存储结构的文件进行查找时,需要将存储的数据与查找的数据一一进行对比;基于顺序存储结构的文件进行删除时,例如存储了A、B、C、D四个数据,删除了数据B,则数据C需要重新写入数据B的原存储空间,数据D需要写入数据C的原存储空间,即,此种存储结构在数据操作时,时间复杂度较高。
第二种,文件每个数据标识均对应一个存储空间。例如,标识有1024个,则创建1024个存储空间,每个标识与存储空间一一对应,当需要查找时,可以根据标识确定唯一的存储空间,然而,若实际存储的数据只有10个,而创建的存储空间有1024个,用这种方式会导致存储空间的浪费,所需要的存储空间也较大。
而MCU的内存较小,主频较低,对时间复杂度要求也较高,上述存储方法难以应用于MCU。
为解决上述问题,本发明实施例涉及一种数据存储方法,数据存储方法可以应用于MCU,数据存储方法包括:获取待存储的第一数据的关键字;计算所述关键字的哈希值,确定所述关键字的哈希值映射的第一存储空间;所述第一存储空间位于预先创建的数据存储空间中的普通区;若所述第一存储空间未存储有数据,则将所述第一数据存储到所述第一存储空间,并创建哈希链表;所述哈希链表用于指示具有相同哈希值的存储空间;若所述第一存储空间存储有数据,则将所述第一数据存储到第二存储空间,并将所述第二存储空间加入所述哈希链表;其中,所述第二存储空间位于所述预先创建的数据存储空间的冲突区。
本实施例创建的数据存储空间,并不是每个关键字对应一个存储空间,而是根据实际存储的数据的个数创建存储空间,有利于减小索引文件的存储空间。
另外,本发明的实施例创建的数据空间包括冲突区和普通区,冲突区中各存储空间的地址为哈希值直接映射的地址,普通区为发生哈希冲突的数据存储的地址,本申请的实施例计算第一关键字的哈希值,当未发生哈希冲突的时候,将数据存储到该哈希值映射的存储空间,从而,便于直接基于计算得到的哈希值直接得到数据映射的地址,而无需与各数据一一进行比较,有利于简化数据的查找方式,降低时间复杂度。
而且,本实施例建立哈希链表,在发生哈希冲突区,将数据存储到冲突区,并加入哈希链表,相较于遍历冲突区存储的数据进行数据操作,本申请的实施例有利于实现基于哈希链表的数据查找,使得时间复杂度随着冲突个数的上升不会明显增加,相较于顺序存储,要删除或者新增数据时,需要对其他存储空间的数据都进行调整,本实施例在存储数据时,影响的存储空间较小。
也就是说,本申请的实施例在保证索引文件,即存储各数据的存储空间尽量小的情况下,还有利于减小对数据进行操作的时间复杂度,且能够避免时间复杂度随着冲突个数的增加明显上升。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
请参照图1所示,下面对本实施例的数据存储方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
步骤101,获取待存储的第一数据的关键字。
本实施例中第一数据可以为歌曲、文档等,本实施例不对此进行限定。第一数据的关键字能够标识第一数据,例如:当第一数据为歌曲时,歌曲的CRC-32编码可以作为第一数据的关键字。
步骤102,计算关键字的哈希值,确定所述关键字的哈希值映射的第一存储空间。所述第一存储空间位于预先创建的数据存储空间中的普通区。例如,数据存储空间存储的为歌单索引文件,第一数据为歌曲关键字,即歌曲id为1的歌曲,计算歌曲的哈希值hash(1),得到歌曲1映射的物理地址,即第一存储空间。通过本实施例中的哈希函数可以映射到普通区的物理地址,但是本实施例不对具体的哈希函数进行限定。
数据存储空间即为索引文件的存储空间,存储索引文件中的各数据,参照图2所示,数据存储空间的可以包括Normal area普通区201和Collision area冲突区202。普通区各存储空间的物理地址均能够通过哈希函数映射得到。普通区和冲突区中均包括多个存储空间Slot,普通区大小为n*sizeof(slot)bytes,其中,sizeof(slot)为单个存储空间的大小,n为普通区中存储空间的个数,bytes代表字节。冲突区大小为m*sizeof(slot)bytes,其中,m为普通区中存储空间的个数。在传统的解决哈希冲突的链表法中,需要动态分配内存,以进行存储数据,而这种方式会导致有过多的内存碎片,考虑到MCU内存较小,当有过多的内存碎片,可能会因空间不足致使内存空间分配失败,本实施例中预先创建一块数据存储空间,发生哈希冲突的数据均可存放在数据存储空间中的冲突区,即无论计算得到的哈希值为多少,当发生哈希冲突时,均存储至冲突区,冲突区是共享的,可以避免因动态内存分配或者哈希冲突数据存储空间零散造成的MCU的内存中有过多的内存碎片的情况发生,从而减少因空间不足导致的内存分配失败,进而减少因内存分配失败导致的系统崩溃的情况发生。
在另一些实施例中,参照图2所示,还可以设置有flag area标志区203,标志区中包括与数据存储空间中的普通区和冲突区的各存储空间对应的存储标识,与存储空间对应的存储标识表示该存储空间是否存储有数据。例如,若存储标识对应的存储空间存储有数据,则存储标识为1,若无数据,则存储标识为0。本实施例中设置标志区,以便于得到各存储空间的存储情况。标志区的各存储标识可以占1个bits位,以使得标志区占用的空间更小。在占用1个bits时,标志区的大小为:(n+m)bits,其中,n为普通区的存储空间个数,m为冲突区的存储空间的个数。
相较于不区分普通区和冲突区,当发生哈希冲突后,在创建的存储空间中确定一个空闲存储空间就存放数据,本实施例将数据存储空间分为普通区和冲突区,普通区的物理地址均为哈希值映射的物理地址,冲突区为发生哈希冲突的数据存放的地址,本实施例能避免发生哈希冲突的数据占用哈希值映射的物理地址,从而避免在操作数据时,无法准确确定哈希值对应的哈希链的情况发生。例如在数据A和数据B发生哈希冲突时,若不区分普通区和冲突区,数据B可能会在存储空间1中存储,存储空间1可能会是哈希函数映射的存储空间,当数据C通过哈希函数计算出映射的存储空间是存储空间1时,此时,数据B占用了存储空间1,数据C无法存储到映射的存储空间,在进行操作数据时,例如待查找数据是C,通过哈希函数无法找到C。
在得到第一存储空间之后,执行步骤103。
步骤103,第一存储空间是否存储有数据。若第一存储空间未存储有数据,执行步骤104;若第一存储空间存储有数据,执行步骤105。
例如,若第一存储空间对应的存储标识为表征存储有数据的数字1,则第一存储空间存储有数据,若第一存储空间对应的存储标识为表征未存储数据的述子0,则第一存储空间未存储有数据。
若第一存储空间未存储有数据,则执行步骤104。
步骤104,将第一数据存储到所述第一存储空间,并创建哈希链表。
例如,将歌曲1存储到第一存储空间,并创建哈希链表,哈希链表可以为单链表,也可以为双链表。
当建立的哈希链表为单链表时,第一存储空间中存储的内容可包括:第一数据、第一后指针next1,第一后指针next1的内容指向空值,此时哈希链表中仅包括一个元素,即第一存储空间。
当建立的哈希链表为双链表时,第一存储空间存储的内容可包括:第一数据,第一后指针next1,第一前指针previous1,next1和previous1的指针均指向空值。相较于单向链表,建立双向链表,可以便于实现向前查找数据和向后查找数据,例如,当前的存储空间为B,即可以通过nex1指针找到下一存储空间C,也可以同过previous1指针找到上一存储空间A。
步骤105,若第一存储空间存储有数据,则将第一数据存储到第二存储空间,并将所述第二存储空间加入所述哈希链表。
在一些实施例中,哈希链表为双链表,数据存储空间中的存储空间中存储有第一前指针和第一后指针;将位于所述哈希链表末尾的第三存储空间中的第一后指针指向所述第二存储空间;将所述第二存储空间中的第一前指针指向所述第三存储空间;将所述第二存储空间中的第一后指针设为空值。本实施例中,哈希链表用next和previous双向指针指示冲突路径,便于对数据的操作。
以下,结合一个具体的应用场景说明数据存储方法,在本应用场景中,标志区中存储标识为1表示存储空间存储有数据,存储标识为0标识存储空间未存储数据,数据存储空间存储歌曲索引文件,第一数据为歌曲以及歌曲相关信息,例如歌曲关键字、歌手等。假设要存储的的歌曲有7首,关键字依次为1,2,3,4,5,6,7;将7首歌曲分别进行存储,存储后的数据存储空间可参照图3所示。
对于歌曲1,hash(1)得到哈希值,确定了哈希值映射的存储空间,且该存储空间并未存储数据,则将歌曲1等相关信息存储进映射的存储空间,并建立哈希链表,即将存储空间的第一前指针previous1_1,第一后指针next1_1均指向空。
对于歌曲2,步骤与歌曲1大致相同,此处不再赘述。此时,歌曲2对应的存储空间中存储的第一前指针previous1_2,第一后指针next1_2均指向空。另外,歌曲4、6也与歌曲1的步骤大致相同,后续不再赘述。
对于歌曲3,hash(3)=hash(2),表明发生哈希冲突,此时,歌曲3映射的存储空间中已经存储有歌曲2,则在标志区中查找值为0且对应的存储空间为冲突区的存储标识,根据该存储标识确定歌曲3的存储空间,该歌曲3存储在冲突区中,将歌曲3的存储空间加入哈希链表,此时,哈希链表末尾的存储空间为歌曲2的存储空间,将next1_2指向歌曲3的存储空间,将歌曲3的第一前指针previous1_3指向歌曲2的存储空间,歌曲3的第一后指针next1_3指向空值。
对于歌曲5,与歌曲2、3发生哈希冲突,在建立哈希链表时,歌曲3为哈希链表末尾的存储空间,因此,将next1_3指向歌曲5的存储空间,将歌曲5的第一前指针previous1_5指向歌曲3的存储空间,歌曲5的第一后指针next1_5指向空值,其余与歌曲3的存储过程大致相同,此处不再赘述。歌曲7的存储过程也与歌曲3大致相同,此处不再赘述。
上述的具体应用场景中,存储空间中的双向指针用于得到哈希链表,指示冲突路径,在另一些实施例中,存储空间中的内容还可以包括用于指示数据存储顺序的指针。用于指示数据存储顺序的指针可以包括第二前指针previous2、第二后指针next2。当第一数据为数据存储空间中第一个存储的数据时,previous2和next2均指向空值,若第一数不为数据存储空间中第一存储的数据时,确定最近一次存储的数据的第四存储空间;将所述第四存储空间的第二后指针指向所述第一数据存储的存储空间;将所述第一数据的存储空间的第二前指针指向所述第四存储空间;将所述第一数据的存储空间的第二后指针设为空值。本实施例中,存储的数据中记录有数据的存储顺序,有利于根据存储顺序对数据进行操作,例如按照存储顺序从后往前显示数据或者从前往后显示数据。
例如,参照图3所示,最先存储的为歌曲1,将歌曲1的第二前指针previous2_1,第二后指针next2_1设为空值;当第二首存储的歌曲为歌曲2时,将next2_1指向歌曲2的存储空间,歌曲2对应previous2_2指向歌曲1的存储空间,next2_2设为空值;当要第三首要存储的歌曲为歌曲3时,将next2_2指向歌曲3的存储空间,歌曲3对应previous2_3指向歌曲2的存储空间,next2_3设为空值,以此类推,通过指针指示数据存储的先后顺序。当要展示歌曲列表时,可以使用指针,将数据按照存储顺序进行展示。
在一些实施例中,将第一数据存储到第一存储空间或第二存储空间之后,即,步骤105和104之后,数据存储空间存储有数据后,可以基于已存储的数据,对数据进行操作,参照图4所示。
步骤401,获取数据操作指令,得到待操作的第二数据的关键字。数据操作指令可以包括:修改、查找、删除等。
步骤402,计算第二数据的关键字的哈希值,得到哈希值映射的第五存储空间。通过哈希函数计算第二数据的关键字的哈希值,由于第五存储空间是哈希值映射的存储空间,因此,第五存储空间位于普通区。
步骤403,第五存储空间中存储的数据的关键字与第二数据的关键字是否相同。若第五存储空间中存储的数据的关键字与第二数据的关键字相同,执行步骤404;若第五存储空间中存储的数据与第二数据不相同,执行步骤405。
例如,第五存储空间中存储的数据的关键字为1,第二数据的关键字为1,则第五存储空间存储的数据即为第二数据,执行步骤404;若第二数据的关键字为2,则执行步骤405。
步骤404,根据第五存储空间,得到第二数据。取出第五存储空间中的数据。
步骤405,若所述第五存储空间中存储的数据与所述第二数据不相同,则根据所述第二数据对应的哈希链表和所述第二数据的关键字,在所述冲突区确定所述第二数据的存储空间,得到第二数据。
具体地,遍历哈希链表中的各存储空间,将当前的存储空间中存储的数据的关键字与第二数据的关键字进行比较,若不同,则将当前的存储空间的第一后指针指向的存储空间作为当前的存储空间;若相同,则确定当前的存储空间为存储第二数据的存储空间,得到第二数据。
例如:参照图3所示,第二数据的关键字为5,hash(5)映射的存储空间,即第五存储空间中存储的数据的关键字为2,两者不相同;则根据第五存储空间的第一后指针next找到哈希链表中的下一个存储空间,该存储空间存储的数据的关键字为3,与5不相同;则根据关键字为3的数据的存储空间的第一后指针找到下一个存储空间,该存储空间的关键字为5,与第二数据的关键字5相同,则该存储空间即为第二数据的存储空间,得到第二数据。
步骤406,根据所述操作指令对所述第二数据进行操作。
若操作指令为查找指令,则将第二数据输出;若操作指令为修改指令,则将第二数据的存储空间中存储的第二数据替换为另一数据,例如歌曲版本改变时,第二数据为歌曲版本1,另一数据为歌曲版本2,将存储空间原存储的歌曲版本1改为歌曲版本2。
若操作指令为删除指令,若第二数据在冲突区中,则将所述第二数据的存储空间清空,并更新所述哈希链表。例如,参照图3所示,若第二数据为歌曲5,则删除歌曲5,将歌曲3的第一后指针指向7,歌曲7的第一前指针指向3。
在一些实施例中,若第二数据在第五存储空间中,则将第五存储空间清空;将哈希链表中第五存储空间指向的下一个存储空间的数据移动至所述第五存储空间,并更新所述哈希链表。例如,第二数据为歌曲2,删除歌曲2,并将歌曲3移动至歌曲2,将移动后的歌曲3所在的存储空间的第一后指针指向歌曲5所在的存储空间,歌曲5所在的存储空间的第一前指针指向移动后的歌曲3所在的存储空间。
本实施例基于上述存储方法得到的存储结构进行数据操作,本实施例基于哈希值直接得到数据映射的存储空间,便于得到待操作的数据,降低查找数据的时间复杂度,并且,在发生哈希冲突时,本实施例通过哈希链表查找数据,使得时间复杂度随着冲突个数的上升不会明显增加,且,本实施例预先创建数据存储空间,数据存储空间分为普通区和冲突区,而不是创建大量的存储空间,使得索引文件尽量小,即本实施例在保证存储索引文件尽量小的情况下,还减小了时间复杂度,有利于避免时间复杂度随着冲突个数的增加明显上升,能适用于微控制单元。而且,本实施例中哈希链表为双向链表,使得在进行数据操作,遍历哈希链表时,能够得到当前的存储空间在哈希链表中的前一个存储空间和后一个存储空间,以此,便于实现哈希链表的操作。
本实施例的数据存储的时间复杂度低,且数据操作时,由于可以通过哈希哈数直接映射到物理地址,确定存储空间,使得大多数的数据的操作都是在O(1)级别,实现了快速的查找,存储,即新增,删除数据,从而能实现在MCU快速查找,存储,即新增,删除数据。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本发明的实施例还涉及一种数据存储装置,如图5所示,包括:获取模块501,用于获取待存储的第一数据的关键字;计算模块502,用于计算所述关键字的哈希值,确定所述关键字的哈希值映射的第一存储空间;所述第一存储空间位于预先创建的数据存储空间中的普通区;存储模块503,用于若所述第一存储空间未存储有数据,则将所述第一数据存储到所述第一存储空间,并创建哈希链表;所述哈希链表用于指示具有相同哈希值的存储空间;若所述第一存储空间存储有数据,则将所述第一数据存储到第二存储空间,并将所述第二存储空间加入所述哈希链表;其中,所述第二存储空间位于所述预先创建的数据存储空间的冲突区。
在一些实施例中,存储模块503进一步用于将位于所述哈希链表末尾的第三存储空间中的第一后指针指向所述第二存储空间;将所述第二存储空间中的第一前指针指向所述第三存储空间;将所述第二存储空间中的第一后指针设为空值,其中,所述第一后指针和第一前指针存储在存储空间中。
在一些实施例中,存储模块503进一步用于确定最近一次存储的数据的第四存储空间;将所述第四存储空间的第二后指针指向所述第一数据存储的存储空间;将所述第一数据的存储空间的第二前指针指向所述第四存储空间;将所述第一数据的存储空间的第二后指针设为空值,其中,第一前指针和第二后指存储在存储空间中。
在一些实施例,存储模块503进一步用于将所述第一数据存储到第一存储空间或将所述第一数据存储到第二存储空间之后,将所述第一数据的存储空间对应的存储标识设为已存储数据标识,其中,所述存储标识位于标志区,所述标志区中的各存储标识用于表示数据存储空间中的各存储空间是否存储有数据;根据所述标志区中的未存储数据标识,在所述冲突区中的确定第二存储空间;将所述第一数据存储到所述第二存储空间。
在一些实施例中,存储模块503进一步用于获取数据操作指令,得到待操作的第二数据的关键字;计算所述第二数据的关键字的哈希值,得到所述哈希值映射的位于所述普通区的第五存储空间;若所述第五存储空间中存储的数据的关键字与所述第二数据的关键字相同,则根据所述第五存储空间,得到第二数据;若所述第五存储空间中存储的数据与所述第二数据不相同,则根据所述第二数据对应的哈希链表和所述第二数据的关键字,在所述冲突区确定所述第二数据的存储空间,得到第二数据;根据所述操作指令对所述第二数据进行操作。
在一些实施例中,存储模块503进一步用于当操作指令为删除指令,若第二数据在所述冲突区中,则将所述第二数据的存储空间清空,并更新所述哈希链表。
在一些实施例中,存储模块503进一步用于当操作指令为删除指令,若所述第二数据在所述第五存储空间中,则将所述第五存储空间清空;将所述哈希链表中位于所述第五存储空间指向的下一个存储空间的数据移动至所述第五存储空间,并更新所述哈希链表。
不难发现,本实施例为与数据存储方法的实施例相对应的系统实施例,本实施例可与第一实施例互相配合实施。数据存储方法的实施例中提到的相关技术细节在本实施例中依然有效,为了减少重复,这里不再赘述。相应地,本实施例中提到的相关技术细节也可应用在第一实施例中。
值得一提的是,本实施例中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施例中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施例中不存在其它的单元。
本发明的实施例涉及一种微控制单元,如图6所示,包括至少一个处理器601;以及,与所述至少一个处理器通信连接的存储器602;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的数据存储方法。
其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
本发明的实施例还涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施例是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (10)
1.一种数据存储方法,其特征在于,应用于微控制单元,所述数据存储方法包括:
获取待存储的第一数据的关键字;
计算所述关键字的哈希值,确定所述关键字的哈希值映射的第一存储空间;所述第一存储空间位于预先创建的数据存储空间中的普通区;
若所述第一存储空间未存储有数据,则将所述第一数据存储到所述第一存储空间,并创建哈希链表;所述哈希链表用于指示具有相同哈希值的存储空间;
若所述第一存储空间存储有数据,则将所述第一数据存储到第二存储空间,并将所述第二存储空间加入所述哈希链表;
其中,所述第二存储空间位于所述预先创建的数据存储空间的冲突区。
2.根据权利要求1所述的数据存储方法,其特征在于,所述数据存储空间中的存储空间中存储有第一前指针和第一后指针;所述将所述第二存储空间加入哈希链表,包括:
将位于所述哈希链表末尾的第三存储空间中的第一后指针指向所述第二存储空间;
将所述第二存储空间中的第一前指针指向所述第三存储空间;
将所述第二存储空间中的第一后指针设为空值。
3.根据权利要求1所述的数据存储方法,其特征在于,所述数据存储空间中的存储空间中存储有第二前指针和第二后指针;所述将所述第一数据存储到第一存储空间或将所述第一数据存储到第二存储空间之后,还包括:
确定最近一次存储的数据的第四存储空间;
将所述第四存储空间的第二后指针指向所述第一数据存储的存储空间;
将所述第一数据的存储空间的第二前指针指向所述第四存储空间;
将所述第一数据的存储空间的第二后指针设为空值。
4.根据权利要求1所述的数据存储方法,其特征在于,所述将所述第一数据存储到第一存储空间或将所述第一数据存储到第二存储空间之后,还包括:
将所述第一数据的存储空间对应的存储标识设为已存储数据标识,其中,所述存储标识位于标志区,所述标志区中的各存储标识用于表示数据存储空间中的各存储空间是否存储有数据;
所述将所述第一数据存储到第二存储空间,包括:
根据所述标志区中的未存储数据标识,在所述冲突区中的确定第二存储空间;
将所述第一数据存储到所述第二存储空间。
5.根据权利要求1至4中任一项所述的数据存储方法,其特征在于,所述将所述第一数据存储到第一存储空间或第二存储空间之后,还包括:
获取数据操作指令,得到待操作的第二数据的关键字;
计算所述第二数据的关键字的哈希值,得到所述哈希值映射的位于所述普通区的第五存储空间;
若所述第五存储空间中存储的数据的关键字与所述第二数据的关键字相同,则根据所述第五存储空间,得到第二数据;
若所述第五存储空间中存储的数据与所述第二数据不相同,则根据所述第二数据对应的哈希链表和所述第二数据的关键字,在所述冲突区确定所述第二数据的存储空间,得到第二数据;
根据所述操作指令对所述第二数据进行操作。
6.根据权利要求5所述的数据存储方法,其特征在于,所述操作指令包括:删除指令、修改指令和查找指令;
若所述操作指令为删除指令,所述根据所述操作指令对所述第二数据进行操作,包括:
若所述第二数据在所述冲突区中,则将所述第二数据的存储空间清空,并更新所述哈希链表。
7.根据权利要求6所述的数据存储方法,其特征在于,若接收到删除指令,所述根据所述操作指令对所述第二数据进行操作,包括:
若所述第二数据在所述第五存储空间中,则将所述第五存储空间清空;
将所述哈希链表中位于所述第五存储空间指向的下一个存储空间的数据移动至所述第五存储空间,并更新所述哈希链表。
8.一种数据存储装置,其特征在于,包括:
获取模块,用于获取待存储的第一数据的关键字;
计算模块,用于计算所述关键字的哈希值,确定所述关键字的哈希值映射的第一存储空间;所述第一存储空间位于预先创建的数据存储空间中的普通区;
存储模块,用于若所述第一存储空间未存储有数据,则将所述第一数据存储到所述第一存储空间,并创建哈希链表;所述哈希链表用于指示具有相同哈希值的存储空间;若所述第一存储空间存储有数据,则将所述第一数据存储到第二存储空间,并将所述第二存储空间加入所述哈希链表;其中,所述第二存储空间位于所述预先创建的数据存储空间的冲突区。
9.一种微控制单元,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至7中任一所述的数据存储方法。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一所述的数据存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110620030.2A CN113312352A (zh) | 2021-06-03 | 2021-06-03 | 数据存储方法、装置、微控制单元和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110620030.2A CN113312352A (zh) | 2021-06-03 | 2021-06-03 | 数据存储方法、装置、微控制单元和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113312352A true CN113312352A (zh) | 2021-08-27 |
Family
ID=77377260
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110620030.2A Pending CN113312352A (zh) | 2021-06-03 | 2021-06-03 | 数据存储方法、装置、微控制单元和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113312352A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0962697A (ja) * | 1995-08-29 | 1997-03-07 | Nec Corp | 商品コード検索方式 |
CN102314485A (zh) * | 2011-07-27 | 2012-01-11 | 中国科学院计算机网络信息中心 | 哈希表添加、查找和删除方法及装置 |
CN104598519A (zh) * | 2014-12-11 | 2015-05-06 | 浙江浙大中控信息技术有限公司 | 一种基于连续内存的数据库索引系统及处理方法 |
-
2021
- 2021-06-03 CN CN202110620030.2A patent/CN113312352A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0962697A (ja) * | 1995-08-29 | 1997-03-07 | Nec Corp | 商品コード検索方式 |
CN102314485A (zh) * | 2011-07-27 | 2012-01-11 | 中国科学院计算机网络信息中心 | 哈希表添加、查找和删除方法及装置 |
CN104598519A (zh) * | 2014-12-11 | 2015-05-06 | 浙江浙大中控信息技术有限公司 | 一种基于连续内存的数据库索引系统及处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108153757B (zh) | 一种哈希表管理的方法和装置 | |
CN109426619B (zh) | 访问快闪存储器模块的方法及相关闪存控制器与电子装置 | |
US9946462B1 (en) | Address mapping table compression | |
CN109076021B (zh) | 数据处理的方法和装置 | |
CN108121813B (zh) | 数据管理方法、装置、系统、存储介质及电子设备 | |
CN110704330B (zh) | 数据存取控制装置及方法 | |
JP2007523412A (ja) | メモリ割当て | |
KR20200122994A (ko) | 키 값 첨부 | |
KR20210124381A (ko) | 표시자를 이용해 부분 데이터 전송을 가능하게 하는 시스템, 방법 및 장치 | |
US20170160940A1 (en) | Data processing method and apparatus of solid state disk | |
CN110618883B (zh) | 一种用于共享内存链表的方法、装置、设备及存储介质 | |
CN107943727B (zh) | 一种高效dma控制器 | |
TWI813001B (zh) | 加速比較函式執行的方法及加速比較函式執行的系統 | |
CN113835639B (zh) | 一种i/o请求处理方法、装置、设备及可读存储介质 | |
US9400817B2 (en) | In-place index repair | |
CN112486988A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN115658588B (zh) | 一种axi总线的id压缩装置及方法 | |
CN113312352A (zh) | 数据存储方法、装置、微控制单元和存储介质 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
EP4134802A1 (en) | Method and apparatus for data access of nand flash file, and storage medium | |
CN115658625A (zh) | 数据解压系统、图形处理系统、装置、设备及解压方法 | |
CN116383168A (zh) | 跨数据库的数据迁移比对方法、装置、设备及存储介质 | |
CN112084141A (zh) | 一种全文检索系统扩容方法、装置、设备及介质 | |
KR102697447B1 (ko) | 하프-매치(half match) 중복 제거를 수행하는 메모리 시스템 및 이의 동작 방법 | |
US11829398B2 (en) | Three-dimensional probabilistic data structure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210827 |