数据插入方法和装置制造方法及图纸

技术编号:12401387 阅读:72 留言:0更新日期:2015-11-26 15:05
本发明专利技术公开了一种数据插入方法和装置,该方法包括:分配内存空间,以创建存储待插入数据的节点;将待插入数据写入创建的节点;修改链表中相应的指针,以使所述创建的节点插入到所述链表中。采用本发明专利技术的技术方案,在写入新数据时,分配新的内存空间进行写更新,当数据的写入完成时再修改指针,可以支持在多线程并发的情况下,一个线程进行写操作,多个线程进行读操作,且在线程读、写的过程中,都不需要对数据加锁。

【技术实现步骤摘要】

本专利技术涉及互联网
,具体涉及一种数据插入方法和装置
技术介绍
在开发线上服务时,高并发一直是衡量系统质量一个最重要的指标之一,也是开发过程中的技术难点。在服务端程序开发过程中,有四个方面对系统的性能影响最大,它们分别是:数据拷贝(Data Copies)、上下文切换(Context Switches)、内存分配(Memoryallocat1n)以及锁竞争(Lock content1n)。数据拷贝,冗余的数据拷贝(复制)会降低数据传输的性能,进而影响系统性能,一般可以通过一些编程技术来减少或避免数据拷贝,如,多使用指针和引用计数等。上下文切换,在系统运行过程中频繁进行进程或线程切换,将会导致系统性能急剧下降。一般来说,线程的切换代价要小于进程,这主要是因为进程可以拥有资源,是系统中拥有资源的一个基本单位,而线程自己不拥有系统资源(也有一点必不可少的资源),但它可以访问其隶属的进程的资源,即一个进程的代码段、数据段及所拥有的系统资源,如,已打开的文件、I/o设备等,可以提供该进程中的所有线程锁共享。内存分配,在高并发系统中,如果存在大量的内存申请和释放操作,会导致性能的损失,并且会使系统中出现大量的内存碎片,降低内存的利用率。现有技术中的一种解决方案是采用内存池技术,预分配内存,释放的内存由内存池统一回收和利用,而并不直接交给操作系统。锁竞争,高效率的锁非常难规划,一方面,锁的简单化(粗粒度锁)会导致并行处理的串行化,降低并发的效率和系统可伸缩性;另一方面,锁的复杂化(细粒度锁)在空间占用上和操作时的时间消耗上都可能产生对系统性能的侵蚀。综上所述,需要针对上述存在的问题进行改进,提出一种实现高并发读写的数据插入或更新方案。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的数据插入方法和相应的装置。根据本专利技术的一个方面,提供了一种数据插入方法,包括:分配内存空间,以创建存储待插入数据的节点;将待插入数据写入创建的节点;修改链表中相应的指针,以使所述创建的节点插入到所述链表中。其中,修改链表中相应的指针,包括:确定所述创建的节点的插入位置;将所述创建的节点的指针设置为指向所述插入位置处两个节点中的在后节点;将所述插入位置处两个节点中的在前节点的指针修改为指向所述创建的节点。其中,还包括:根据待插入数据的键的哈希值确定所述待插入数据对应的链表;遍历所述对应的链表,判断所述链表中是否存在与所述待插入数据键相等的节点;如果所述链表中存在与所述待插入数据键相等的节点,则终止当前操作并返回。根据本专利技术的另一个方面,提供了一种数据更新方法,包括:分配内存空间,以创建存储更新数据的节点;将更新数据写入创建的节点;修改链表中相应的指针,以使所述创建的节点插入到所述链表中。其中,修改链表中相应的指针,包括:将指向原始数据所在节点指针修改为指向所述创建的节点;将所述创建的节点的指针设置为指向所述原始数据所在节点的指针原来所指向的节点;删除原始数据所在节点的指针。其中,还包括:确定所述原始数据所在的节点。其中,确定所述原始数据所在的节点,包括:根据原始数据的键的哈希值确定所述原始数据所在的链表;在所述原始数据所在的链表中,根据所述原始数据的键确定所述原始数据所在的节点。其中,还包括:回收原始数据所在节点,并将所述节点插入空闲链表中,以便重新进行分配。根据本专利技术的一个方面,提供了一种数据插入装置,包括:分配模块,用于分配内存空间,以创建存储待插入数据的节点;写入模块,用于将待插入数据写入创建的节点;修改模块,用于修改链表中相应的指针,以使所述创建的节点插入到所述链表中。其中,所述修改模块,包括:确定子模块,用于确定所述创建的节点的插入位置;设置子模块,用于将所述创建的节点的指针设置为指向所述插入位置处两个节点中的在后节点;修改子模块,用于将所述插入位置处两个节点中的在前节点的指针修改为指向所述创建的节点。其中,还包括:确定模块,用于根据待插入数据的键的哈希值确定所述待插入数据对应的链表;判断模块,用于遍历所述对应的链表,判断所述链表中是否存在与所述待插入数据键相等的节点;返回模块,用于如果所述链表中存在与所述待插入数据键相等的节点,则终止当前操作并返回。根据本专利技术的另一个方面,提供了一种数据更新装置,包括:分配模块,用于分配内存空间,以创建存储更新数据的节点;写入模块,用于将更新数据写入创建的节点;修改模块,用于修改链表中相应的指针,以使所述创建的节点插入到所述链表中。其中,所述修改模块,包括:修改子模块,用于将指向所述原始数据所在节点指针修改为指向所述创建的节点;设置子模块,用于将所述创建的节点的指针设置为指向所述原始数据所在节点的指针原来所指向的节点;删除子模块,用于删除原始数据所在节点的指针。其中,所述修改模块,还包括:确定子模块,用于确定所述原始数据所在的节点。其中,所述确定子模块,包括:第一确定子模块,用于根据原始数据的键的哈希值确定所述原始数据所在的链表;第二确定子模块,用于在所述原始数据所在的链表中,根据所述原始数据的键确定所述原始数据所在的节点。其中,还包括:回收模块,用于回收原始数据所在节点,并将所述节点插入空闲链表中,以便重新进行分配。根据本专利技术的技术方案,在写入新数据时,分配新的内存空间进行写更新,当数据的写入完成时再修改指针,可以支持在多线程并发的情况下,一个线程进行写操作,多个线程进行读操作,且在线程读、写的过程中,都不需要对数据加锁。并且,对链表中删除的节点空间进行回收加入空闲链表,当需要分配新的内存空间时,可以直接利用回收的空闲内存。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的【具体实施方式】。【附图说明】通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本专利技术一个实施例的数据插入方法的流程图;图2示出了根据本专利技术一个实施例的循环双向链表的结构示意图;图3示出了根据本专利技术一个实施例的数据插入方法中修改链表中相应的指针的步骤的流程图;图4示出了根据本专利技术的另一个实施例的数据插入方法的流程图;图5a示出了根据本专利技术一个实施例的Hashmap的存储结构示意图;图5b示出了根据本专利技术一个实施例的Hashmap存储结构中每个节点的结构示意图;图6示出了根据本专利技术另一个实施例的数据插入方法中修改链表中相应的指针的流程图;图7示出了根据本专利技术一个实施例的数据更新方法的流程图;图8示出了根据本专利技术一个实施例的数据更新方法中修改链表中相应的指针的步骤的流程图;图9示出了根据本专利技术的另一个实施例的数据更新方法的流程图;图10示出了根据本专利技术另一个实施例的数据更新方法中修改链表中相应的指针的流程图;图11示出了根据本专利技术的一个实施例的确定所述原始数据所在的节点的流程图;图12示出了根据本专利技术一实施例的数据插入装置的结构框图;以及图13示出了根据本文档来自技高网
...

【技术保护点】
一种数据插入方法,其特征在于,包括:分配内存空间,以创建存储待插入数据的节点;将待插入数据写入创建的节点;修改链表中相应的指针,以使所述创建的节点插入到所述链表中。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈华清林土城王佳宾郭明瑞刘超杰
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1