[發(fā)明專利]基于Lua的TTLB內(nèi)Servlet批量查詢HBase數(shù)據(jù)方法有效
| 申請?zhí)枺?/td> | 201410798124.9 | 申請日: | 2014-12-18 |
| 公開(公告)號: | CN104572865B | 公開(公告)日: | 2018-03-20 |
| 發(fā)明(設計)人: | 胡自權;尹德輝;夏紀毅 | 申請(專利權)人: | 瀘州醫(yī)學院 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 成都高遠知識產(chǎn)權代理事務所(普通合伙)51222 | 代理人: | 李高峽 |
| 地址: | 646000 四*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 lua ttlb servlet 批量 查詢 hbase 數(shù)據(jù) 方法 | ||
技術領域
本發(fā)明涉及一種數(shù)據(jù)處理方法,尤其涉及一種基于Lua的TTLB內(nèi)Servlet批量查詢HBase數(shù)據(jù)方法。
背景技術
HBase是一個支持非結構化存儲的高可靠性、高性能、可伸縮的開源數(shù)據(jù)庫。采用Servlet訪問HBase可能發(fā)生兩個線程同時訪問同一資源,造成數(shù)據(jù)不一致,導致線程不安全。Servlet規(guī)范、Java教材、Internet和相關文獻指出:現(xiàn)有解決線程不安全的方法主要有:實現(xiàn)SingleThreadModel接口、同步共享數(shù)據(jù)、避免對象實例、增加延時。
1、實現(xiàn)SingleThreadModel接口
實現(xiàn)了SingleThreadModel接口,Servlet容器保證只有一個線程servlet實例在運行,而其它請求排隊等待。
2、同步共享數(shù)據(jù)
synchronized防止異步調(diào)用,每次只有一個線程訪問同步代碼塊。
3、避免對象實例
全局變量或者共享變量造成了線程不安全;而局部變量保證了線程安全。
4、增加延時
采用sleep函數(shù)增加延時,使得只有一個線程修改全局變量或者共享變量,而其它線程處于阻塞狀態(tài):還沒有將修改的數(shù)據(jù)刷新到內(nèi)存。
以上四種方法雖能設計出線程安全的Servlet,但存在系統(tǒng)開銷大、降低系統(tǒng)并發(fā)處理性能、難確定阻塞時間。對于實現(xiàn)SingleThreadModel接口方法,Servlet為每個請求創(chuàng)建一個單獨Servlet實例,大量Servlet實例將引起系統(tǒng)大量的開銷。對于避免使用實例對象方法,采用局部變量將增大每個線程的私有棧。對于同步共享數(shù)據(jù)方法,每一時刻只允許一個線程執(zhí)行同步代碼,其它線程處于同步阻塞狀態(tài),這將降低系統(tǒng)的并發(fā)處理性能。對于增加延時方法,如果延時太短,當前線程還沒有處理完,而處于阻塞狀態(tài)的線程因睡眠時間結束開始運行,可能造成線程不安全;如果延時過長(如超過10秒),則根據(jù)國際3/5/10原則,用戶很難接受長時間等待,增加延時方法很難確定:經(jīng)過多長延時線程才安全又讓等待在用戶可接受范圍內(nèi)?
HBase面向海量數(shù)據(jù)存儲,當大規(guī)模用戶采用Servlet訪問HBase時,以上四種方法的問題在Servlet訪問HBase中更為突出。不僅存在系統(tǒng)開銷大、降低系統(tǒng)并發(fā)處理性能、難確定阻塞時間,而且還會引發(fā)更嚴重的問題:根據(jù)HBase規(guī)范,HTable.get(Get)和HTable.put(Put)方法在多線程環(huán)境下也是不安全的。一般對HBase表記錄的查詢和存儲,需分開處理。
發(fā)明內(nèi)容
本發(fā)明旨在提供一種基于Lua的TTLB內(nèi)Tomcat批量查詢HBase數(shù)據(jù)方法,通過Lua表緩存TTLB內(nèi)查詢請求,該方法確保了Servlet并發(fā)查詢HBase的線程安全,允許Tomcat能接納更大規(guī)模的用戶訪問,還減少了HBase集群網(wǎng)絡I/O。
為達到上述目的,本發(fā)明是采用以下技術方案實現(xiàn)的:
本發(fā)明公開的基于Lua的TTLB內(nèi)Servlet批量查詢HBase表數(shù)據(jù)方法,包括以下步驟:
步驟1、建立Wrapper類、LuaScript函數(shù)和ReadHBase類,
所述Wrapper類用于將查詢請求緩存在Lua表中,以及從Lua表中快速檢索查詢結果;
所述LuaScript函數(shù)用于打包TTLB內(nèi)所有線程并發(fā)查詢請求,調(diào)用ReadHBase類的Java API完成批量查詢HBase表記錄,解包返回結果并生成每個線程的返回結果;
所述ReadHBase類用于解包從LuaScript傳過來的參數(shù),調(diào)用Java API函數(shù)HTable.get(List<Get>),打包該get函數(shù)的返回結果;
步驟2、獲取Wrapper類對象實例:包括獲取欲查詢HBase表和欲查詢表行,產(chǎn)生查詢請求標識;
步驟3、將欲查詢HBase表、欲查詢HBase表行和查詢請求標識緩存在Lua表Readqueue中;
步驟4、通過LuaScript打包TTLB內(nèi)批量查詢請求;
步驟5、通過ReadHBase解包TTLB內(nèi)批量查詢請求;
步驟6、調(diào)用Java API函數(shù)HTable.get(List<Get>);
步驟7、通過ReadHBase打包批量查詢的結果;
步驟8、通過LuaScript解包批量查詢的結果;
步驟9、生成線程調(diào)用結果;
步驟10、獲取查詢結果。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于瀘州醫(yī)學院,未經(jīng)瀘州醫(yī)學院許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410798124.9/2.html,轉載請聲明來源鉆瓜專利網(wǎng)。
- JAVA實現(xiàn)WEB服務器主動發(fā)起向瀏覽器發(fā)送數(shù)據(jù)的方法
- 部署SIP Servlet應用、管理SIP Servlet應用的方法及其系統(tǒng)
- 一種部署方法、SIP業(yè)務的處理方法與設備
- 用于XMPP協(xié)議的SERVLET API和方法
- 基于Lua的TTLB內(nèi)Servlet批量查詢HBase數(shù)據(jù)方法
- 一種實現(xiàn)flex與servlet交互的方法
- 一種模塊動態(tài)加載方法及裝置
- Servlet接口測試方法及測試客戶端
- 一種web應用更新方法及web服務器
- 一種通過Servlet處理Rest請求的方法及裝置





