在线亚洲AV日韩AV综合AV,国产订精品电影,久久国产精品蜜

      <thead id="u9ncv"><del id="u9ncv"><rp id="u9ncv"></rp></del></thead>

        <thead id="u9ncv"></thead>

        <thead id="u9ncv"><s id="u9ncv"></s></thead>

          <strike id="u9ncv"></strike>
          <table id="u9ncv"><form id="u9ncv"></form></table>
        1. <strike id="u9ncv"></strike>
        2. 使用幫助 | 聯系電話:400-880-0256 0769-23037585 21686281

          實現鍵值對存儲(一):什么是鍵值對存儲,為什么要實現它

          作者:admin 發表于:2014-08-26 點擊:1956  保護視力色:

          在本文中,我將會以鍵值對是什么的一個簡短描述開始。然后我將解釋本項目之后的一些理由,最后我將說明我打算實現的鍵值對存儲的主要目標。這里是本文中將會包含內容的列表:

          1. 鍵值對存儲的概述
          2. 鍵值對存儲 vs 關系型數據庫
          3. 為什么要實現鍵值對存儲
          4. 計劃
          5. 引用

           

          1. 鍵值對存儲的概述

          基于很多文章已經有了很多詳細的介紹,本節只是對于鍵值對存儲的一個簡短介紹。我已經選擇了幾篇放在本文底部的引用一節中。

          鍵值對存儲是數據庫最簡單的組織形式?;旧纤械木幊陶Z言都帶有應用在內存中的鍵值對存儲。C++STL的映射容器(map container)和Java的HashMap以及Python的字典類型都是鍵值對存儲。鍵值對存儲通常都有如下接口:

          Get( key ):?獲取之前存儲于某標示符“key”之下的一些數據,或者“key”下沒有數據時報錯。

          Set( key, value ):?將“value”存儲到存儲空間中某標示符“key”下,使得我們可以通過調用相同的“key”來訪問它。如果“key”下已經有了一些數據,舊的數據將被替換。

          Delete( key ):??刪除存儲在“key”下的數據。

          大部分低層實現都是使用哈希表或者某種自平衡樹(例如B-樹或者紅黑樹)。有時候數據太大而不裝不進內存,或者必須維持數據謹防系統因為未知原因而崩潰。在這些情況下,就必須使用到文件系統。

          鍵值對存儲是NoSQL運動的一部分,NoSQL將所有不使用基于關系型數據庫概念的數據庫系統組合在一起。維基百科上的NoSQL詞條很好的總結了這些數據庫的特征。

          • 不使用SQL查詢語言
          • 可不全面支持ACID(原子性、一致性、隔離性、持久性)。
          • 可提供分布式、容錯強的結構

           

          2. 鍵值對存儲和關系型數據庫

          不像關系型數據庫,鍵值對存儲不需要了解值中的數據,也沒有像MySQL或者PostgreSQL中那樣的任何結構。這同時表示像SQL那樣用WHERE語句或者通過任何形式的過濾來請求數據中的一部分是無法做到的。如果你不知道去哪找,你必須遍歷所有的鍵,獲取它們對應的值,應用某種你需要的過濾,然后保留你想要的東西。這將會需要大量的運算,也即表示只有當鍵已知的時候才能體現出最佳性能,否則鍵值對存儲將無法勝任(注意:一些鍵值對存儲能夠存儲結構化的數據并有字段索引)。

          因此,即使鍵值對存儲在訪問速度上經常比關系型數據庫系統性能要好數個數量級,但對鍵已知的需求也限制著其應用。

           

          3. 為什么要實現鍵值對存儲

          我開始這個項目主要是作為充電的一種方式,學習和補充一些核心后端基本原理知識。讀書和維基上的文章很無聊并且沒有練習,因此我認為著手開始做并且實際寫一寫代碼會更好。我要找的是一個可以讓我復習如下內容的項目:

          • C++編程語言
          • 面向對象設計
          • 算法和數據結構
          • 內存管理
          • 多進程或或多線程的并發管理
          • 服務器/客戶端模式的網絡
          • 磁盤訪問的I/O問題和文件系統的使用

          一個使用文件系統作為永久存儲,且提供網絡接口的鍵值對存儲將會包含上面列出的全部范圍的內容。這個項目剛好能夠處理后端工程的各個領域。但是讓我們面對現實。市面上已經有了大量的鍵值對存儲,其中一些是由很聰明的人實現的,并且已經在大公司的生產環境使用了。這包括Redis, MongoDB, memcached, BerkeleyDB, Kyoto Cabinet 和LevelDB。

          除此之外,近期出現了關于鍵值對存儲的潮流。好像每人都有一個并且想給大家看自己的鍵值對存儲系統有多么出色和快速。這個問題在Leonard Lin博客中關于鍵值對存儲的文章中描述了。這些項目中大多數在那時還不成熟且不能應用于生產環境,但人們仍然想展示出來。在博客文章或會議幻燈片中經??梢钥吹綄σ恍┗逎I值對存儲系統性能的比較。這些圖表基本上毫無意義,并且只是在自己的硬件上用自己的數據和應用進行的孤立測試,可以告訴你哪一種鍵值對存儲最適用于解決你的問題。這里是性能所依賴的條件:

          • 硬件
          • 使用的文件系統
          • 實際應用和具體哪些鍵會被訪問(引用的局部性
          • 數據集,特別是鍵和值的長度,以及使用哈希表的時候鍵碰撞的可能性。

          因此,編寫一個鍵值對存儲系統并有一定的影響力是比較難的,因為其很有可能因為其它已存在的更好的鍵值對存儲系統的存在而被忽視,或者被簡單的淹沒在半生不熟的業余項目中而沒人關心。

          為了差異性,這個項目不能像其他人做的那樣為了速度,而必須瞄準于填補現有解決方案間的空隙。這里是我發現的能夠讓鍵值對項目脫穎而出的幾個方法。

          • 適應于某種特定數據類型(例如:圖片,地理數據等)
          • 適應于某種特定操作(例如讀取性能特別好或者寫入性能特別好等)
          • 適應于某種特定問題 (例如:自動參數調節,很多鍵值對存儲都有很多選項,而找到一個最好的參數設置有時候很棘手)
          • 提供更多數據訪問選項。以LevelDB為例,數據可以向前或者向后訪問,有迭代器,是按照鍵排序的。并不是所有的鍵值對存儲都能做到這樣。
          • 使自己的實現更平易近人:現在,很少有鍵值對存儲系統有完全的代碼。如果你需要快速搭建一個項目,而你必須為其自定義一個鍵值對存儲。即便不是一個廣為人知的項目,有代碼的解決方案看起來確實平易近人并且會作為選項之一。實際上理解代碼并相信這個解決方案會彌補這些不足。
          • ?明確應用。這兒有一個實際問題的例子:很多網絡爬蟲框架(網絡蜘蛛)有一個粗劣的接口來管理他們需要爬的URL,這經常使得客戶使用鍵值對存儲來實現邏輯。所有的網絡爬蟲框架都能因一個統一的URL優化的鍵值對存儲而受益。

           

          4. 計劃

          項目的目標是用易于理解的C++代碼開發一個輕量級鍵值對存儲。事實上,我打算在本項目中遵從Google C++ 代碼風格導引。我將會使用哈希表作為底層數據結構,數據將會存儲在硬盤上,同時將會實現一個網絡接口。我不會項目進度而匆忙完成,而是要在設計和實現時簡潔和清晰。我同樣會盡我能力最小化硬盤上數據庫文件的空間占用。

          我不想重新發明輪子,所以我會從查看別的C或者C++的鍵值對存儲項目開始,然后從中選取比較出色的。我會逐漸學習他們的結構和代碼,從中獲取啟示。后端工程是我的核心技能之一,我已經有了這個項目所需的大部分知識,但我知道我還要學很多新東西,這使其對我來說更加有意思。我同樣樂于記錄下其中的全部東西。以前我很喜歡逛核心技術博客,例如Alexander SandlerGustavo Duarte,我也想貢獻出一些有用的,盡可能好的東西。

          我的研究結果和鍵值對存儲的一些工作將在這個文章系列中記錄。不要試圖用文章的日期來推測鍵值對存儲實現的時間:文章可能和實際研究或者做的事之間有相當大的延遲。

          在第二部分,我將搜索頂級的鍵值對存儲項目并解釋為什么我選擇了其中的部分作為參考,而不選另一些。其他的文章你可以參考本系列的目錄。

          你可以在下邊的“引用”一節中找到一些文章和書籍章節來學習更多關于鍵值對存儲的知識。在閱讀第二節之前,我強烈建議至少讀一下The NoSQL EcosystemKey Value Stores: A Practical Overview。

           

          5. 參考

          實現鍵值對存儲(一):什么是鍵值對存儲,為什么要實現它,首發于博客 - 伯樂在線。

          在线亚洲AV日韩AV综合AV,国产订精品电影,久久国产精品蜜