System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据结构领域,具体为一种支持遍历和动态修改的哈希映射集合的数据结构。
技术介绍
1、在数据结构中,哈希映射(或哈希表)是一种高效的键值对存储方式,它允许通过键快速查找、插入和删除值。
2、在数据结构应用中,在多线程场景下,对同一个数据结构访问的性能瓶颈来自于对该数据结构的加锁。虽然可以通过把这个数据结构进行分片来提高并发度进而提高性能,但目前较为常用的stl如map,虽然可以进行逻辑上的分片,但在需要通过多次访问进行全部数据遍历的时候,存在迭代器失效的问题。
3、本专利技术用于sudis分布式高速缓存数据库系统2.0产品的数据存储模块。
技术实现思路
1、本专利技术的目的在于提供一种支持遍历和动态修改的哈希映射集合的数据结构,以解决上述
技术介绍
中提出的问题。
2、为实现上述目的,本专利技术提供如下技术方案:一种支持遍历和动态修改的哈希映射集合的数据结构,包括n个slot,每一个所述slot中存放一个连续数组,称为buckets,每个数组元素(bucket)是一个list;
3、所述slot用于存放数据结构分片,每个请求通过对请求中key word的hash,映射到对应的slot上,list用于存放实际数据。
4、优选的,所述数组元素(bucket)中,对bucket的定位是通过对请求中的key word进行hash来实现的。
5、优选的,在所述list级别加锁,大幅减小锁的粒度,可以保证各访问者数
6、优选的,所述slot的个数固定不变,每个slot下属的bucket的个数固定不变。
7、与现有技术相比,本专利技术的有益效果是:该支持遍历和动态修改的哈希映射集合的数据结构,增加逻辑上的n个slot,用于存放数据结构分片,每个slot中存放一个连续数组(buckets),每个数组元素(bucket)是一个list,用于存放实际数据。通过hash算法,各个请求会均分在各个slot上,进而分布于bucket上,锁冲突的概率极大减少。进行多次循环遍历全部数据时,以bucket为单位,两次循环中仅需记录bucket索引即可。遍历数据过程中,如果有数据需要插入到已经扫描过的bucket,直接将其作为扫描结果的一部分,删除数据对扫描结果不产生影响。采用本数据结构,支持多线程遍历和动态修改的哈希结构在进行多轮次遍历数据时,与该结构是否进行修改不强相关,充分发挥多线程优势,同时可以避免迭代器失效。
本文档来自技高网...【技术保护点】
1.一种支持遍历和动态修改的哈希映射集合的数据结构,其特征在于:包括N个slot,每一个所述slot中存放一个连续数组,称为buckets,每个数组元素(bucket)是一个list;
2.根据权利要求1所述的一种支持遍历和动态修改的哈希映射集合的数据结构,其特征在于:所述数组元素(bucket)中,对bucket的定位是通过对请求中的key word进行hash来实现的。
3.根据权利要求2所述的一种支持遍历和动态修改的哈希映射集合的数据结构,其特征在于:在所述list级别加锁,大幅减小锁的粒度,可以保证各访问者数据视图的一致性。
4.根据权利要求4所述的一种支持遍历和动态修改的哈希映射集合的数据结构,其特征在于:所述slot的个数固定不变,每个slot下属的bucket的个数固定不变。
【技术特征摘要】
1.一种支持遍历和动态修改的哈希映射集合的数据结构,其特征在于:包括n个slot,每一个所述slot中存放一个连续数组,称为buckets,每个数组元素(bucket)是一个list;
2.根据权利要求1所述的一种支持遍历和动态修改的哈希映射集合的数据结构,其特征在于:所述数组元素(bucket)中,对bucket的定位是通过对请求中的key word进...
【专利技术属性】
技术研发人员:吕利,张晓龙,邓艾丽,梁松,康炜,闫鹏飞,聂伟,吕劲林,徐萌,张达,
申请(专利权)人:北京内核科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。