因為不太明白如何提高效率,我又做了一些無謂的嘗試,比如把同字首的寫到乙個小檔案裡,例如8k,如果資料量小,多個字首的資料都寫在一塊裡,猜想從路徑直接定位到檔案會快很多。結果嘗試了一下,結果和原來的方法一樣的結果甚至更慢….
我們可以知道每一塊其實只要找到字首一致的那批long, 這可以轉變為乙個key-value查詢的問題了。採用一些高效的kv資料庫,例如berkeleydb, tokyo cabinet,之類的可能在讀取資料方面比自己寫的檔案隨機讀取要好。
於是我又用了lucene來做,(berkeleydb收費,tc在windows上沒法測)用lucene是因為可以直接利用取docid的方法來獲取出結果。 這樣寫資料的時候把所有同字首的都聚一塊,吧long 根據規則轉換成byte ,在document上加入乙個field只儲存這個byte, 字首的值的順序加入到indexwriter中。獲取結果的時候直接indexsearcher.doc(字首值) 得到document 後得到byte 。根據不完全的測試,速度好像快了一些,但是依然是隨機查詢硬碟的消耗,而且索引比常規的大一倍多,而且資料生成慢了很多。後來又試了壓縮byte,結果大小沒變多少,巨慢。如果有的kv資料庫比如thuirdb這種唯讀不寫的,估計就爽了。
加了lucene的**在這:
二進位制搜尋
轉會 二分查詢演算法基本思想 二分查詢演算法的前置條件是,乙個已經排序好的序列 在本篇文章中為了說明問題的方便,假設這個序列是公升序排列的 這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,假設大於這個元素,就在當前序列的後半部分繼續查詢,假設小於這個元素,就在當前序列的前半部分繼續查詢,直...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
java學習 二進位制
二進位制 用16進製制簡化二進位制的書寫,4位二進位制數可用一位16進製制數表示,例如 二進位制 1110 1111 1101 16進製制 efd int資料型別最高為表示符號位,1為負,0為正 拿byte型別舉例,byte佔乙個位元組,8位,表示的數值範圍 128 127 byte最大數 0111...