一種高并發的存儲裝置的制造方法
【技術領域】
[0001]本發明涉及一種內存數據庫裝置,特別是涉及一種高并發的存儲裝置。
【背景技術】
[0002]現有數據庫分為關系型和非關系型數據庫。關系型數據庫便于存儲結構化數據,支持復雜查詢和數據分析,但是查詢速度較慢。
[0003]隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。
[0004]非關系型數據庫可存取非結構化數據,速度相對關系數據庫有較大提升,但是高并發的情況下依然不能滿足高速存取的效率問題。
【發明內容】
[0005]本發明的目的是提出一種低延時、多進程、高吞吐的高并發的存儲裝置,已解決高并發的情況下高效、高速地存儲數據。
[0006]為實現上述目的,本發明提供了一種高并發的存儲裝置,包括應用程序進行訪問操作的統一訪問接口、擴展數據庫存儲引擎的存儲結構單元,所述存儲結構單元中的內存分配使用共享內存分配管理,所述裝置在統一訪問接口中對數據預先進行分片處理;
[0007]所述分片處理包括如下步驟:獲得鍵,并對鍵計算哈希數,將所得哈希數對分片數量取余,結果即為鍵的分片序號,之后所述裝置根據所述分片號獲取分片;
[0008]所述統一訪問接口包括查詢接口、累加接口,并且所述應用程序進行數據查詢、累加操作時,所述裝置不需要獲得鎖服務。
[0009]優選地,所述存儲結構單元至少包括固定大小的哈希、帶有鍵描述的哈希、同一位置排序的哈希、帶有過期時間的哈希。
[0010]優選地,所述裝置在執行數據查詢、累加操作的同時通過模擬鎖服務進行數據插入、刪除、更新操作。
[0011]優選地,所述模擬鎖服務在哈希結構的每個哈希位置通過原子操作進行。
[0012]優選地,所述通過原子操作模擬鎖機制至少包括如下步驟:所述裝置首先獲取哈希位置的互斥鎖,并且在獲取鎖服務的時候,所述裝置依據原子操作函數將每個哈希位置包含的整數進行置位;
[0013]之后原子操作函數先返回數值,然后進行或運算;
[0014]若返回數值為0,則獲得鎖成功;若返回數值為1,則放棄時間片,并重復之前的操作,直到獲得鎖。
[0015]基于上述技術方案,本發明的優點是:
[0016]本發明具有的統一訪問接口不僅提高了程序的擴展性,在應用程序使用過程中可根據不同的需求對存儲結構單元直接進行修改替換而不必修改應用程序接口,可以避免大量的繁瑣工作,降低耦合性。本裝置采用純內存操作,在寫入過程中,直接將操作記錄追加到文件的末尾處,有效地提高了寫入效率,降低延遲。
[0017]本裝置在不涉及內存修改的操作過程如查詢、累加則不需要獲得鎖服務,而在執行插入、刪除、更新等涉及內存修改的操作時可通過模擬鎖服務進行,所以本裝置在查詢、累加的過程中,插入、刪除、更新可以同時進行,沒有互斥關系,能夠有效地提升裝置效率。
[0018]進一步,本裝置是一個低延時、高并發、高吞吐的數據管理裝置,單次查詢延時小于1ms,每秒插入查詢次數可達50萬次。
【附圖說明】
[0019]此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中:
[0020]圖1為尚并發的存儲裝置不意圖;
[0021 ] 圖2為分片處理步驟示意圖;
[0022]圖3為模擬鎖服務示意圖;
[0023]圖4為查詢請求執行示意圖;
[0024]圖5為累加請求執行示意圖。
【具體實施方式】
[0025]下面通過附圖和實施例,對本發明的技術方案做進一步的詳細描述。
[0026]實施例1
[0027]本裝置是一個非關系型數據庫系統,基于共享內存的內存數據庫。本裝置大體結構如圖1所示,裝置對外提供增刪查改等數據庫主要功能接口,存取鍵值對(key-value)類型的數據。
[0028]具體地,本高并發的存儲裝置,包括應用程序進行訪問操作的統一訪問接口 101、擴展數據庫存儲引擎的存儲結構單元102。本裝置不提供端口監聽以及網絡訪問,而是直接對進程提供統一訪問接口 101。
[0029]更具體地,所述統一訪問接口 101包括更新接口 1011、累加接口 1012。應用程序可通過相應的接口進行操作,統一訪問接口 101不僅提高了程序的擴展性,在應用程序使用過程中可根據不同的需求對存儲結構單元102直接進行修改替換而不必修改應用程序接口,可以避免大量的繁瑣工作,降低耦合性。
[0030]所述存儲結構單元102只需要實現對外提供的公共接口,即可以根據不同的業務需求設計更加適合的存儲結構,如哈希存儲。進一步,所述存儲結構單元102至少包括固定大小的哈希1021、帶有鍵描述的哈希1022、同一位置排序的哈希1023、帶有過期時間的哈希1024。上述哈希結構類似,但是其能夠針對不同的需求進行選擇,有的更偏向于性能,有的更偏向于節省空間。與此同時,其還可根據時間空間要求的不同,有針對性的對存儲結構進行優化。
[0031]進一步,所述存儲結構單元102中的內存分配使用共享內存103分配管理。具體而言,其采用第三方的共享內存庫。當然對于本領域普通技術人員而言,在單進程或進程較少的條件下,也可以直接采用內存管理而不使用共享內存。共享內存可滿足一些多進程訪問的需求,如Nginx的多進程服務可以使用共享內存,從而在一定程度上節省內存空間。
[0032]為了使數據更加分散以方便查詢,本裝置在統一訪問接口 101中對數據預先進行分片處理,分片數量可由用戶預先定義。所述分片處理包括如下步驟:獲得鍵210,并對鍵計算哈希數202,將所得哈稀數對分片數量取余203,結果即為鍵的分片序號,之后裝置根據所述分片號獲取分片204。
[0033]如圖2所示,具體地,當一次基本操作發生的時候,裝置會首先對獲得的鍵(key)進行一次哈希計算,并將所得哈希數對分片數量取余,結果即為該鍵(key)有可能存在的分片序號,用所述分片序號獲取存儲分片,并進行之后的基本運算。
[0034]本裝置是一個低延時、高并發、高吞吐的數據管理裝置,單次查詢延時小于lms,每秒插入查詢次數可達50萬次。
[0035]為了達到比較高的qps,本裝置采用純內存操作,在寫入一條數據時,數據存入內存中,而并不直接寫到磁盤上,因為這樣會增加磁盤的尋址時間,降低性能。所以,本申請直接把操作命令順序的寫入操作日志中,因為都是順序寫入,所以可以忽略磁盤尋址時間,提高效率。在寫入過程中,直接將操作記錄追加到文件的末尾處,有效地提高了寫入效率,降低延遲。
[0036]進一步,在高并發的條件下,多進程訪問往往需要全局鎖服務保證數據的一致性,以避免內存錯誤。但是如果使用操作裝置本身提供的互斥鎖或者讀寫鎖來實現一個全局鎖服務,則本裝置不可能達到低延時的要求。
[0037]本裝置在不涉及內存修改的操作過程如查詢、累加則不需要獲得鎖服務,而在執行插入、刪除、更新等涉及內存修改的操作時可通過模擬鎖服務進行,所以本裝置在查詢、累加的過程中,插入、刪除、更新可以同時進行,沒有互斥關系,能夠有效地提升裝置效率。