原创 LevelDB源碼解讀——MemTable和sstable

在前幾章中,我們已經熟悉了LevelDB中的創建、讀數據、寫數據等基本操作,現在應該仔細來看看存儲數據的結構體了,一開始我們已經看了skiplist的實現,其實MemTable中基本上就是依靠skiplist來實現的。MemTab

原创 LevelDB源碼解讀——簡介及數據結構

久聞LevelDB大名,由於課程需要,藉助此次機會對levelDB源碼的幾個主要模塊進行解讀,同時加強對c++的理解。 LevelDB簡介 LevelDB是一個google開源的持久型K-V數據存儲引擎,是一個很好的c++學習源碼

原创 LevelDB源碼解讀——數據庫開啓、讀取與存入

本章主要介紹對LevelDB基礎操作Open,Put,Get等操作,熟悉具體的數據讀寫處理流程。 先放一個基本的LevelDB的基礎操作demo。demo實現的就是首先打開一個數據庫,然後向其插入一個KV數據,隨後讀取出來。 in

原创 LevelDB源碼解讀——Log日誌文件

日誌文件是LevelDB架構中最重要的一個部分,由於LSM-Tree是將寫入的數據先存放在內存中的Memtable, 當到達臨界時,就將其變成只讀Immutable Memtable,隨後後臺進程將其flush到磁盤上sstabl

原创 muduo Reactor結構分析

     muduo採用的是one Loop per Thread 的模式,即每個線程中有一個主循環,再配合着IO多路複用,即可實現在一個線程中同時監聽多個fd。主要利用EventLoop{.h/.cc} Channel{.h/.cc}

原创 c++對象模型解析(一)

    本系列記錄在學習過程中,我對於c++對象模型的理解,主要包括如下知識點等底層實現機制。 目錄 struct 和 class之間關係區別 多態的實現方法 對象的大小 構造函數 NRV(Named Return Value)優化 in

原创 初識Nginx

什麼是Nginx     Nginx是一個高性能Web服務器,其與Tomcat、Apache等服務器相比,擁有以下特點 擁有響應快(單次請求獲得更快響應) 高擴展性(模塊之間的耦合度較低) 高併發(單機支持10萬連接) 熱部署(在不停止N

原创 muduo多線程異步日誌分析

    最近在看muduo的源碼,對於其日誌系統的實現頗爲感興趣,找了兩三天好好研究了一下,本文記錄一些所學到的知識。 基礎知識     日誌是每個高性能服務器必備的組件,分爲兩種:診斷日誌和交易日誌。診斷日誌,主要的作用是供開發人員和運

原创 C++中的左值與右值

來源     C++中的左值和右值其實是一個很久遠的概念,但是逐漸到C++11才被重視起來。如今理解這兩個概念對於正確運用C++11的一些特性十分有幫助。     首要要知道這兩個名詞其實是繼承C語言,C語言中是可以簡單理解爲:左值是賦值

原创 MYSQL事務

事務簡介     事務是數據庫區別於文件系統的最重要特徵之一。事務可以保證數據庫從一個狀態轉移到另一個狀態,也就是說在一個事務中的語句要麼全部一起提交(所有修改都會保存),要麼回滾(所有修改都不會保存)。     事務的性質:原子性,一致

原创 MYSQL索引

索引簡介     索引是存儲引擎用於加快查詢的一種數據結構,一種優良的索引策略能夠對查詢性能有效的優化。索引有以下三個優點: 索引減少了需要掃描的數據量 索引可以幫助服務器避免排序和臨時表 索引可以將隨機IO變成順序IO     但是,索

原创 MYSQL基礎

一、MySQL邏輯架構     MySQL的邏輯架構主要包含三層。最上層的應用層,主要基於網絡客戶端/服務器的工具或者服務,比如連接認證,授權認證,安全等功能。     第二層是MySQL的核心服務功能層,包括查找解析,分析,優化,緩存以

原创 docker安裝與使用

轉載自 https://blog.csdn.net/yx_222/article/details/80936757 本文主要介紹在Ubuntu16.04 LTS 64位系統下通過apt的Docker官方源安裝最新的Docker CE

原创 深入理解數據結構——樹的遍歷

概述     樹是一個種非線性數據結構,由於線性數據結構的訪問時間太慢,因此推演出“樹”結構,其一般操作複雜度都爲O(logn)。樹的應用非常廣泛:如文件系統,計算表達式的值,數據存儲磁盤上的索引等。     樹的遍歷有很多種方法,主要包

原创 深入理解數據結構——鏈表、棧、隊列

一、鏈表 (1)數組和鏈表的比較 數組是在連續的地址空間中存儲,鏈表可以不連續 數組的查找較爲方便,然而插入和刪除操作花銷大,需要整塊數組的移動 鏈表的查找不方便,需從表頭開始遍歷,但是插入和刪除操作較爲方便 數組在初始化時候需要給定大小