原创 Spring 事務介紹

一、簡介 接着上篇 數據庫事務簡介,來聊聊 Spring 事務。 Spring 本身並不實現事務,Spring 事務的本質還是底層數據庫對事務的支持,沒有數據庫事務的支持,Spring 事務就不會生效。 Spring 事務提供了一套抽象的事

原创 數據庫事務簡介.

一、事務分類 事務是訪問並更新數據庫中各種數據項的一個程序執行單元,事務會把數據庫從一種一致狀態轉換爲另一種一致狀態,這就是事務的目的,也是事務模型區別與文件系統的重要特性之一。 InnoDB 存儲引擎中的事務(READ REPEATABL

原创 《MySQL技術內幕:InnoDB存儲引擎》讀書筆記.

一、MySQL 體系架構和存儲引擎 1、MySQL 被設計成一個單進程多線程架構的數據庫,MySQL 數據庫實例在系統上的表現就是一個進程。 2、MySQL 的體系架構,需要特別注意的是,存儲引擎是基於表的,而不是數據庫。 3、InnoD

原创 分佈式 ID 生成算法 — SnowFlake

一、概述 分佈式 ID 生成算法的有很多種,Twitter 的 SnowFlake 就是其中經典的一種。 SnowFlake 算法生成 ID 的結果是一個 64bit 大小的整數,它的結構如下圖: 1 位,不用。二進制中最高位爲 1 的

原创 InnoDB 存儲引擎中的鎖.

一、鎖的類型 InnoDB 存儲引擎 lock 的對象是事務,用來鎖定的是數據庫中的對象,如表、頁、行,並且一般 lock 的對象僅在事務 commit 或 rollback 後進行釋放(不同事務隔離級別釋放的時間可能不同)。 InnoDB

原创 2020 — 危難與機遇

一、前言 2020 年呀,不平凡的一年,百年難遇的疫情讓很多事情偏離了它該有的軌跡。 2020 年呀,也是我正式畢業三年半了,也該認真做下總結,重新出發了。 二、危難與機遇 福之禍所伏,禍之福所依。 2020年3月,隨着疫情爆發,我的創業故

原创 MySQL的多版本併發控制(MVCC).

一、快照讀與當前讀 快照讀(SnapShot Read) 是一種一致性不加鎖的讀,是 InnoDB 併發如此之高的核心原因之一。 在 READ COMMITTED 事務隔離級別下,一致性不加鎖的讀是指,總是讀取被鎖定行的最新一份快照數據,

原创 套接字 socket 和 tcp 連接過程

一、socket 和 fd(file descriptor)是什麼? Unix/Linux 基本哲學之一就是"一切皆文件",即一切都可以用 "open -> read/write -> close" 來操作,socket 也可以理解成是一種

原创 Elasticsearch 學習二(請求流程).

一、寫入數據 1、ES 的任意節點都可以作爲協調(Coordinating)節點接受請求(包括新建、索引或者刪除請求),每個節點都知道集羣中任一文檔位置; 2、協調節點會通過 routing 字段計算出一個主分片(primary shar

原创 網絡 IO 模型簡單介紹

一、同步阻塞 IO(BIO) 當用戶線程調用了 read 系統調用,內核(kernel)就開始了 IO 的第一個階段:準備數據。很多時候,數據在一開始還沒有到達(比如,還沒有收到一個完整的Socket數據包),這個時候 kernel 就要

原创 JVM系列十六(三色標記法與讀寫屏障).

1. 垃圾回收的簡單回顧 關於垃圾回收算法,基本就是那麼幾種:標記-清除、標記-複製、標記-整理。在此基礎上可以增加分代(新生代/老年代),每代採取不同的回收算法,以提高整體的分配和回收效率。 無論使用哪種算法,標記總是必要的一步。這是理算

原创 SQL 中 left join 的底層原理

01. 前言 寫過或者學過 SQL 的人應該都知道 left join,知道 left join 的實現的效果,就是保留左表的全部信息,然後把右表往左表上拼接,如果拼不上就是 null。除了 left join 以外,還有 inner jo

原创 TkMybatis 是什麼?

一、TkMybatis Tkmybatis 是基於 Mybatis 框架開發的一個工具,通過調用它提供的方法實現對單表的數據操作,不需要寫任何 sql 語句,這極大地提高了項目開發效率。 二、怎麼用? 1. 引用 在 pom.xml 中引入

原创 Kafka 會不會丟消息?

一、認識 Kafka Kafka 是分佈式發佈-訂閱消息系統。它最初由 LinkedIn 公司開發,之後成爲 Apache 項目的一部分。 Kafka 是一個分佈式的,可劃分的,冗餘備份的持久性的日誌服務。它主要用於處理活躍的流式數據。

原创 [轉]淺談高性能數據庫集羣 — 讀寫分離

一、讀寫分離概述 基本架構圖: 二、適用場景 讀寫分離不是銀彈,並不是一有性能問題就上讀寫分離,而是應該先優化,例如優化慢查詢,調整不合理的業務邏輯,引入緩存查詢等只有確定系統沒有優化空間後才考慮讀寫分離集羣。 三、引入的系統複雜度問