本发明涉及数据库,尤其涉及一种基于读写锁机制提升elasticsearch集群中lucene性能的方法和系统。
背景技术:
1、在企业中,elasticsearch通常用于构建搜索引擎,支持复杂的查询和过滤,可以在大规模文档集合中快速地进行全文搜索。然而,随着企业规模的越来越大,数据量也越来越多,相应的场景使用和复杂的读写操作也越来越频繁,因此lucene在高负载情况下也会面临性能挑战,其中一个显著的问题就是缓存系统中的锁争用(lock contention),当查询量增加时,会拖累整个elasticsearch集群的性能,导致响应速度和搜索效率呈现下滑。
技术实现思路
1、发明目的:提出一种基于读写锁机制提升elasticsearch集群中lucene性能的方法,并提出一种实现上述方法的系统,以解决现有技术存在的上述问题。
2、本发明的第一方面,提出一种基于读写锁机制提升elasticsearch集群中lucene性能的方法,步骤如下:
3、s1:客户端向elasticsearch集群发送一个读写请求,这个请求可以发送到集群中的任何一个节点,如果节点收到读写请求,进入s2,否则,抛出异常;
4、s2:接收到请求的节点会充当协调节点的角色。协调节点负责处理客户端的请求,并将请求路由到正确的数据节点,进入s3,否则,抛出异常;
5、s3:协调节点会根据文档id和索引设置(如分片数量)来确定文档应该写入到哪个主分片,这是通过一个哈希函数和模运算来实现的,确保同一个_id的文档总是路由到同一个主分片,主分片确定成功后,则进入s4,否则,抛出异常;
6、s4:确定目标主分片后,协调节点将请求转发给该主分片所在的数据节点,数据节点上的主分片接收到请求后,会先将文档写入到内存中的lucene索引结构里,进行索引倒排,成功后则进入s5、s6,否则,抛出异常;
7、s5:数据节点上的主分片接收到请求后,lucene索引根据读写操作的内容分别选择不同的锁策略,读写操作的内容需要和相应的场景相匹配,如允许多个线程对同一条数据进行加锁,允许一个线程对数据加锁,控制、共享资源的并发访问,读写锁策略执行成功后则进入s6,否则,抛出异常;
8、s6:倒排索引将文档中的单词映射到包含这些单词的文档列表,从而实现快速查找和检索,倒排索引执行成功后,将数据存储进数据节点,成功后进入s7,否则进入s1并抛出异常;
9、s7:倒排索引结束后,协调节点聚合来自各个数据节点的结果,并进行排序、分页等处理,最终将结果返回给客户端;
10、s8:结束流程。
11、在进一步的实施例中,步骤s5中,根据读写操作的内容分别选择不同的锁策略共有以下3种:
12、并发读访问:多个查询可以同时从缓存中读取数据,减少等待时间并提高整体吞吐量。
13、控制写访问:写操作仍需独占锁,以确保在更新时的数据完整性。
14、减少锁争用:通过允许同时读取,显著降低锁争用的频率和严重程度。
15、在进一步的实施例中,步骤s5中,场景分为三个类型;
16、向量检索场景:作为向量数据库的elasticsearch在执行相似性搜索等任务时,需要高效地处理和复杂操作。
17、bm25评分场景:作为信息检索中的流行排序函数,bm25评分和低延迟和高吞吐量有直接关系,适用于对搜索结果的相关性和速度要求。
18、范围查询场景:涉及扫描索引大部分的范围查询,且需要较高的性能。
19、在进一步的实施例中,步骤s1中,请求格式可以为xml、json并支持jsonp跨域访问。
20、在进一步的实施例中,读写锁的管理分为两种方式:
21、超时机制:为了避免线程长时间等待锁,可以设置锁的获取超时时间。如果在超时时间内无法获取锁,则返回错误或采取其他策略。
22、锁升级和降级:根据实际情况,可以将读锁升级为写锁,或者将写锁降级为读锁。例如,当一个读线程需要进行写操作时,可以将读锁升级为写锁;当一个写线程完成写操作操作后,可以将写锁降级为读锁,以允许其他读操作和写操作继续进行。
23、本发明的第二方面,提出一种基于读写锁机制提升elasticsearch集群中lucene性能的系统,该系统包括客户端、第一响应模块、第二响应模块、第三响应模块、第四响应模块、第五响应模块、第六响应模块。
24、客户端向elasticsearch集群中的任意一个节点发送读写请求,如果节点收到该读写请求,反馈至第一响应模块;否则,抛出异常;
25、第一响应模块控制接收到请求的节点作为协调节点,将该读写请求路由到正确的数据节点,反馈至第二响应模块;否则,抛出异常;
26、第二响应模块控制协调节点根据文档id和索引设置确定待写入的目标主分片,目标主分片成功确定后,反馈至第三响应模块;否则,抛出异常;
27、第三响应模块控制协调节点将读写请求转发给该主分片所在的数据节点,数据节点上的主分片接收到该读写请求后,先将文档写入到内存中的lucene索引结构里,反馈至第四响应模块;否则,抛出异常;
28、第四响应模块在数据节点上的主分片接收到读写请求后,控制lucene索引根据读写操作的内容分别选择不同的读写锁策略并执行,读写操作的内容和相应的场景相匹配,读写锁策略执行成功后则反馈至第五响应模块;否则,抛出异常;
29、第五响应模块将文档中的单词映射到包含单词的文档列表;倒排索引执行成功后,将数据存储进数据节点,成功后反馈至第六响应模块;否则反馈至客户端并抛出异常;
30、在倒排索引结束后,第六响应模块协调节点聚合来自各个数据节点的结果,并进行排序、分页处理,最终将结果返回给客户端。
31、本发明的第三方面,提出一种电子设备,该电子设备包括处理器以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现如第一方面所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法。
32、本发明的第四方面,提出一种计算机可读存储介质,该存储介质中存储有至少一个可执行指令,所述可执行指令在电子设备上运行时,使得电子设备执行如第一方面所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法。
33、有益效果:本发明在提升elasticsearch集群中处理共享资源并发访问效率的传统方案之外,提供了新的一种更灵活高效的方式,通过读写锁机制处理共享资源的并发访问。它允许多个线程同时从缓存中读取数据,同时确保写操作的独占性,提升整个elasticsearch集群的性能,提高读写操作的响应速度。
1.一种基于读写锁机制提升elasticsearch集群中lucene性能的方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法,其特征在于,步骤s1中,所述读写请求的格式为xml、json,并支持jsonp跨域访问。
3.根据权利要求1所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法,其特征在于,步骤s5中,所述lucene索引根据读写操作的内容分别选择不同的读写锁策略并执行,包括如下读写锁策略:
4.根据权利要求1所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法,其特征在于,步骤s5中,所述读写操作的内容和相应的场景相匹配,所述场景分为如下类型:
5.根据权利要求1所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法,其特征在于,所述读写锁包括如下两种管理方式:
6.根据权利要求5所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法,其特征在于,所述锁升级和降级,具体包括:
7.一种基于读写锁机制提升elasticsearch集群中lucene性能的系统,其特征在于,包括:
8.一种电子设备,其特征在于,所述设备包括:处理器以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现如权利要求1至6中任一项所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法。
9.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一个可执行指令,所述可执行指令在电子设备上运行时,使得电子设备执行如权利要求1至6中任一项所述的基于读写锁机制提升elasticsearch集群中lucene性能的方法。
