两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于堆外內(nèi)存的緩存索引的方法及系統(tǒng)與流程

文檔序號:11519740閱讀:297來源:國知局
一種基于堆外內(nèi)存的緩存索引的方法及系統(tǒng)與流程

本發(fā)明屬于計算機信息存儲索引技術(shù)領(lǐng)域,尤其涉及一種基于堆外內(nèi)存實現(xiàn)apachelucene的緩存索引的方法及系統(tǒng)。



背景技術(shù):

lucene的索引分為堆內(nèi)內(nèi)存索引、文件系統(tǒng)索引以及hdfs索引。堆內(nèi)內(nèi)存索引是基于jvm的堆內(nèi)內(nèi)存實現(xiàn),與磁盤無交互故無磁盤io性能瓶頸,但是,不能對數(shù)據(jù)做持久化,存在數(shù)據(jù)丟失的風(fēng)險,且在數(shù)據(jù)過大時還存在gc耗時過長的嚴重性能問題;文件系統(tǒng)索引或hdfs索引能夠?qū)?shù)據(jù)做持久化,但在億級數(shù)據(jù)量環(huán)境中存在磁盤io性能瓶頸。



技術(shù)實現(xiàn)要素:

本發(fā)明的目的在于提供一種基于堆外內(nèi)存的緩存索引的方法及系統(tǒng),旨在解決現(xiàn)有上述背景技術(shù)中現(xiàn)有技術(shù)存在的不足。

本發(fā)明是這樣實現(xiàn)的,一種基于堆外內(nèi)存的緩存索引的方法,該方法包括以下步驟:

當(dāng)lucene處于啟動狀態(tài)時,在堆外內(nèi)存中為索引數(shù)據(jù)分配指定大小的內(nèi)存并放入內(nèi)存池后,對堆外緩存索引預(yù)熱;

當(dāng)lucene處于索引狀態(tài)時,判斷堆外內(nèi)存索引容量大小,若所述索引容量達到需求值,則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù);

當(dāng)lucene處于搜索狀態(tài)時,判斷堆外內(nèi)存索引中是否存在當(dāng)前需要讀取的索引數(shù)據(jù),若存在,則在堆外內(nèi)存索引中打開輸入流以讀取索引數(shù)據(jù)。

優(yōu)選地,所述堆外緩存索引預(yù)熱具體為:在文件系統(tǒng)索引中打開輸入流,判斷堆外內(nèi)存索引容量大小,若堆外內(nèi)存索引中的容量達到需求值,則將文件系統(tǒng)索引中的索引數(shù)據(jù)寫入到堆外內(nèi)存索引中。

優(yōu)選地,所述則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù)的步驟之后還包括步驟:在提交數(shù)據(jù)時,將索引數(shù)據(jù)同步到文件系統(tǒng)索引中。

本發(fā)明進一步公開了一種基于堆外內(nèi)存的緩存索引的系統(tǒng),該緩存索引的系統(tǒng)包括:

lucene啟動模塊,用于當(dāng)lucene處于啟動狀態(tài)時,在堆外內(nèi)存中為索引數(shù)據(jù)分配指定大小的內(nèi)存并放入內(nèi)存池后,對堆外緩存索引預(yù)熱;

lucene索引模塊,用于當(dāng)lucene處于索引狀態(tài)時,判斷堆外內(nèi)存索引容量大小,若所述索引容量達到需求值,則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù);

lucene搜索模塊,用于當(dāng)lucene處于搜索狀態(tài)時,判斷堆外內(nèi)存索引中是否存在當(dāng)前需要讀取的索引數(shù)據(jù),若存在,則在堆外內(nèi)存索引中打開輸入流以讀取索引數(shù)據(jù)。

優(yōu)選地,在lucene啟動模塊中,所述對堆外緩存索引預(yù)熱具體為:在文件系統(tǒng)索引中打開輸入流,判斷堆外內(nèi)存索引容量大小,若堆外內(nèi)存索引中的容量達到需求值,則將文件系統(tǒng)索引中的索引數(shù)據(jù)寫入到堆外內(nèi)存索引中。

優(yōu)選地,所述lucene索引模塊,用于當(dāng)lucene處于索引狀態(tài)時,判斷堆外內(nèi)存索引容量大小,若所述索引容量達到需求值,則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù),在提交數(shù)據(jù)時,將索引數(shù)據(jù)同步到文件系統(tǒng)索引中。

相比于現(xiàn)有技術(shù)的缺點和不足,本發(fā)明具有以下有益效果:本發(fā)明在堆外內(nèi)存容量足夠大時,讀寫都在內(nèi)存中,這樣讀寫均無磁盤交互,大大降低因磁盤io帶來的性能瓶頸,且同時又能將堆外內(nèi)存索引中的索引文件同步到文件系統(tǒng)索引中,從而達到既無磁盤io瓶頸,又能將數(shù)據(jù)持久化;同時lucene索引段的合并也在內(nèi)存中進行,不會因磁盤io瓶頸導(dǎo)致降低合并速度進而導(dǎo)致數(shù)據(jù)實時寫入延遲。

附圖說明

圖1是本發(fā)明基于堆外內(nèi)存的緩存索引的方法一實施例的步驟流程圖;

圖2是本發(fā)明基于堆外內(nèi)存的緩存索引的方法又一實施例的步驟流程圖;

圖3是本發(fā)明基于堆外內(nèi)存的緩存索引的系統(tǒng)一實施例的結(jié)構(gòu)示意圖。

具體實施方式

為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

參照圖1,本發(fā)明公開第一實施例的基于堆外內(nèi)存的緩存索引的方法,在堆外內(nèi)存容量足夠大時,讀寫都在內(nèi)存中,這樣讀寫均無磁盤交互,大大降低因磁盤io帶來的性能瓶頸,該方法包括:

s1、當(dāng)lucene處于啟動狀態(tài)時,在堆外內(nèi)存中為索引數(shù)據(jù)分配指定大小的內(nèi)存并放入內(nèi)存池后,對堆外緩存索引預(yù)熱;

s2、當(dāng)lucene處于索引狀態(tài)時,判斷堆外內(nèi)存索引容量大小,若所述索引容量達到需求值,則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù);

s3、當(dāng)lucene處于搜索狀態(tài)時,判斷堆外內(nèi)存索引中是否存在當(dāng)前需要讀取的索引數(shù)據(jù),若存在,則在堆外內(nèi)存索引中打開輸入流以讀取索引數(shù)據(jù)。

本實施例中,上述lucene為apachelucene,lucene是apache的一個開源搜索引擎項目。

如步驟s1所述,所述堆外緩存索引預(yù)熱具體為:在文件系統(tǒng)索引中打開輸入流,判斷堆外內(nèi)存索引容量大小,若堆外內(nèi)存索引中的容量達到需求值,則將文件系統(tǒng)索引中的索引數(shù)據(jù)寫入到堆外內(nèi)存索引中。

如步驟s1所述,lucene在啟動時,在堆外內(nèi)存中申請一塊指定大小的內(nèi)存,按照單位大小分配內(nèi)存塊放入內(nèi)存池中;堆外緩存索引預(yù)熱,啟動一個線程在文件系統(tǒng)索引中打開輸入流,如果堆外內(nèi)存索引中的容量足夠,則寫入到堆外內(nèi)存索引中。

如步驟s2所述,lucene索引時,如果堆外內(nèi)存索引容量足夠大,則在堆外內(nèi)存索引中打開一個輸出流,然后將索引數(shù)據(jù)寫入到堆外內(nèi)存索引中,如果堆外內(nèi)存容量不夠,則在文件系統(tǒng)索引中打開一個輸出流,將索引數(shù)據(jù)寫入到文件系統(tǒng)索引中。

如步驟s3所述,lucene搜索時,如果堆外內(nèi)存索引中存在當(dāng)前需要讀取的索引文件,則在堆外內(nèi)存索引中打開輸入流;否則在文件系統(tǒng)索引中打開輸入流以讀取索引數(shù)據(jù)。

本發(fā)明在堆外內(nèi)存中實現(xiàn)lucene內(nèi)存索引,解決gc耗時過長的問題;此外,實現(xiàn)一個索引目錄,內(nèi)部擁有一個堆外內(nèi)存索引,以及一個文件系統(tǒng)索引,堆外內(nèi)存索引可以提升lucene的搜索速度,文件系統(tǒng)索引可以保證數(shù)據(jù)可持久化。

此外,本發(fā)明在堆外內(nèi)存容量足夠大時,讀寫都在內(nèi)存中,這樣讀寫均無磁盤交互,大大降低因磁盤io帶來的性能瓶頸,且同時又能將堆外內(nèi)存索引中的索引文件同步到文件系統(tǒng)索引中,從而達到既無磁盤io瓶頸,又能將數(shù)據(jù)持久化;同時lucene索引段的合并也在內(nèi)存中進行,不會因磁盤io瓶頸導(dǎo)致降低合并速度進而導(dǎo)致數(shù)據(jù)實時寫入延遲。

參照圖2,本發(fā)明公開了另一實施例的基于堆外內(nèi)存的緩存索引的方法,該方法包括:

s1、當(dāng)lucene處于啟動狀態(tài)時,在堆外內(nèi)存中為索引數(shù)據(jù)分配指定大小的內(nèi)存并放入內(nèi)存池后,對堆外緩存索引預(yù)熱;

s2、當(dāng)lucene處于索引狀態(tài)時,判斷堆外內(nèi)存索引容量大小,若所述索引容量達到需求值,則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù);

s20、在提交數(shù)據(jù)時,將索引數(shù)據(jù)同步到文件系統(tǒng)索引中;

s3、當(dāng)lucene處于搜索狀態(tài)時,判斷堆外內(nèi)存索引中是否存在當(dāng)前需要讀取的索引數(shù)據(jù),若存在,則在堆外內(nèi)存索引中打開輸入流以讀取索引數(shù)據(jù)。

如步驟s1所述,所述堆外緩存索引預(yù)熱具體為:在文件系統(tǒng)索引中打開輸入流,判斷堆外內(nèi)存索引容量大小,若堆外內(nèi)存索引中的容量達到需求值,則將文件系統(tǒng)索引中的索引數(shù)據(jù)寫入到堆外內(nèi)存索引中。

如步驟s1所述,lucene在啟動時,在堆外內(nèi)存中申請一塊指定大小的內(nèi)存,按照單位大小分配內(nèi)存塊放入內(nèi)存池中;堆外緩存索引預(yù)熱,啟動一個線程在文件系統(tǒng)索引中打開輸入流,如果堆外內(nèi)存索引中的容量足夠,則寫入到堆外內(nèi)存索引中。

如步驟s2所述,lucene索引時,如果堆外內(nèi)存索引容量足夠大,則在堆外內(nèi)存索引中打開一個輸出流,然后將索引數(shù)據(jù)寫入到堆外內(nèi)存索引中,如果堆外內(nèi)存容量不夠,則在文件系統(tǒng)索引中打開一個輸出流,將索引數(shù)據(jù)寫入到文件系統(tǒng)索引中。

如步驟s20所述,將索引數(shù)據(jù)寫入到堆外內(nèi)存索引中后,當(dāng)提交數(shù)據(jù)時將堆外內(nèi)存索引中的索引文件同步到文件系統(tǒng)索引中。

如步驟s3所述,lucene搜索時,如果堆外內(nèi)存索引中存在當(dāng)前需要讀取的索引文件,則在堆外內(nèi)存索引中打開輸入流;否則在文件系統(tǒng)索引中打開輸入流以讀取索引數(shù)據(jù)。

本發(fā)明在堆外內(nèi)存中實現(xiàn)lucene內(nèi)存索引,解決gc耗時過長的問題;此外,實現(xiàn)一個索引目錄,內(nèi)部擁有一個堆外內(nèi)存索引,以及一個文件系統(tǒng)索引,堆外內(nèi)存索引可以提升lucene的搜索速度,文件系統(tǒng)索引可以保證數(shù)據(jù)可持久化。

此外,本發(fā)明在堆外內(nèi)存容量足夠大時,讀寫都在內(nèi)存中,這樣讀寫均無磁盤交互,大大降低因磁盤io帶來的性能瓶頸,且同時又能將堆外內(nèi)存索引中的索引文件同步到文件系統(tǒng)索引中,從而達到既無磁盤io瓶頸,又能將數(shù)據(jù)持久化;同時lucene索引段的合并也在內(nèi)存中進行,不會因磁盤io瓶頸導(dǎo)致降低合并速度進而導(dǎo)致數(shù)據(jù)實時寫入延遲。

參照圖3所示,本發(fā)明進一步公開了一種基于堆外內(nèi)存的緩存索引的系統(tǒng),該系統(tǒng)包括:

lucene啟動模塊1,用于當(dāng)lucene處于啟動狀態(tài)時,在堆外內(nèi)存中為索引數(shù)據(jù)分配指定大小的內(nèi)存并放入內(nèi)存池后,對堆外緩存索引預(yù)熱;

lucene索引模塊2,用于當(dāng)lucene處于索引狀態(tài)時,判斷堆外內(nèi)存索引容量大小,若所述索引容量達到需求值,則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù);

lucene搜索模塊3,用于當(dāng)lucene處于搜索狀態(tài)時,判斷堆外內(nèi)存索引中是否存在當(dāng)前需要讀取的索引數(shù)據(jù),若存在,則在堆外內(nèi)存索引中打開輸入流以讀取索引數(shù)據(jù)。

本實施例中,上述lucene為apachelucene,lucene是apache的一個開源搜索引擎項目。

在lucene啟動模塊1中,所述對堆外緩存索引預(yù)熱具體為:在文件系統(tǒng)索引中打開輸入流,判斷堆外內(nèi)存索引容量大小,若堆外內(nèi)存索引中的容量達到需求值,則將文件系統(tǒng)索引中的索引數(shù)據(jù)寫入到堆外內(nèi)存索引中。

在lucene啟動模塊1中,lucene在啟動時,在堆外內(nèi)存中申請一塊指定大小的內(nèi)存,按照單位大小分配內(nèi)存塊放入內(nèi)存池中;堆外緩存索引預(yù)熱,啟動一個線程在文件系統(tǒng)索引中打開輸入流,如果堆外內(nèi)存索引中的容量足夠,則寫入到堆外內(nèi)存索引中。

在lucene索引模塊2中,lucene索引時,如果堆外內(nèi)存索引容量足夠大,則在堆外內(nèi)存索引中打開一個輸出流,然后將索引數(shù)據(jù)寫入到堆外內(nèi)存索引中,如果堆外內(nèi)存容量不夠,則在文件系統(tǒng)索引中打開一個輸出流,將索引數(shù)據(jù)寫入到文件系統(tǒng)索引中。

在lucene搜索模塊3中,lucene搜索時,如果堆外內(nèi)存索引中存在當(dāng)前需要讀取的索引文件,則在堆外內(nèi)存索引中打開輸入流;否則在文件系統(tǒng)索引中打開輸入流以讀取索引數(shù)據(jù)。

在本發(fā)明實施例中,更具體的,所述lucene索引模塊2,用于當(dāng)lucene處于索引狀態(tài)時,判斷堆外內(nèi)存索引容量大小,若所述索引容量達到需求值,則在堆外內(nèi)存索引中打開輸出流以寫入索引數(shù)據(jù),在提交數(shù)據(jù)時,將索引數(shù)據(jù)同步到文件系統(tǒng)索引中。

本發(fā)明在堆外內(nèi)存中實現(xiàn)lucene內(nèi)存索引,解決gc耗時過長的問題;此外,實現(xiàn)一個索引目錄,內(nèi)部擁有一個堆外內(nèi)存索引,以及一個文件系統(tǒng)索引,堆外內(nèi)存索引可以提升lucene的搜索速度,文件系統(tǒng)索引可以保證數(shù)據(jù)可持久化。

此外,本發(fā)明在堆外內(nèi)存容量足夠大時,讀寫都在內(nèi)存中,這樣讀寫均無磁盤交互,大大降低因磁盤io帶來的性能瓶頸,且同時又能將堆外內(nèi)存索引中的索引文件同步到文件系統(tǒng)索引中,從而達到既無磁盤io瓶頸,又能將數(shù)據(jù)持久化;同時lucene索引段的合并也在內(nèi)存中進行,不會因磁盤io瓶頸導(dǎo)致降低合并速度進而導(dǎo)致數(shù)據(jù)實時寫入延遲。

以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
孟州市| 淮滨县| 公主岭市| 安多县| 太仓市| 兴和县| 清水县| 揭西县| 游戏| 岢岚县| 嘉鱼县| 拉孜县| 吴江市| 昆山市| 双辽市| 南靖县| 南召县| 高台县| 乡城县| 县级市| 恩平市| 丁青县| 安龙县| 岳阳市| 休宁县| 壤塘县| 长治县| 保山市| 汉源县| 荥经县| 蒲江县| 张家港市| 乌恰县| 德江县| 南漳县| 施秉县| 慈利县| 绥棱县| 北宁市| 余干县| 章丘市|