一种数据索引构建、数据读取的方法、装置及电子设备
技术领域
本发明涉及软件技术领域,特别涉及一种数据索引构建、数据读取的方法、装置及电子设备。
背景技术
随着科学技术的不断发展,处理设备如CPU的数据处理能力得到了飞速的发展,然而,能够大量存储数据的数据库的读写速度远低于处理设备的数据处理速度,使得处理设备的高速计算能力得不到充分体现。
为了弥补这一不足,现有技术在处理设备与数据库之间设置缓存,作为高并发系统常用的中间件。缓存的运行速度比内存快得多,用于提升数据读取效率和系统吞吐量。常见的做法是,在数据库中维护一份完整数据,缓存用于存放常用数据,访问时,先到缓存中读取数据,缓存中无法命中的数据,再到数据库中读取。
由于该缓存机制存在缺陷,攻击者可以构造大量的非法数据(如数据库中不存在的数据),造成大量的访问无法从缓存读取导致缓存被穿透,直接命中数据库,大量访问数据库,占用数据库读资源,数据库资源宝贵,并发访问能力有限,在极大的并发访问情况下,可能出现延迟、无法访问,甚至系统卡死的情况。
发明内容
本申请实施例提供一种数据索引构建、数据读取的方法、装置及电子设备,用于解决现有技术中缓存容易被穿透的技术问题,降低缓存被穿透的几率。
本申请的第一方面,提供一种数据索引构建方法,所述方法包括:
在向存储器中存入数据时,生成存入数据的第一数据索引并添加到布隆过滤器中建立全量数据索引;
在从所述存储器中删除数据时,生成删除数据的第二数据索引并建立删除数据索引;
其中,所述全量数据索引和所述删除数据索引用于在进行数据读取前,判断待读取数据是否在所述存储器中,若所述待读取数据不在所述存储器中禁止执行从所述存储器中读取所述待读取数据的操作。
可选的,所述方法还包括:在向所述存储器中存入数据时,将与所述第一数据索引相同的所述第二数据索引从所述删除数据索引中删除。
可选的,所述生成删除数据的第二数据索引并建立删除数据索引,包括:
将所述第二数据索引添加到删除数据队列中建立所述删除数据索引;或者
将所述第二数据索引添加到布隆过滤器中建立所述删除数据索引。
可选的,所述方法还包括:在预设时间周期后,对所述全量数据索引和所述删除数据索引进行初始化。
可选的,所述存储器包括缓存和/或数据库。
本申请的第二方面,提供一种数据读取方法,所述方法包括:
在进行数据读取之前,通过全量数据索引和删除数据索引判断待读取数据是否在存储器中,其中,所述全量数据索引用于通过布隆过滤器存储存入数据的第一数据索引,所述删除数据索引用于存储删除数据的第二数据索引;
若所述待读取数据不在所述存储器中,禁止执行从所述存储器中读取所述待读取数据的操作。
可选的,所述存储器包含缓存和/或数据库。
可选的,所述方法还包括:
若所述待读取数据在所述存储器中,所述存储器为数据库,从缓存中对所述待读取数据进行读取;
若从所述缓存中读取数据失败,从所述数据库中读取所述待读取数据。
可选的,所述通过全量数据索引和删除数据索引判断待读取数据是否在所述存储器中,包括:
判断所述删除数据索引中是否存在所述待读取数据的索引;
若所述删除数据索引中存在所述待读取数据的索引,确定所述待读取数据不在所述存储器中。
可选的,若所述删除数据索引中不存在所述待读取数据的索引,所述方法还包括:
判断所述全量数据索引中是否存在所述待读取数据的索引;
若所述全量数据索引中存在所述待读取数据的索引,确定所述待读取数据在所述存储器中;反之,确定所述待读取数据不在所述存储器中。
可选的,所述方法还包括:在预设时间周期后,对所述全量数据索引和/或所述删除数据索引进行初始化。
可选的,所述删除数据索引由所述第二数据索引添加到删除数据队列中建立;或者,所述删除数据索引由所述第二数据索引添加到布隆过滤器中建立。
本申请的第三方面,提供一种数据索引构建装置,所述装置包括:
第一生成单元,用于在向存储器中存入数据时,生成存入数据的第一数据索引并添加到布隆过滤器中建立全量数据索引;
第二生成单元,用于在从所述存储器中删除数据时,生成删除数据的第二数据索引并建立删除数据索引;
其中,所述全量数据索引和所述删除数据索引用于在进行数据读取前,判断待读取数据是否在所述存储器中,若所述待读取数据不在所述存储器中禁止执行从所述存储器中读取所述待读取数据的操作。
可选的,所述装置还包括:更新单元,用于在向所述存储器中存入数据时,将与所述第一数据索引相同的所述第二数据索引从所述删除数据索引中删除。
可选的,所述第二生成单元,用于:
将所述第二数据索引添加到删除数据队列中建立所述删除数据索引;或者
将所述第二数据索引添加到布隆过滤器中建立所述删除数据索引。
可选的,所述装置还包括:初始单元,用于在预设时间周期后,对所述全量数据索引和所述删除数据索引进行初始化。
可选的,所述存储器包括缓存和/或数据库。
本申请的第四方面,提供一种数据读取装置,所述装置包括:
判断单元,用于在进行数据读取之前,通过全量数据索引和删除数据索引判断待读取数据是否在存储器中,其中,所述全量数据索引用于通过布隆过滤器存储存入数据的第一数据索引,所述删除数据索引用于存储删除数据的第二数据索引;
禁止单元,用于在所述待读取数据不在所述存储器中时,禁止执行从所述存储器中读取所述待读取数据的操作。
可选的,所述存储器包含缓存和/或数据库。
可选的,所述装置还包括:
读取单元,用于在所述待读取数据在所述存储器中,所述存储器为数据库时,从缓存中对所述待读取数据进行读取;
若从所述缓存中读取数据失败,从所述数据库中读取所述待读取数据。
可选的,所述判断单元,用于:
判断所述删除数据索引中是否存在所述待读取数据的索引;
若所述删除数据索引中存在所述待读取数据的索引,确定所述待读取数据不在所述存储器中。
可选的,所述判断单元还用于:
在所述删除数据索引中不存在所述待读取数据的索引时,判断所述全量数据索引中是否存在所述待读取数据的索引;
若所述全量数据索引中存在所述待读取数据的索引,确定所述待读取数据在所述存储器中;反之,确定所述待读取数据不在所述存储器中。
可选的,所述装置还包括:初始单元,用于在预设时间周期后,对所述全量数据索引和/或所述删除数据索引进行初始化。
可选的,所述删除数据索引由所述第二数据索引添加到删除数据队列中建立;或者,所述删除数据索引由所述第二数据索引添加到布隆过滤器中建立。
本申请的第五方面,提供一种电子设备,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
在向存储器中存入数据时,生成存入数据的第一数据索引并添加到布隆过滤器中建立全量数据索引;
在从所述存储器中删除数据时,生成删除数据的第二数据索引并建立删除数据索引;
其中,所述全量数据索引和所述删除数据索引用于在进行数据读取前,判断待读取数据是否在所述存储器中,若所述待读取数据不在所述存储器中禁止执行从所述存储器中读取所述待读取数据的操作。
本申请的第六方面,提供一种电子设备,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
在进行数据读取之前,通过全量数据索引和删除数据索引判断待读取数据是否在存储器中,其中,所述全量数据索引用于通过布隆过滤器存储存入数据的第一数据索引,所述删除数据索引用于存储删除数据的第二数据索引;
若所述待读取数据不在所述存储器中,禁止执行从所述存储器中读取所述待读取数据的操作。
本申请实施例中的上述一个或多个技术方案,至少具有如下技术效果:
本申请实施例在向存储中存入数据、删除数据时,分别生成存入数据的第一数据索引并添加到布隆过滤器中建立全量数据索引,生成删除数据的第二数据索引并添加到删除数据索引中,通过建立好的全量数据索引和删除数据索引,在进行数据读取之前判断待读取数据是否在存储器中,若不在,则禁止执行从存储器中读取待读取数据的操作,有效避免了非法数据对缓存、数据库的访问,解决了现有技术中因大量非法数据的访问导致缓存容易被穿透的技术问题,降低了缓存被穿透的几率,达到了对缓存、数据库进行有效保护的有益效果。
附图说明
图1为本申请实施例一提供的一种数据索引构建方法的流程图;
图2为本申请实施例一提供的一种数据读取方法的流程图;
图3为本申请实施例一提供的数据索引构建的交互示意图;
图4为本申请实施例一提供的数据读取的交互示意图;
图5为本申请实施例二提供的一种数据索引构建装置的示意图;
图6为本申请实施例二提供的一种数据读取装置的示意图;
图7为本申请实施例二提供的一种电子设备的示意图。
具体实施方式
在本申请实施例提供的技术方案中,通过对存入数据和删除数据构建数据索引,用于对待读取数据进行预判,禁止对存储器中不存在的数据进行读取操作,有效避免非法数据对缓存、数据库的访问,以解决现有技术中因大量非法数据的访问导致缓存容易被穿透的技术问题,降低缓存被穿透的几率。
下面结合附图对本申请实施例技术方案的主要实现原理、具体实施方式及其对应能够达到的有益效果进行详细的阐述。
实施例一
请参考图1,本申请实施例提供一种数据索引构建方法,应用于一电子设备,该电子设备可以是客户终端,也可以是服务器,该方法包括:
S11:在向存储器中存入数据时,生成存入数据的第一数据索引并添加到布隆过滤器中建立全量数据索引;
S12:在从所述存储器中删除数据时,生成删除数据的第二数据索引并建立删除数据索引;
其中,所述全量数据索引和所述删除数据索引用于在进行数据读取前,判断待读取数据是否在所述存储器中,若所述待读取数据不在所述存储器中禁止执行从所述存储器中读取所述待读取数据的操作,反之,则执行读取待读取数据的操作。
具体实施过程中,存储器可以是电子设备中的缓存和/或数据库,即本申请实施例可以针对缓存和/或数据库构建全量数据索引和删除数据索引。作为一种可选的实施方式,由于缓存中数据变化较为频繁、数据存储量也不大,可以只对数据库中的数据构建全量数据索引和删除数据索引。
执行S10时,电子设备可以先生成存入数据的第一数据索引,第一数据索引是对存入数据具有检索意义的事项,如存入数据的属性特征、名称、数据结构、数据本身等;接着将第一数据索引添加到布隆过滤器中,以建立全量数据索引。
布隆过滤器是由一个很长的二进制向量和一系列随机映射函数组成,可以用于检索一个元素是否在一个集合中,具有空间效率高和查询时间短的优点,但是具有误识率(将不存在的数据识别为存在)、删除困难的缺点,可以往布隆过滤器中添加数据但是不易删除,而存储器中的数据变更具有双向性,即会存入数据也会删除数据,所以本申请实施例使用布隆过滤器对存入数据构建全量数据索引,提高存入数据的查询效率的同时,还执行S12对删除数据构建删除数据索引,进而可以通过删除数据索引来辅助判断数据是否在存储器中,来弥补布隆过滤器的误识率、删除的缺陷,在提高数据查询效率的同时提高数据查询的准确率。
在执行S12时,同样可以先生成删除数据的第二数据索引,然后建立删除数据索引,包括:将第二数据索引添加到删除数据队列中建立删除数据索引,或者,将第二数据索引添加到布隆过滤器中建立删除数据索引,即删除数据索引即可以采用队列的方式构建,也可以采用布隆过滤器的方式构建。当然,删除数据索引还可以采用其它方式进行构建,本申请实施例并不限制其构建方式。
为了进一步提高数据查询、读取的准确性,当删除数据索引采用队列的方式构建时,本申请实施例还在向存储器中存入数据时,将与第一数据索引相同的第二数据索引从删除数据索引中删除,避免在判断数据是否在存储器中时出现误判。例如:当数据A存入存储器中后被删除,此时,数据A的索引已写入到删除数据索引中,若删除后再次被存入,不将其索引从删除数据索引中删除,则会因其索引在删除数据索引中而被误判为不存在于存储器中,而本申请将再次被存入的数据A的索引从删除数据索引中删除后,则能避免上述出现误判的情况。
为了使构建的数据索引始终保持较高的准确性,本申请实施例还在预设时间周期后,对全量数据索引和删除数据索引进行初始化。如将存储器中现有的所有数据的第一数据索引重新添加到布隆过滤器中建立新的全量数据索引,新的全量数据索引建立好后删除原来的全量数据索引并清空删除数据索引。预设时间周期可以为系统默认值如一周、半个月、一个月等,也可以由电子设备根据CPU是否空闲、数据索引中的数据量是否大于设定阈值等实际情况进行自动调节,还可以由用户进行个性化设置等,本申请并不限制预设时间周期的具体时长。
基于上述实施例构建的数据索引,本申请实施例还提供一种数据读取方法,如图2所示,该数据读取方法包括:
S21:在进行数据读取之前,通过全量数据索引和删除数据索引判断待读取数据是否在存储器中,其中,所述全量数据索引用于通过布隆过滤器存储存入数据的第一数据索引,所述删除数据索引用于存储删除数据的第二数据索引。
具体的,可以通过判断全量数据索引和删除数据索引中是否存在待读取数据的索引来判断待读取数据是否在存储器中,若待读取数据的索引在全量数据索引中但不在删除数据索引中,则可以判断出待读取数据在存储器中,反之,待读取数据不在存储器中。
进一步的,为了提高判断效率,可以先判断删除数据索引中是否存在待读取数据的索引;若删除数据索引中存在待读取数据的索引,表明待读取数据已被删除,确定待读取数据不在存储器中,本次判断过程结束;若删除数据索引中不存在待读取数据的索引,进一步判断全量数据索引中是否存在待读取数据的索引;若全量数据索引中存在待读取数据的索引,确定待读取数据在存储器中;反之,确定待读取数据不在存储器中,本次判断过程结束。当然,也可以先判断全量数据索引中是否存在待读取数据的索引,若不存在,表明待读取数据未存入到存储器中,确定待读取数据不在存储器中,本次判断过程结束;在全量数据索引中存在待读取数据的索引时,进一步判断删除数据索引中是否存在待读取数据的索引,若不存在,确定待读取数据在存储器中,反之则不在存储器中。
S22:若所述待读取数据不在所述存储器中,禁止执行从所述存储器中读取所述待读取数据的操作。由此避免异常数据对缓存、数据库的访问,减小了缓存被穿透的几率,进而减少数据库被大量并发访问的几率,并且,即使缓存被穿透,异常数据也无法对数据库进行访问,实现了对数据库的有效保护。
若所述待读取数据在所述存储器中,执行读取所述待读取数据的操作。具体的,当电子设备中分别针对缓存和数据库构建了全量数据索引和删除数据索引时,可以对缓存和数据库进行数据读取前均执行S21~S22。当电子设备中只对数据库构建了全量数据索引和删除数据索引时,执行读取待读取数据的操作时,可以先从缓存中对待读取数据进行读取,若从缓存中读取数据失败,再从数据库中读取待读取数据。
下面通过一个具体实例来对本申请实施例提供的数据读取过程进行举例说明,如图3、4所示:
假设在商品数据(尤其是大量商品数据)存储及读取过程中,在数据库中商品数据(下述简称商品)变更时,包含商品新增和商品删除,执行如下步骤:
向数据库中存入商品
步骤1:商品新增到数据库中进行存储;
步骤1.1:对新增的商品,添加商品索引到全量商品数据索引(即全量商品索引),具体可以通过步骤1.1.1往布隆过滤器添加该商品名称来实现。
从数据库中删除商品
步骤2:从数据库中进行商品删除;
步骤2.1:对删除的商品,添加商品索引到删除数据索引,具体可以通过执行步骤2.1.1将删除商品名称加入删除数据索引来实现。
读取商品
步骤1:通过全量数据索引判断商品是否存在,即:判断全量数据索引中是否存在待读取商品的索引,如果不存在,执行步骤1.1返回商品不存在,不进行商品读取,反之,如果存在,执行步骤2。
步骤2:步骤2.1通过删除数据索引判断商品是否已删除,即:判断删除数据索引中是否存在待读取商品的索引,如果存在,表明商品已删除,执行步骤2.2返回商品已删除,不进行商品读取,反之,如果存在,执行步骤3。
步骤3:进行商品读取:先从缓存中进行待读取商品的读取,若读取成功直接返回商品,若读取失败即缓存中取不存在该商品,执行步骤3.1访问数据库;接着,执行步骤3.2将商品读入到缓存中,再从缓存中读取商品。
在上述实施例中,针对存储器中存入的数据采用布隆过滤器建立全量数据索引的同时,对存储器中删除的数据建立删除数据索引,用以弥补布隆过滤器删除数据不友好、对不存在的数据误判的问题,通过全量数据索引和删除数据索引能够对存储器中是否存在待读取数据进行准确的判断,将不存在的数据访问拦截掉,解决了现有技术中缓存容易被穿透的技术问题,同时减小了对底层数据库的查询压力。
实施例二
基于同一发明构思,针对实施例一提供的一种数据索引构建方法,本申请实施例还对应提供一种数据索引构建装置,请参考图5,该装置包括:
第一生成单元51,用于在向存储器中存入数据时,生成存入数据的第一数据索引并添加到布隆过滤器中建立全量数据索引;
第二生成单元52,用于在从所述存储器中删除数据时,生成删除数据的第二数据索引并建立删除数据索引;
其中,所述全量数据索引和所述删除数据索引用于在进行数据读取前,判断待读取数据是否在所述存储器中,若所述待读取数据不在所述存储器中禁止执行从所述存储器中读取所述待读取数据的操作。具体的,所述存储器可以包括缓存和/或数据库。
作为一种可选的实施例,所述装置还包括:更新单元53,用于在向所述存储器中存入数据时,将与所述第一数据索引相同的所述第二数据索引从所述删除数据索引中删除。
在具体实施过程中,所述第二生成单元52,用于:将所述第二数据索引添加到删除数据队列中建立所述删除数据索引;或者,将所述第二数据索引添加到布隆过滤器中建立所述删除数据索引。
作为一种可选的实施例,所述装置还包括:初始单元54,用于在预设时间周期后,对所述全量数据索引和所述删除数据索引进行初始化。
同样的,针对实施例一提供的一种数据读取装置,本申请实施例对应提供一种数据读取装置,请参考图6,该装置包括:
判断单元61,用于在进行数据读取之前,通过全量数据索引和删除数据索引判断待读取数据是否在存储器中,其中,所述全量数据索引用于通过布隆过滤器存储存入数据的第一数据索引,所述删除数据索引用于存储删除数据的第二数据索引;
禁止单元62,用于在所述待读取数据不在所述存储器中时,禁止执行从所述存储器中读取所述待读取数据的操作。
其中,所述存储器可以包含缓存和/或数据库。所述删除数据索引可以由所述第二数据索引添加到删除数据队列中建立;或者,所述删除数据索引由所述第二数据索引添加到布隆过滤器中建立。
作为一种可选的实施方式,所述装置还包括:
读取单元63,用于在所述待读取数据在所述存储器中,所述存储器为数据库时,从缓存中对所述待读取数据进行读取;若从所述缓存中读取数据失败,从所述数据库中读取所述待读取数据。
在具体实施过程中,所述判断单元61,用于:判断所述删除数据索引中是否存在所述待读取数据的索引;若所述删除数据索引中存在所述待读取数据的索引,确定所述待读取数据不在所述存储器中。进一步的,所述判断单元61还用于:在所述删除数据索引中不存在所述待读取数据的索引时,判断所述全量数据索引中是否存在所述待读取数据的索引;若所述全量数据索引中存在所述待读取数据的索引,确定所述待读取数据在所述存储器中;反之,确定所述待读取数据不在所述存储器中。
作为一种可选的实施方式,所述装置还包括:初始单元64,用于在预设时间周期后,对所述全量数据索引和/或所述删除数据索引进行初始化。
关于上述实施例中的装置,其中各个单元、模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图7是根据一示例性实施例示出的一种用于实现数据存储和/或处理方法的电子设备800的框图。例如,电子设备800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图7,电子设备800可以包括以下一个或多个组件:处理器802,存储器804,以及输入/输出(I/O)的接口806。处理器802通常控制电子设备800的整体操作。处理器802可以包括一个或多个,以完成上述的方法的全部或部分步骤。存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在电子设备800上操作的任何应用程序或方法的指令,可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。I/O接口806为处理器802和外围接口模块之间提供接口,该外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
在示例性实施例中,当存储器804中的指令由电子设备的处理器执行时,使得电子设备能够执行一种数据索引构建方法,所述方法包括:在向存储器中存入数据时,生成存入数据的第一数据索引并添加到布隆过滤器中建立全量数据索引;在从所述存储器中删除数据时,生成删除数据的第二数据索引并建立删除数据索引;其中,所述全量数据索引和所述删除数据索引用于在进行数据读取前,判断待读取数据是否在所述存储器中,若所述待读取数据不在所述存储器中禁止执行从所述存储器中读取所述待读取数据的操作。
在示例性实施例中,当存储器804中的指令由电子设备的处理器执行时,使得电子设备能够执行一种数据读取方法,所述方法包括:
在进行数据读取之前,通过全量数据索引和删除数据索引判断待读取数据是否在存储器中,其中,所述全量数据索引用于通过布隆过滤器存储存入数据的第一数据索引,所述删除数据索引用于存储删除数据的第二数据索引;
若所述待读取数据不在所述存储器中,禁止执行从所述存储器中读取所述待读取数据的操作。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。