原创 【連載】關係型數據庫是如何工作的?(2) - 時間複雜度

基礎知識 很早之前,開發者必須準確的計算他們編寫代碼的操作指令數量,他們深刻理解使用的數據結構和算法,因爲那個時候CPU計算能力和內存儲存空間都很小,需要最大限度的利用起來,經不起浪費。 在這一部分我會介紹一些這方面的內容,因爲對

原创 基準測試工具sysbench安裝和使用

sysbench介紹 SysBench是一個模塊化的、跨平臺、多線程基準測試工具,主要用於評估測試各種不同系統參數下的數據庫負載情況。它主要包括以下幾種方式的測試: 1. cpu性能 2. 磁盤io性能 3.

原创 Linux學習系列-淺析EXT2文件系統

注:EXT2文件系統是早期Unix系統採用的文件系統,目前比較新的EXT3也是繼承了EXT2大部分特性拓展而來,因此學習Linux文件從EXT2開始會比較好入手。 文件系統是什麼? 標準定義參見維基百科【文件系統】。說說我自

原创 Spymemcached操作隊列分析

Spymemcached是一個Memcached(一個高性能內存對象緩存系統)的開源客戶端程序。其他MC客戶端還有xmemcached、Memcached Client for Java等。我們使用MC客戶端程序與MC服務端通信

原创 Java程序通用場景性能分析

問題場景 本地程序調用多個HTTP接口獲取遠端數據,然後拼裝數據生成多個本地文件。 性能分析 > 實際上這個場景分爲以下兩步,我們實際需要分析影響每一步性能的因素,並進行優化。 1. 調用遠程HTTP接口   本地和遠端代碼運

原创 【連載】關係型數據庫是如何工作的?(5) - B+Tree索引

雖然上一章節介紹的二叉搜索樹在查詢指定值時表現很好,但是當查詢兩個值之間的多個節點時,就會遇到很大的問題。因爲需要遍歷整個樹的節點,並檢查每個節點是否在指定的區間內。而且遍歷整顆樹是隨機磁盤IO(譯者注:隨機IO會導致頻繁的磁頭換道,所以

原创 【連載】大話系統架構決策 - 靈活性

前言 爲什麼要首先談靈活性呢?其實是因爲博主從事軟件行業長久以來,最煩躁的,也是經常聽到身邊同事抱怨的一句話就是:我靠!天啦擼!需求又變啦!!! 其實需求變更就涉及到系統架構的特性(關注點)之靈活性。系統靈活性高,那麼任你需求如何變更,我

原创 【連載】大話系統架構決策 - 易用性

前言 爲什麼要談易用性呢?其實是因爲博主從事軟件行業長久以來,另一最煩躁的,也是經常聽到身邊同事抱怨的一句話就是:我靠!天啦擼!這個API好難用啊!!! 其實難用就是消費方對於提供方所提供資源(服務或能力)的最直觀的不滿用詞。這個時候,你

原创 【連載】關係型數據庫是如何工作的?(17) - 查詢管理器之優化示例

我們已經介紹了3種類型的join。現在我們需要連接5張表獲取一個人的完整信息,一個人信息包括: 多個移動電話 多個電子郵件 多個地址 多個銀行賬戶 那麼我們需要下面的查詢語句: SELECT * from PERSON, MOBILE

原创 【連載】關係型數據庫是如何工作的?(14) - 查詢管理器之Nested Join

現在我們獲取到了數據,讓我們來關聯它們吧。我會介紹3中常見你的關聯方式:歸併連接(Merge Join)、Hash連接(Hash Join)和嵌套循環連接(Nested Loop Join)。在這之前,我們需要介紹兩個新概念:內關係和外關

原创 【連載】關係型數據庫是如何工作的?(8) - 客戶端管理器

客戶端管理器就是處理和客戶端之間的通信細節。客戶端可能是Web服務器或者終端應用。客戶端管理器提供了不同的訪問數據庫方式,像衆所周知的API:JDBC、ODBC、OLE-DB…當然,也可以提供數據庫私有的訪問API。 當你連接數據庫的時

原创 【連載】關係型數據庫是如何工作的?(16) - 查詢管理器之Merge Join

歸併連接是唯一的生成排序結果的連接方式。其可以劃分爲兩步: 排序操作:對兩個輸入結果集按照連接字段排序; 歸併操作:歸併經過排序的結果集到一起。 排序 之前我們已經介紹過歸併排序,在這歸併排序是一個好的算法但不是最好的,如果內存足夠會

原创 【連載】關係型數據庫是如何工作的?(15) - 查詢管理器之Hash Join

Hash連接在很多情況下都比嵌套循環連接有低的成本。 其主要思路是: 1) 拿到內關係中的所有元素; 2) 利用一個Hash函數構建一個內存Hash表; 3) 從外關係中一個一個的取出元素; 4) 利用Hash函數計算每個元素的Has

原创 【連載】關係型數據庫是如何工作的?(20) - 查詢管理器之優化器

真正的優化器 上邊雖然說了那麼多,但是都偏於理論,因爲我是一個開發者不是一個研究員,所以我更喜歡說一些具體的例子。 讓我們來看看SQLite優化器具體是怎麼優化的。它非常簡單,因此它也採用了最簡單的優化方法:基於貪婪算法,並且應用一些額

原创 【連載】大話系統架構決策 - 伸縮性

前言 在單機應用時代,換句話說,如果你的應用就部署一個實例,並沒有伸縮性的概念。伸縮性是針對分佈式系統的場景下,在有意義。而且現在的大型分佈式系統,對於伸縮性是非常重視的,因爲現在的系統運維都希望機器或容器能夠動態擴容。比如,淘寶的雙11