原创 linux中的頁緩存和文件IO

        雖然仔細看過《linux內核設計與實現》,也參考了很多的博客,並且做了linux進程空間、address_space和文件的關係圖(設爲圖1,參考博客),但是對於頁緩存和文件IO之間關係的細節一直不是特別明朗。趁着元旦假期

原创 linux文件體系結構和虛擬文件系統

        linux中的虛擬文件系統(Virtual File System, VFS)是一種採用面向對象編程策略(儘管書寫操作系統的C語言本身不支持面向對象編程,但是思想還是可以借鑑的),是對該操作系統所支持的所有實際物理文件系統

原创 redis數據結構---intset

        這兩天看過《redis設計與實現》中的intset一章,配合着redis 4.0.1中的源碼,感覺自己對redis中的intset有了新的認識。在這裏寫下自己對於intset的理解,以及redis源碼中的實現技巧。   

原创 redis數據結構---sds

        看過了《redis設計與實現》,瞭解了redis設計的基本原理。但是三個月之後發現,遺忘了很多,只好重新溫習。只是,這次是從redis源碼的角度學習的,當然過程中會翻閱《redis設計與實現》這本書,畢竟需要一個框架指導。

原创 redis cluster 重新分片

我們在IP地址127.0.0.1已經創建好了三個節點,端口分別是7000、7100和7200,以下分別用7000、7100和7200表示這三個節點,這三個節點的配置文件中的配置選項cluster-config-file分別爲nodes-7

原创 Mini transaction

Mini transaction的定義和劃分         Mysql中所有的事務在innodb存儲引擎內部都是通過mini transaction完成的,將一個事務劃分成多個mini transaction的依據是:每條語句都作爲一個

原创 Innodb中LSN(log sequence number)詳解

本篇文章關於Innodb中的LSN的介紹摘自本篇博客。 LSN稱爲日誌的邏輯序列號(log sequence number),在innodb存儲引擎中,lsn佔用8個字節。LSN的值會隨着日誌的寫入而逐漸增大。 根據LSN,可以獲取到幾個

原创 邏輯地址、線性地址和物理地址之間的轉換

       首先說明一點,本篇的文章是根據自己的理解總結,但是圖可能是在已有的博客中截圖的,在此對那些對我理解該部分知識提供幫助的博客博主表示感謝!       在邏輯地址、線性地址和物理地址一節中,已經對邏輯地址、線性地址和物理地址的

原创 redis數據結構---ziplist

        最近兩天仔細研究了redis中的ziplist數據結構,再回顧之前寫過的關於dict和zskiplist數據結構的博客文章,發現對於實現代碼的細節竟然有些遺忘,看來及時的複習還是很有必要的。這是前話。           

原创 內存映射mmap

        內存映射是linux中的一個重要機制,它和虛擬內存管理和文件IO都有直接的關係,本篇將詳細介紹linux中內存映射的原理。mmap基本概念        在介紹內存映射之前,首先知道現代計算機系統普遍採用虛擬內存的方式管理

原创 關於C中struct和union長度的詳解

  這幾天看《代碼大全》中的第十三章---不常見的數據類型,裏面講解到了C語言中的struct以及對指針的解釋,聯想到以前看過相關的關於C語言中stuct長度的文章,只是現在有些淡忘了,因此今天把保存的資料重新拿出來溫習一遍,同時寫下這篇

原创 概念數據模型到邏輯數據模型的轉化

  前面的兩篇博客分別介紹了概念數據模型、邏輯數據模型以及物理數據模型和邏輯數據模型經常使用的三種數據模型,這篇博客介紹在數據庫的設計過程中將概念數據模型轉化爲邏輯數據模型的方法,以及涉及的一些基本的概念。本篇文章所介紹的主要是針對關係數