聊一聊資料庫中的鎖
背景
資料庫中有一張叫後宮佳麗
的表,每天都有幾百萬新的小姐姐插到表中,光陰荏苒,夜以繼日,日久生情,時間長了,表中就有了幾十億的小姐姐
資料,看到幾十億的小姐姐,每到晚上,我可愁死了,這麼多小姐姐,我翻張牌呢?
辦法當然是精兵簡政,刪除那些age>18
的,給年輕的小姐姐們留位置...
於是我在資料庫中添加了一個定時執行的小程式,每到週日,就自動執行如下的指令碼
delete from `後宮佳麗` where age>18
一開始還自我感覺良好,後面我就發現不對了,每到週日,這個指令碼一執行就是一整天,執行的時間有點長是小事,重點是這大好週日,我再想讀這張表的資料,怎麼也讀不出來了,怎是一句空虛了得,我好難啊!
為什麼
編不下去了,真實背景是公司中遇到的一張有海量資料表,每次一旦執行歷史資料的清理,我們的程式就因為讀不到這張表的資料,瘋狂地報錯,後面一查瞭解到,原來是因為定時刪除的語句設計不合理,導致資料庫中資料由行鎖(Row lock
)升級為表鎖(Table lock
)了
相關推薦
聊一聊資料庫中的鎖
背景 資料庫中有一張叫後宮佳麗的表,每天都有幾百萬新的小姐姐插到表中,光陰荏苒,夜以繼日,日久生情,時間長了,表中就有了幾十億的小姐姐資料,看到幾十億的小姐姐,每到晚上,我可愁死了,這麼多小姐姐,我翻張牌呢? 辦法當然是精兵簡政,刪除那些age>18的,給年輕的小姐姐們留位置... 於是我在資料庫中添加
聊一聊分布式鎖的設計
src set 可用性 slave 共享資源 get 處理過程 res 指定 起因 前段時間,看到redis作者發布的一篇文章《Is Redlock safe?》,Redlock是redis作者基於redis設計的分布式鎖的算法。文章起因是有一位分布式的專家寫了一篇文章《H
聊一聊深度學習中常用的激勵函式
大家都知道,人腦的基本計算單元叫做神經元。現代生物學表明,人的神經系統中大概有860億神經元,而這數量巨大的神經元之間大約是通過1014−1015個突觸連線起來的。上面這一幅示意圖,粗略地描繪了一下人體神經元與我們簡化過後的數學模型。每個神經元都從樹突接受訊號,同時順著某個軸突傳遞
聊一聊嵌入式中常用的實時作業系統(RTOS)
嵌入式Linux系統 VS RTOS 一提到嵌入式的作業系統,自然繞不開嵌入式Linux作業系統。嵌入式linux 是將日益流行的Linux作業系統進行裁剪修改,使之能在嵌入式計算機系統上執行。它效能優異,軟體移植容易,程式碼開放,有許多應用軟體支援,應用產品開發週期短,新
聊一聊 Android 中巧妙的位操作
前言 我們之前,在計算機當中,它是以二進位制的形式來進行數的儲存和加減乘除的。 講解之前,我們先來了解一下基本的位操作 位操作 含義 具體含義 & 表示與
聊一聊分散式鎖的設計
起因 前段時間,看到redis作者釋出的一篇文章《Is Redlock safe?》,Redlock是redis作者基於redis設計的分散式鎖的演算法。文章起因是有一位分散式的專家寫了一篇文章《How to do distributed locking》,質疑Re
【番外篇】聊一聊深度學習中的資料增強與實現
深度學習的訓練往往需要海量的資料,而如今資料又是如此的寶貴(如醫學影象),因此如何利用有效的資料獲得更好的效果呢?資料增強(data augmentation)就是一種常用的方法。 工欲善其事必先利其器。 先來看下實現本文資料增強所需要的必要環境: python3.5
聊一聊 Python 2 中的編碼
在 Python 尤其是 Python2 中,編碼問題是困擾開發者尤其初學者的一大問題。什麼 Unicode/UTF-8/str ,又是 decode/encode 的,搞得人頭都大了。其實不然,這有點類似 Java 中 java.io 包一樣,看似龐大難懂,但是可以非常精細地
聊一聊資料倉庫中的元資料管理系統
原文地址 一、元資料的定義 按照傳統的定義,元資料(Metadata)是關於資料的資料。在資料倉庫系統中,元資料可以幫助資料倉庫管理員和資料倉庫的開發人員非常方便地找到他們所關心的資料;元資料是描述資料倉庫內資料的結構和建立方法的資料,可將其按用途的不同分為兩類:
聊一聊Java中double精度去哪了
前段時間, 因為要測試一個剛出爐的高頻策略, 放實盤去跑吧, 怕出岔, 所以寫了個簡單的回測系統, 跑一遍歷史資料. 其中有一部分是關於撮合系統, 簡陋了點, 還算能跑得起來, 幾個用例下來, 也沒什麼問題, 接著增加歷史資料量, 居然出現了負數, 簡直不可能發生的事情居然出現了, 雖然都是小金額的偏差,
Java併發與鎖設計實現詳述(6)- 聊一聊Unsafe
UnSafe這個類是什麼?我相信剛接觸Java的人或者沒有深入研究過Java的人應該都不會知道存在這個類。這個類是幹嘛的呢?在講併發的這個系列裡為什麼我要提它呢?答案很簡單,那就是這個類對於併發非常重要,當然它的重要性不僅體現在對併發的支援上。之所以這篇文章說到UnSafe,
聊一聊JQ中delegate事件委託的好處
下面舉個例子 我們希望通過點選使得點選的li標籤變紅 HTML <body style="height:2000px;"> <ul> <li>1111&
從nginx熱更新聊一聊Golang中的伺服器熱更新(上)
從nginx熱更新聊一聊Golang中的熱更新(上) 靜態語言在伺服器程式設計時都會遇到這樣的問題:如何保證已有的連線服務不中斷同時又升級版本? 最近花了點時間看了下nginx熱更新程式碼流程,想了下結合之前的經驗一併總結下熱更新 熱更新是什麼? 舉個例子,
聊一聊Java中的各種運算子
計算機之所以叫“計算機”,其最基本用途之一就是運算,對應剛剛接觸Java的小夥伴而言,熟悉並掌握Java中的各種運算子及其在表示式中的運算優先順序是十分必要的。 算術運算 算術運算主要用來處理數學中的加、減、乘、除四則運算。是最簡單、最常用的運算子。 1. 除與取模:資料做
借 redis cluster 叢集,聊一聊叢集中資料分佈演算法
Redis Cluster 叢集中涉及到了資料分佈問題,因為 redis cluster 是多 master 的結構,每個 master 都是可以提供儲存服務的,這就會涉及到資料分佈的問題,在新的 redis 版本中採用的是虛擬槽分割槽技術來解決資料分佈的問題,關於什麼是虛擬槽分割槽技術我們後面會詳細的介紹。
聊一聊 webpack 中的 preloading 和 Prefetching
聊一聊 webpack 中的 preloading 和 Prefetching 提到 Preloading 和 Prefetching 就不得不先說一下程式碼分割,通過下面的例子我們來說明為什麼需要程式碼分割? // index.js import _ from 'lodash'; // 假設大小為 1 MB
聊一聊 MySQL 中的事務及其實現原理
說到資料庫,那就一定會聊到事務,事務也是面試中常問的問題,我們先來一個面試場景: 面試官:"事務的四大特性是什麼?" 我:"ACID,即原子性(Atomicity)、隔離性(Isolation)、永續性(Durability)、一致性(Consistency)!" 面試官:"在 MySQL 資料庫的 Inno
簡單聊一聊JS中的迴圈引用及問題
本文主要從 JS 中為什麼會出現迴圈引用,垃圾回收策略中引用計數為什麼有很大的問題,以及迴圈引用時的物件在使用 JSON.stringify 時為什麼會報錯,怎樣解決這個問題簡單談談自己的一些理解。 1. 什麼是迴圈引用 當物件 1 中的某個屬性指向物件 2,物件 2 中的某個屬性指向物件 1 就會出現迴圈引
聊一聊 InnoDB 引擎中的索引型別
索引對資料庫有多重要,我想大家都已經知道了吧,關於索引可能大家會對它多少有一些誤解,首先索引是一種資料結構,並且索引不是越多越好。合理的索引可以提高儲存引擎對資料的查詢效率。 形象一點來說呢,索引跟書本的目錄一樣,能否快速的查詢到你需要的資訊,取決於你設計的目錄是否合理。 MySQL 資料庫有很多種索引,每種
聊一聊 InnoDB 引擎中的這些索引策略
在上一篇中,我們簡單的介紹了一下 InnoDB 引擎的索引型別,這一篇我們繼續學習 InnoDB 的索引,聊一聊索引策略,更好的利用好索引,提升資料庫的效能,主要聊一聊覆蓋索引、最左字首原則、索引下推。 覆蓋索引 覆蓋索引是指在普通索引樹中可以得到查詢的結果,不需要在回到主鍵索引樹中再次搜尋。 建立如下這張表