CN116226151A - 一种数据存储、读取和删除的方法和装置 - Google Patents
一种数据存储、读取和删除的方法和装置 Download PDFInfo
- Publication number
- CN116226151A CN116226151A CN202310223133.4A CN202310223133A CN116226151A CN 116226151 A CN116226151 A CN 116226151A CN 202310223133 A CN202310223133 A CN 202310223133A CN 116226151 A CN116226151 A CN 116226151A
- Authority
- CN
- China
- Prior art keywords
- data
- segment
- information
- stored
- read
- 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
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/23—Updating
-
- 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
-
- 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/24552—Database cache management
-
- 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/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据存储、读取和删除的方法和装置,涉及大规模数据管理技术领域。该方法的一具体实施方式包括:响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。该实施方式有效解决了大数据量数据在Redis缓存中的存储、读取和删除问题,且通过对分段元信息的更新状态的监听,保证了数据存储和读取的准确性。
Description
技术领域
本发明涉及大规模数据管理技术领域,尤其涉及一种数据存储、读取和删除的方法和装置。
背景技术
Redis即远程字典服务,因其具有快速的读写速度,支持数据持久化,以及多场景的数据类型等特点,是业界常用的高并发场景下的数据缓存方案。通常Redis的高性能操作只适于小数据量的数据,对于大数据量的数据,例如大于5M的数据,读写经常会出现异常现象。目前常用的解决方案是在Redis服务端调整系统的时间阈值,并新增重试逻辑来适应大数据量数据,或者将大数据量的数据单独存储在其他系统。
在实现本发明过程中,发明人发现现有技术中存在如下问题:
通过调整系统的参数和重试逻辑来对数据进行适应的方法,虽然可以解决一小部分数据量不是很大的数据读写问题,不过并不能从根本上解决大数据量数据的读写问题,还会影响该Redis上其他数据的正常业务;而单独存储的方法不仅直接影响读取速度,而且还会占用更多的软硬件资源,不能很好的满足实际应用。
发明内容
有鉴于此,本发明实施例提供一种数据存储、读取和删除的方法和装置,根据获取到的待存储数据的当前段号分配信息以及分段规则,对待存储数据进行分段处理和存储,并在分段元信息状态为未更新的情况下,更新分段元信息;基于已经存储的数据,根据分段元信息进行数据读取和删除操作。本发明实施例的方法有效解决了大数据量数据在Redis缓存中的存储、读取和删除问题,且通过对分段元信息的更新状态的监听,保证了数据存储和读取的准确性。
为实现所述目的,根据本发明实施例的第一方面,提供了一种数据存储的方法,包括:
响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;
根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;
在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。
可选地,获取待存储数据的当前段号分配信息之前,所述方法包括:确定所述待存储数据的数据量超过预设的处理阈值。
可选地,所述方法包括:在对所述待存储数据进行分段处理之前,获取所述待存储数据对应的分段元信息,将所述分段元信息存储到本地缓存,根据所述分段元信息确定所述待存储数据;在根据所述更新信息更新所述分段元信息之后,从所述本地缓存中获取所述分段元信息,根据所述分段元信息,删除所述分段元信息对应的历史存储数据。
可选地,根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,包括:根据预设的分段规则中的分段阈值,将所述待存储数据拆分成多个分段数据;根据所述当前段号分配信息中的前缀信息和编号信息,确定所述待存储数据的当前分段起始段号;根据所述当前分段起始段号和所述分段数据的个数,为每个所述分段数据分配对应的分段数据索引;确定所述分段元信息的更新信息,包括:将所述当前分段起始段号和所述分段数据的个数作为所述分段元信息的更新信息。
可选地,存储分段处理后的数据,包括:在所述分段数据的个数超过预设的数量阈值的情况下,根据每个所述分段数据的分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量存储。
可选地,存储分段处理后的数据之后,所述方法还包括:在所述更新状态为已更新的情况下,将所述分段处理后的数据删除,重新获取待存储数据的当前段号分配信息,并监听所述分段元信息的更新状态,根据重新获取的当前段号分配信息和预设的分段规则对所述待存储数据进行分段处理。
根据本发明实施例的第二方面,提供一种数据读取的方法,包括:
响应于数据读取请求,获取待读取数据的分段元信息;所述待读取数据是采用本发明实施例第一方面任一数据存储的方法存储的;
根据所述分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引;
根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据;将所述待读取数据对应的分段数据进行组装,得到所述待读取数据。
可选地,所述方法还包括:在读取所述待读取数据对应的分段数据失败的情况下,重新获取所述待读取数据的分段元信息,根据重新读取的分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引,进行分段数据的读取。
可选地,根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据,包括:在所述待读取数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量读取。
根据本发明实施例的第三方面,提供一种数据删除的方法,包括:
响应于数据删除请求,获取待删除数据对应的分段元信息;所述待删除数据是采用本发明实施例第一方面任一数据存储的方法存储的;
根据所述分段元信息中的分段数量和分段起始段号,确定所述待删除数据对应的分段数据索引;
根据所述待删除数据对应的分段数据索引,删除所述待删除数据。
可选地,根据所述待删除数据对应的分段数据索引,删除所述待删除数据,包括:在所述待删除数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量删除。
根据本发明实施例的第四方面,提供一种数据存储的装置,包括:
第一元信息获取模块,用于响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;
第一数据分段模块,用于根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;
数据存储模块,用于在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。
根据本发明实施例的第五方面,提供一种数据读取的装置,包括:
第二元信息获取模块,用于响应于数据读取请求,获取待读取数据的分段元信息;所述待读取数据是采用本发明实施例第一方面任一数据存储的方法存储的;
第二数据分段模块,用于根据所述分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引;
数据读取模块,用于根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据;将所述待读取数据对应的分段数据进行组装,得到所述待读取数据。
根据本发明实施例的第六方面,提供一种数据删除的装置,包括:
第三元信息获取模块,用于响应于数据删除请求,获取待删除数据对应的分段元信息;所述待删除数据是采用本发明实施例第一方面任一数据存储的方法存储的;
第三数据分段模块,用于根据所述分段元信息中的分段数量和分段起始段号,确定所述待删除数据对应的分段数据索引;
数据删除模块,用于根据所述待删除数据对应的分段数据索引,删除所述待删除数据。
根据本发明实施例的第七方面,提供一种数据存储、读取和删除的电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一方面提供的方法。
根据本发明实施例的第八方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一、二、三方面提供的方法。
根据本发明实施例的第九方面,提供了一种计算机程序产品。本申请实施例的一种计算机程序产品,包括计算机程序,程序被处理器执行时实现本申请实施例提供的数据查询方法。
所述发明中的一个实施例具有如下优点或有益效果:通过响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听待存储数据对应的分段元信息的更新状态;根据预设的分段规则和当前段号分配信息,对待存储数据进行分段处理,存储分段处理后的数据,并确定分段元信息的更新信息;在更新状态为未更新的情况下,根据更新信息更新所述分段元信息,以及基于已经存储的数据,根据分段元信息进行数据读取和删除操作的技术方案,有效解决了大数据量数据在Redis缓存中的存储、读取和删除问题,且通过对分段元信息的更新状态的监听,保证了数据存储和读取的准确性。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的数据存储的方法的主要流程的示意图;
图2是本发明实施例待存储数据的分段处理原理示意图;
图3是本发明实施例的多线程批量存储示意图;
图4是本发明实施例的数据存储的详细流程示意图;
图5是根据本发明实施例的数据读取的方法的主要流程的示意图;
图6是本发明实施例的多线程批量读取示意图;
图7是本发明实施例的数据读取的流程示意图;
图8是根据本发明实施例的数据删除的方法的主要流程的示意图;
图9是本发明实施例的数据删除的流程示意图;
图10是根据本发明实施例的数据存储的装置的主要模块示意图;
图11是根据本发明实施例的数据读取的装置的主要模块示意图;
图12是根据本发明实施例的数据删除的装置的主要模块示意图;
图13是本发明实施例可以应用于其中的示例性系统架构图;
图14是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
需要说明的是,本公开的技术方案中,所涉及的用户个人信息的获取、存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
目前对于大数据量数据的Redis读写问题,通过调整系统的参数和重试逻辑来对数据进行适应的方法,虽然可以解决一小部分数据量不是很大的数据读写问题,不过并不能从根本上解决大数据量数据的读写问题,还会影响该Redis上其他数据的正常业务;而单独存储的方法不仅直接影响读取速度,而且还会占用更多的软硬件资源,不能很好的满足实际应用。
为了解决现有技术中存在的上述问题,本发明提出一种数据存储、读取和删除的方法,根据获取到的待存储数据的当前段号分配信息以及分段规则,对待存储数据进行分段处理和存储,并在分段元信息状态为未更新的情况下,更新分段元信息;基于已经存储的数据,根据分段元信息进行数据读取和删除操作。本发明实施例的方法有效解决了大数据量数据在Redis缓存中的存储、读取和删除问题,且通过对分段元信息的更新状态的监听,保证了数据存储和读取的准确性。
在本发明的实施例介绍中,所涉及的名词及其含义如下:
CAS:compare and swap,是一种解决在并发场景下修改资源的乐观锁机制。修改前,拿到该资源的值是A,然后修改成B,提交时假定资源值仍是A时才能修改成B,否则修改不能成功。CAS会产生ABA问题,即如果线程1修改前拿到资源的值是A,然后线程2也拿到了资源的值是A,线程2将资源值修改后仍是A,然后线程2提交成功,此时线程1将资源值修改成B,线程1提交时,会认为该资源值在它修改之前没有被其它线程修改过,就会提交成功,但是实际上资源值已经被线程2修改过;
Redis事务:Redis的事务与一般关系型数据库的事务不同。在事务开始前支持watch一组key,其value作为乐观锁观察的对象,在Redis服务端执行事务时,先检测watch相关的key对应的value是否被修改过,如果被修改过,直接放弃执行事务。如果没有被修改过,可以执行事务。Redis的watch不会有ABA问题,因为Redis底层是单线程的,并不存在并发情况,因此不采用CAS机制。放到事务中的一串命令执行互不影响。即使某个执行失败,也不会影响其它命令的执行;
slot:Redis集群内置了16384个slot,Redis集群中的每个节点都负责若干个slot,向Redis集群读写key、value时,会根据key的哈希算法模除slot数,定位到该key所在的slot后,才能进行读写操作。
脏读:一个事务读到了另一个事务没有提交的数据;
脏写:一个事务修改了另一个事务未提交的修改过的数据;
incrby:是一种原子性递增或递减操作;
原子性:指一个操作是不可分割的,要么都发生,要么都不发生。
图1是根据本发明实施例的数据存储的方法的主要流程的示意图,如图1所示,本发明实施例的数据存储的方法包括如下的步骤S101至步骤S103。
步骤S101、响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态。
根据本发明的一个实施例,获取待存储数据的当前段号分配信息之前,所述方法包括:确定所述待存储数据的数据量超过预设的处理阈值。
具体地,为了解决大数据量数据在Redis中的存储问题,本发明实施例主要面向大数据量数据,此中的数据量可以理解为数据所占的存储空间量,也可以理解为数据中包括的子数据条数等,本发明不做具体限定。在进行数据存储之前需要先对待存储数据的数据量进行判断,确定待存储数据的数据量超过预设的处理阈值,该处理阈值可以根据业务经验进行尝试设定,也可以根据场景需要进行灵活配置。
进一步地,在并发环境下,对于Redis中存储的Key-Value数据,可能会有多线程同时就相同的Key执行不同数据值的存储操作,例如多个业务账号通过多线程并发对某一数据存储单元或者存储地址的数据进行数据更新操作。本发明实施例考虑到多线程并发环境下可能发生的并发冲突问题,在存储处理前为待存储数据分配用于记录分段信息的分段元信息,将待存储数据的原始Key作为分段元信息的Key,对分段元信息的更新状态进行监听。具体为:解析接收到的数据存储请求,获取后续对待存储数据的进行分段处理需要的当前段号分配信息,以及待存储数据的原始Key,根据原始Key可以获取待存储数据对应的分段元信息,通过Redis的watch机制监听分段元信息的Key来获取分段元信息在后续的处理流程中的更新状态。
本发明实施例中的段号分配信息是一个动态实时更新的数据,具有设定的初始值,用于确定待存储数据存储于Redis数据库中的索引。由于本发明实施例主要应用于多线程同时就相同的Key执行不同数据值的存储操作,段号分配信息会根据每次的存储操作进行自增或者自减的动态更新,为后续数据存储提供专用唯一的索引。例如可以将数据库分库分表中的某个分表作为段号分配的范围,段号分配信息在这个指定的范围内进行自增或者自减更新,也可以将整个数据库的存储空间作为段号分配的范围,还可以将不同的业务账号作为段号分配的范围,不同的业务账号关联不同的段号分配范围,以满足各种业务场景下的段号分配需要。
步骤S102、根据所述预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息。
需要说明地,在对待存储数据进行分段处理之前,可以使用一些压缩比和解压速度合适的算法,或者一些高效的序列化算法对待存储数据进行压缩,以达到尽量减小数据量的目的。另外,本发明实施例中的待存储数据可以是字节数组类型的数据,也可以是将其它数据类型转换为字节数组类型的数据,以便于分段拆分处理。
根据本发明的一个实施例,所述方法包括:在对所述待存储数据进行分段处理之前,获取所述待存储数据对应的分段元信息,将所述分段元信息存储到本地缓存,根据所述分段元信息确定所述待存储数据;在根据所述更新信息更新所述分段元信息之后,从所述本地缓存中获取所述分段元信息,根据所述分段元信息,删除所述分段元信息对应的历史存储数据。
具体地,在对待储存的数据进行分段处理前,获取分段元信息,将分段元信息保存在本地,一方面当待存储数据为非确定的数据,而需要通过对当前存储数据进行逻辑运算才能确定时,通过分段元信息获取当前存储数据,再对当前存储数据进行逻辑运算后,得到待存储数据的具体数值;另一方面在根据所述更新信息更新所述分段元信息,完成本次待存储数据的存储后,待存储数据已经存储生效,而上述的当前存储数据已经成为历史存储数据,通过缓存中的存储的在数据存储请求时获取到的分段元信息,可以将已经存储的历史存储数据删除。
根据本发明的另一个实施例,根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,包括:根据预设的分段规则中的分段阈值,将所述待存储数据拆分成多个分段数据;根据所述当前段号分配信息中的前缀信息和编号信息,确定所述待存储数据的当前分段起始段号;根据所述当前分段起始段号和所述分段数据的个数,为每个所述分段数据分配对应的分段数据索引;确定所述分段元信息的更新信息,包括:将所述当前分段起始段号和所述分段数据的个数作为所述分段元信息的更新信息。
具体地,根据预设的分段规则中的分段阈值,对待存储数据进行拆分,例如待存储数据大小为101K,分段阈值为10K,则对101K按照10K进行拆分,前10个分段大小都是10K,第11个分段的大小为1K,得到11个分段数据。
进一步地,考虑到本发明实施例中的多线程并发场景,本发明实施例使用Redis的incrby命令这种原子性的计数方法,并设定一种非业务类型的Key-Value数据:段号分配信息,其Key用于表征预设的前缀信息,可以是自定义的一个字符串;对应的Value值为可分配的编号信息,此编号信息是随着待存储数据的存储操作而实时更新的,通过前缀信息和编号信息可以确定当前的分段起始段号。例如定义段号分配信息的Key为segm,其对应的当前Value为0,相应地,可以确定当前分段起始段号为segm-0。
根据上述的分段数据的个数和当前分段起始段号,可以为每个分段数据分配对应的分段数据索引。例如对于分段数据的个数为5,获取当前的段号分配信息,对段号分配信息使用Redis的原子性计数incrby命令,将段号分配数据的Value值增加5后返回计数结果5,incrby的计数结果为5,可知后续可分配的编号信息为5,也就是当前段号的最后一个分段数据的编号为4,结合分段规则中约定的分段数据索引定义规则为:基于待存储数据的原始Key-起始段号的递增,可以得到5个分段数据对应的分段数据索引分别为:原始Key-segm0、原始Key-segm1、原始Key-segm2、原始Key-segm3和原始Key-segm4。需要说明的是本发明实施例设定incrby每次递增1的计数,实际使用中通过对分段规则中的分段数据索引的定义规则的设置,可以按照指定数量的递增或者递减计数,本发明实施例中不做具体限定。
另外地,分段元信息主要包括分段数量和分段起始段号,通过上述处理,可以将上述当前分段起始段号和分段数据的个数作为待存储数据对应的分段元信息的更新信息
通过上述使用Redis的原子性计数incrby命令为每个线程申请专属唯一的分段起始段号,基于分段起始段号,为每个分段数据分配对应的分段数据索引,避免了线程之间各个分段数据的索引分配的并发问题。
图2是本发明实施例待存储数据的分段处理原理示意图。图中对待存储数据的原始Key和Value进行分段拆分,根据预设的分段规则中的分段阈值,将所述待存储数据拆分成n+1个分段数据,得到分段数量为n+1,对应于图中分段元信息Value中的segment_count:分段数量;根据获取到的当前段号分配信息,可以确定当前分段起始段号,也就是图中的分段元信息Value中的start_segment:起始段号;将待存储数据的原始Key作为分段元信息的Key,得到了图中分段元信息。根据预设的分段规则,将原始Key-起始段号作为第一个分段数据的分段数据索引Key,按照分段数据的顺序,为每个分段数据按照每次递增1的规则分配对应的分段数据索引Key,即为原始Key-起始段号,原始Key-起始段号+1,原始Key-起始段号+2,……,原始Key-起始段号+n。
根据本发明的再一个实施例,存储分段处理后的数据,包括:在所述分段数据的个数超过预设的数量阈值的情况下,根据每个所述分段数据的分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量存储。
具体地,通过上述对数据的分段处理,将大数据量数据拆分为若干个分段数据,可以对通过各个分段数据对应的分段数据索引,将分段数据存储在Redis中。需要注意的是:本次分段数据的存储仅是将分段数据存储到Redis中,因为对应的分段元信息内容并未更新,还是最初响应于数据存储请求,获取到的分段元信息,所以对外不可见,外部接口不会读取到这些分段数据,进而避免了脏读问题。
进一步地,为了提升存储效率,在分段数据的个数超过预设的数量阈值的情况下,可以根据各个分段数据索引Key,通过Redis的keyslot命令获取到各个分段数据索引Key对应的缓存槽位slot,将相同slot的分段数据放在一个大小合适的批次中,可以使用Redis的mset命令将相同的slot的分段数据进行多批次批量存储,为了进一步加快存储速度,可以采用多线程并发存储的方式,同时向多个Redis节点发送存储请求。
图3是本发明实施例的多线程批量存储示意图。图中将具有相同的slot的分段数据放在一个线程中,如分段数据1、分段数据3,……,分段数据9具有相同的slot,集中放在线程1,并采用n个线程同时写入多个Redis节点,实现了多线程批量存储,提高了存储效率。
通过上述多线程批量的存储,可以有效减少分段数据存储中对Redis的RPC调用,大大提升分段数据的存储速度,从而提高存储效率。
步骤S103、在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。
具体地,在完成上述分段数据的存储之后,使用muti命令开启更新分段元信息的Redis事务;将上述分段处理得到的分段数量和分段起始段号作为更新信息,输入分段元信息的更新指令;提交Redis事务,获取待存储数据对应的分段元信息的更新状态,确定相对于接收到数据存储请求时的分段元信息更新状态未发生更新的情况下,也就是从最初监听分段元信息开始,分段元信息未被其他线程修改过,提交成功,完成分段元信息的更新生效。
另外地,提交成功后,待存储数据已经存储成功,相应地,在最初接收数据存储请求,根据本地保存的分段元信息,获取到的分段元信息所指向的历史分段数据已经不再需要了,可以将历史分段数据删除。
根据本发明的另一个实施例,在所述更新状态为已更新的情况下,将所述分段处理后的数据删除,重新获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态,根据重新获取的当前段号分配信息和预设的分段规则对所述待存储数据进行分段处理。
具体地,如果更新状态为已更新,说明从最初监听分段元信息的更新状态到提交更新分段元信息的Redis事务之间,有其它线程已经更新了分段元信息,那么本次的更新分段元信息的Redis事务失败,相应地,本次待存储数据的存储操作失败,则需要回滚删除本次已经存储到Redis中的分段数据,由于Redis事务本身没有回滚机制,可以自行编写一段删除数据的代码。另外地,为了更好的满足实际应用,可以设置重试次数,在提交Redis事务失败后,可以重新获取最新的当前段号分配信息,并监听分段元信息的更新状态,根据重新获取的当前段号分配信息和预设的分段规则对最新待存储数据进行分段处理。
通过分段元信息的更新状态来确定是否允许提交更新分段元信息的Redis事务,一旦分段元信息被其他线程修改过,提交Redis事务失败,不允许更新分段元信息,可以有效避免对分段元信息的脏写问题。
图4是本发明实施例的数据存储的详细流程示意图。响应于数据存储请求,获取待存储数据的当前段号分配信息,将存储请求中待储存数据的原始Key作为待存储数据对应的分段元信息的Key。为了最大程度上避免脏读、脏写问题,在接收到数据存储请求时,即使用Redis的Watch机制,通过监听分段元信息的的Key来开启对分段元信息的更新状态的监听;并根据分段元信息的Key读取分段元信息,为了最大程度地保证分段元信息未被修改过,在本步骤中加入判断逻辑,如果读取失败说明分段元信息已经被其它线程修改过,需要取消本次监听(unwatch),重新获取最新的段号分配信息,重新监听分段元信息的的Key,重新读取最新的分段元信息;如果读取成功,则根据预设的分段规则,对待存储数据进行分段处理,得到分段数据;根据分段数据的个数,以及确定的分段起始段号,为各个分段数据分配对应的分段数据索引;将分段数据按照对应的分段数据索引进行存储;并确定分段元信息的更新信息;调用更新分段元信息的Redis事务,开始执行Redis事务;设置更新元信息的指令;提交更新分段元信息的Redis事务,确定监听的分段元信息的更新状态为未更新的情况下,提交更新分段元信息的Redis事务成功,更新分段元信息,数据存储成功,提交Redis事务成功;并将在接收到数据存储请求时,读取到的分段元信息对应的历史分段数据删除;如果监听的分段元信息的更新状态为更新状态,说明本次数据存储失败,Redis事务提交失败,将本次分段拆分的分段数据删除。
通过上述数据存储的流程,可以看到本发明实施例通过两个阶段的存储提交(分段数据的存储和分段元数据的提交更新),结合Redis事务在提交时会判断分段元信息的更新状态,实现了大数据量数据的存储。鉴于Redis的watch机制不基于CAS,不会有ABA的问题,也就是说,即使其它线程修改了分段元信息,但内容没变,Redis依然会认为元信息被修改过,有效避免了数据的脏读和脏写问题,最大程度保证了数据存储和读取的准确性。
图5是根据本发明实施例的数据读取的方法的主要流程的示意图,如图5所示,本发明实施例的数据读取的方法包括如下的步骤S501至步骤S503。
步骤S501、响应于数据读取请求,获取待读取数据的分段元信息;所述待读取数据是采用本发明实施例第一方面任一数据存储的方法存储的。
具体地,基于上述数据存储的方法,对已存储的数据进行读取操作,解析数据读取请求中的待读取数据的原始Key,将原始Key作为待读取数据的分段元信息Key,根据分段元信息Key获取分段元信息。
步骤S502、根据所述分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引。
具体地,根据分段元信息中的分段数量和分段起始段号,以分段起始段号为起点,按照预设的分段规则中分段数据索引的增量,确定待读取数据对应的分段数据索引。
步骤S503、根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据;将所述待读取数据对应的分段数据进行组装,得到所述待读取数据。
根据本发明的一个实施例,根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据,包括:在所述待读取数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量读取。
具体地,在待读取数据对应的分段数量超过预设的数量阈值的情况下,与上述多线程批量存储相似,可以根据各个分段数据索引Key,通过Redis的keyslot命令获取到各个分段数据索引Key对应的缓存槽位slot,将相同slot的分段数据索引放在一个大小合适的批次中,可以使用Redis的mset命令将存储于相同的slot的分段数据进行多批次批量读取,为了进一步加快读取速度,可以采用多线程并发读取的方式,同时读取多个Redis节点。
图6是本发明实施例的多线程批量读取示意图。图中将具有相同的slot的分段数据索引放在一个读取线程中,一次读取Redis节点相同slot的多个分段数据,采用n个线程进行批量读取。
通过上述多线程批量的分段数据读取,可以有效减少分段数据读取中对Redis的RPC调用,大大提升分段数据的读取速度,从而提高读取效率。
进一步地,根据读取到的分段数据,结合分段数据索引中的编号顺序,按照顺序进行分段数据的组装,最终得到待读取数据。此中对于字节数组类型的待读取数据可以进行直接组装,如果是其它经过类型转换才得到字节数值类型,还需要进行类型转换,转换为初始的数据类型,以便满足实际应用。
根据本发明的另一个实施例,在读取所述待读取数据对应的分段数据失败的情况下,重新获取所述待读取数据的分段元信息,根据重新读取的分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引,进行分段数据的读取。
具体地,如果某个分段数据不存在,读取分段数据失败,说明在读取的过程中,分段元信息已经更新发生变化,此时需要重新获取待读取数据的分段元信息,重新执行基于重新获取到的新的分段元信息的数据读取操作。
图7是本发明实施例的数据读取的流程示意图。将接收到的数据读取请求中的待读取数据的原始Key作为待读取数据对应的分段元信息的Key,获取分段元信息;根据分段元信息中的分段数量和分段起始段号,得到分段数据索引,按照分段数据索引读取分段数据;如果分段数据读取成功,再根据分段数据索引中包括的顺序信息,按照顺序对分段数据进行组装,得到待读取数据;如果分段数据读取失败,则本次读取失败,需要重新根据读取请求中的原始Key,读取最新的分段元信息,进而读取新的分段数据,对新的分段数据进行组装。
图8是根据本发明实施例的数据删除的方法的主要流程的示意图,如图8所示,本发明实施例的数据读取的方法包括如下的步骤S801至步骤S803。
步骤S801、响应于数据删除请求,获取待删除数据对应的分段元信息;所述待删除数据是采用本发明实施例第一方面任一数据存储的方法存储的。
具体地,基于上述数据存储的方法,对已存储的数据进行删除操作,解析数据删除请求中的待删除数据的原始Key,将原始Key作为待删除数据的分段元信息Key,根据分段元信息Key获取分段元信息。
步骤S802、根据所述分段元信息中的分段数量和分段起始段号,确定所述待删除数据对应的分段数据索引。
具体地,根据分段元信息中的分段数量和分段起始段号,以分段起始段号为起点,按照预设的分段规则中分段数据索引的增量,确定待删除数据对应的分段数据索引。
步骤S803、根据所述待删除数据对应的分段数据索引,删除所述待删除数据。
根据本发明的一个实施例,根据所述待删除数据对应的分段数据索引,删除所述待删除数据,包括:在所述待删除数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量删除。
具体地,根据上述确定的待删除数据对应的分段数据索引,对待删除数据进行删除,在分段数量超过预设的数量阈值的情况下,与上述多线程批量读取相似,可以根据各个分段数据索引Key,通过Redis的keyslot命令获取到各个分段数据索引Key对应的缓存槽位slot,将相同slot的分段数据索引放在一个大小合适的批次中,可以使用Redis的del命令将存储于相同的slot的分段数据进行多批次批量删除,为了进一步加快删除速度,可以采用多线程并发删除的方式,同时删除多个Redis节点。通过多线程批量的删除分段数据,可以有效减少删除分段数据中对Redis的RPC调用,大大提升分段数据的删除速度,从而提高删除效率。
图9是本发明实施例的数据删除的流程示意图。将接收到的数据删除请求中的待删除数据的原始Key作为待删除数据对应的分段元信息的Key,获取分段元信息;根据分段元信息中的分段数量和分段起始段号,得到分段数据索引,按照分段数据索引删除分段数据,并删除分段元信息。
图10是根据本发明实施例的数据存储的装置的主要模块示意图。如图10所示,数据存储的装置1000主要包括第一元信息获取模块1001、第一数据分段模块1002和数据存储模块1003。
第一元信息获取模块1001,用于响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;
第一数据分段模块1002,用于根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;
数据存储模块1003,用于在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。
根据本发明的一个实施例,所述数据存储的装置1000还包括数据量确定模块(图中未示出),用于:获取待存储数据的当前段号分配信息之前,确定所述待存储数据的数据量超过预设的处理阈值。
根据本发明的另一个实施例,所述数据存储的装置1000还包括分段待存储数据确定模块(图中未示出),用于:在对所述待存储数据进行分段处理之前,获取所述待存储数据对应的分段元信息,将所述分段元信息存储到本地缓存,根据所述分段元信息确定所述待存储数据;所述数据存储的装置1000还包括数据删除模块(图中未示出),用于:在根据所述更新信息更新所述分段元信息之后,从所述本地缓存中获取所述分段元信息,根据所述分段元信息,删除所述分段元信息对应的历史存储数据。
根据本发明的再一个实施例,所述第一数据分段模块1002,还用于:根据预设的分段规则中的分段阈值,将所述待存储数据拆分成多个分段数据;根据所述当前段号分配信息中的前缀信息和编号信息,确定所述待存储数据的当前分段起始段号;根据所述当前分段起始段号和所述分段数据的个数,为每个所述分段数据分配对应的分段数据索引;将所述当前分段起始段号和所述分段数据的个数作为所述分段元信息的更新信息。
根据本发明的又一个实施例,所述第一数据分段模块1002,还用于:在所述分段数据的个数超过预设的数量阈值的情况下,根据每个所述分段数据的分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量存储。
根据本发明的再一个实施例,所述数据存储的装置1000还包括数据删除模块(图中未示出),用于:存储分段处理后的数据之后,在所述更新状态为已更新的情况下,将所述分段处理后的数据删除,重新获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态,根据重新获取的当前段号分配信息和预设的分段规则对所述待存储数据进行分段处理。
图11是根据本发明实施例的数据读取的装置的主要模块示意图。如图11所示,数据读取的装置1100主要包括第二元信息获取模块1101、第二数据分段模块1102和数据读取模块1103。
第二元信息获取模块1101,用于响应于数据读取请求,获取待读取数据的分段元信息;所述待读取数据是采用本发明实施例第一方面任一数据存储的方法存储的;
第二数据分段模块1102,用于根据所述分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引;
数据读取模块1103,用于根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据;将所述待读取数据对应的分段数据进行组装,得到所述待读取数据
根据本发明的一个实施例,所述数据读取的装置1100还包括读取确定模块(图中未示出),用于:在读取所述待读取数据对应的分段数据失败的情况下,重新获取所述待读取数据的分段元信息,根据重新读取的分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引,进行分段数据的读取。
根据本发明的另一个实施例,所述数据读取模块1103,还用于:在所述待读取数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量读取。
图12是根据本发明实施例的数据删除的装置的主要模块示意图。如图12所示,数据删除的装置1200主要包括第三元信息获取模块1201、第三数据分段模块1202和数据删除模块1203。
第三元信息获取模块1201,用于响应于数据删除请求,获取待删除数据对应的分段元信息;所述待删除数据是采用本发明实施例第一方面任一数据存储的方法存储的;
第三数据分段模块1202,用于根据所述分段元信息中的分段数量和分段起始段号,确定所述待删除数据对应的分段数据索引;
数据删除模块1203,用于根据所述待删除数据对应的分段数据索引,删除所述待删除数据。
根据本发明的一个实施例,所述数据删除模块1203,还用于:在所述待删除数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量删除。
图13是本发明实施例可以应用于其中的示例性系统架构图。
如图13所示,系统架构1300可以包括终端设备1301、1302、1303,网络1304和服务器1305。网络1304用以在终端设备1301、1302、1303和服务器1305之间提供通信链路的介质。网络1304可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备1301、1302、1303通过网络1304与服务器1305交互,以接收或发送消息等。终端设备1301、1302、1303上可以安装有各种通讯客户端应用,例如数据处理应用等(仅为示例)。
终端设备1301、1302、1303可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器1305可以是提供各种服务的服务器,例如对用户利用终端设备1301、1302、1303所进行的数据存储、读取和删除提供支持的后台管理服务器(仅为示例)。后台管理服务器可以响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息等处理,并将处理结果(例如存储数据等--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的数据存储、读取和删除的方法一般由服务器1305执行,相应地,数据存储、读取和删除的装置一般设置于服务器1305中。
应该理解,图13中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图14,其示出了适于用来实现本发明实施例的终端设备或服务器的计算机系统1400的结构示意图。图14示出的终端设备或服务器仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图14所示,计算机系统1400包括中央处理单元(CPU)1401,其可以根据存储在只读存储器(ROM)1402中的程序或者从存储部分1408加载到随机访问存储器(RAM)1403中的程序而执行各种适当的动作和处理。在RAM 1403中,还存储有系统1400操作所需的各种程序和数据。CPU 1401、ROM 1402以及RAM 1403通过总线1404彼此相连。输入/输出(I/O)接口1405也连接至总线1404。
以下部件连接至I/O接口1405:包括键盘、鼠标等的输入部分1406;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1407;包括硬盘等的存储部分1408;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1409。通信部分1409经由诸如因特网的网络执行通信处理。驱动器1410也根据需要连接至I/O接口1405。可拆卸介质1411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1410上,以便于从其上读出的计算机程序根据需要被安装入存储部分1408。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1409从网络上被下载和安装,和/或从可拆卸介质1411被安装。在该计算机程序被中央处理单元(CPU)1401执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是所述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者所述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或所述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者所述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括:第一元信息获取模块、第一数据分段模块和数据存储模块。
其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,数据存储模块还可以被描述为“用于在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息的模块”。
另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是所述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。所述计算机可读介质承载有一个或者多个程序,当所述一个或者多个程序被一个该设备执行时,使得该设备包括:响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。
根据本发明实施例的技术方案,具有如下优点或有益效果:通过响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听待存储数据对应的分段元信息的更新状态;根据预设的分段规则和当前段号分配信息,对待存储数据进行分段处理,存储分段处理后的数据,并确定分段元信息的更新信息;在更新状态为未更新的情况下,根据更新信息更新所述分段元信息,以及基于已经存储的数据,根据分段元信息进行数据读取和删除操作的技术方案,有效解决了大数据量数据在Redis缓存中的存储、读取和删除问题,且通过对分段元信息的更新状态的监听,保证了数据存储和读取的准确性。
所述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (17)
1.一种数据存储的方法,其特征在于,包括:
响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;
根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;
在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。
2.根据权利要求1所述的方法,其特征在于,获取待存储数据的当前段号分配信息之前,所述方法包括:
确定所述待存储数据的数据量超过预设的处理阈值。
3.根据权利要求1所述的方法,其特征在于,所述方法包括:
在对所述待存储数据进行分段处理之前,获取所述待存储数据对应的分段元信息,将所述分段元信息存储到本地缓存,根据所述分段元信息确定所述待存储数据;
在根据所述更新信息更新所述分段元信息之后,从所述本地缓存中获取所述分段元信息,根据所述分段元信息,删除所述分段元信息对应的历史存储数据。
4.根据权利要求1所述的方法,其特征在于,根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,包括:
根据预设的分段规则中的分段阈值,将所述待存储数据拆分成多个分段数据;
根据所述当前段号分配信息中的前缀信息和编号信息,确定所述待存储数据的当前分段起始段号;
根据所述当前分段起始段号和所述分段数据的个数,为每个所述分段数据分配对应的分段数据索引;
确定所述分段元信息的更新信息,包括:将所述当前分段起始段号和所述分段数据的个数作为所述分段元信息的更新信息。
5.根据权利要求4所述的方法,其特征在于,存储分段处理后的数据,包括:
在所述分段数据的个数超过预设的数量阈值的情况下,根据每个所述分段数据的分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量存储。
6.根据权利要求1所述的方法,其特征在于,存储分段处理后的数据之后,所述方法还包括:
在所述更新状态为已更新的情况下,将所述分段处理后的数据删除,重新获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态,根据重新获取的当前段号分配信息和预设的分段规则对所述待存储数据进行分段处理。
7.一种数据读取的方法,其特征在于,包括:
响应于数据读取请求,获取待读取数据的分段元信息;所述待读取数据是采用权利要求1-6任一所述的方法存储的;
根据所述分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引;
根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据;将所述待读取数据对应的分段数据进行组装,得到所述待读取数据。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在读取所述待读取数据对应的分段数据失败的情况下,重新获取所述待读取数据的分段元信息,根据重新读取的分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引,进行分段数据的读取。
9.根据权利要求7所述的方法,其特征在于,根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据,包括:
在所述待读取数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量读取。
10.一种数据删除的方法,其特征在于,包括:
响应于数据删除请求,获取待删除数据对应的分段元信息;所述待删除数据是采用权利要求1-6任一所述的方法存储的;
根据所述分段元信息中的分段数量和分段起始段号,确定所述待删除数据对应的分段数据索引;
根据所述待删除数据对应的分段数据索引,删除所述待删除数据。
11.根据权利要求10所述的方法,其特征在于,根据所述待删除数据对应的分段数据索引,删除所述待删除数据,包括:
在所述待删除数据对应的分段数量超过预设的数量阈值的情况下,根据所述待读取数据对应的每个所述分段数据索引,确定对应分段数据的缓存槽位,多线程地将相同缓存槽位中的分段数据进行批量删除。
12.一种数据存储的装置,其特征在于,包括:
第一元信息获取模块,用于响应于数据存储请求,获取待存储数据的当前段号分配信息,并监听所述待存储数据对应的分段元信息的更新状态;
第一数据分段模块,用于根据预设的分段规则和所述当前段号分配信息,对所述待存储数据进行分段处理,存储分段处理后的数据,并确定所述分段元信息的更新信息;
数据存储模块,用于在所述更新状态为未更新的情况下,根据所述更新信息更新所述分段元信息。
13.一种数据读取的装置,其特征在于,包括:
第二元信息获取模块,用于响应于数据读取请求,获取待读取数据的分段元信息;所述待读取数据是采用权利要求1-6任一所述的方法存储的;
第二数据分段模块,用于根据所述分段元信息中的分段数量和分段起始段号,确定所述待读取数据对应的分段数据索引;
数据读取模块,用于根据所述待读取数据对应的分段数据索引,读取所述待读取数据对应的分段数据;将所述待读取数据对应的分段数据进行组装,得到所述待读取数据。
14.一种数据删除的装置,其特征在于,包括:
第三元信息获取模块,用于响应于数据删除请求,获取待删除数据对应的分段元信息;所述待删除数据是采用权利要求1-6任一所述的方法存储的;
第三数据分段模块,用于根据所述分段元信息中的分段数量和分段起始段号,确定所述待删除数据对应的分段数据索引;
数据删除模块,用于根据所述待删除数据对应的分段数据索引,删除所述待删除数据。
15.一种移动电子设备终端,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的方法。
16.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-11中任一所述的方法。
17.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310223133.4A CN116226151A (zh) | 2023-03-09 | 2023-03-09 | 一种数据存储、读取和删除的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310223133.4A CN116226151A (zh) | 2023-03-09 | 2023-03-09 | 一种数据存储、读取和删除的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116226151A true CN116226151A (zh) | 2023-06-06 |
Family
ID=86576594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310223133.4A Pending CN116226151A (zh) | 2023-03-09 | 2023-03-09 | 一种数据存储、读取和删除的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116226151A (zh) |
-
2023
- 2023-03-09 CN CN202310223133.4A patent/CN116226151A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109493076B (zh) | 一种Kafka消息唯一消费方法、系统、服务器及存储介质 | |
US10108653B2 (en) | Concurrent reads and inserts into a data structure without latching or waiting by readers | |
CN108629029B (zh) | 一种应用于数据仓库的数据处理方法和装置 | |
US10649905B2 (en) | Method and apparatus for storing data | |
CN110389905B (zh) | 资源释放方法、资源分配方法、设备和计算机程序产品 | |
CN109032796B (zh) | 一种数据处理方法和装置 | |
CN111124270B (zh) | 缓存管理的方法、设备和计算机程序产品 | |
WO2024041022A1 (zh) | 数据库表变更方法、装置、设备和存储介质 | |
US11157456B2 (en) | Replication of data in a distributed file system using an arbiter | |
US11288237B2 (en) | Distributed file system with thin arbiter node | |
US11341055B2 (en) | Method, electronic device, and computer program product for storage management | |
CN112395437B (zh) | 一种3d模型的加载方法、装置、电子设备及存储介质 | |
CN113760924A (zh) | 一种分布式事务的处理方法和装置 | |
CN116226151A (zh) | 一种数据存储、读取和删除的方法和装置 | |
CN113051244A (zh) | 数据访问方法和装置、数据获取方法和装置 | |
CN113760861A (zh) | 一种数据迁移的方法和装置 | |
CN113127430A (zh) | 镜像信息处理方法、装置、计算机可读介质及电子设备 | |
CN111881085B (zh) | 一种读写带宽性能的优化方法及系统 | |
CN115604290B (zh) | Kafka消息执行方法、装置、设备及存储介质 | |
US11972312B2 (en) | Data synchronization without middleware | |
US10565044B2 (en) | Message handling related to non-parallelizable functionality | |
CN115905246B (zh) | 基于动态压缩前缀树的kv缓存方法与装置 | |
CN114116732B (zh) | 处理事务的方法、装置、存储装置以及服务器 | |
US20230336416A1 (en) | Configuration of a server in view of a number of clients connected to the server | |
CN117149512A (zh) | 一种元数据操作处理方法和装置 |
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 |