两个人的电影免费视频_国产精品久久久久久久久成人_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
叙永县| 芦山县| 红原县| 龙门县| 泽普县| 郁南县| 兴业县| 水富县| 黄龙县| 连云港市| 久治县| 老河口市| 四平市| 鄱阳县| 黄梅县| 融水| 青神县| 汉川市| 大港区| 綦江县| 太湖县| 靖江市| 含山县| 榆树市| 土默特左旗| 延长县| 阳信县| 靖江市| 贺兰县| 乐昌市| 张家川| 德清县| 绵阳市| 武汉市| 宁陵县| 商河县| 阜新| 新巴尔虎右旗| 长葛市| 和龙市| 青州市|