《數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計(jì)》章節(jié)總結(jié) 第七章 事務(wù)

數(shù)據(jù)庫(kù)作為一種特定的軟件有許多可能出錯(cuò)的情況:

  • 數(shù)據(jù)庫(kù)軟件和硬件隨時(shí)崩潰
  • 連接數(shù)據(jù)庫(kù)的客戶端隨時(shí)崩潰
  • 與數(shù)據(jù)庫(kù)的聯(lián)結(jié)隨時(shí)中斷
  • 多個(gè)客戶端同時(shí)寫入數(shù)據(jù)庫(kù)導(dǎo)致的數(shù)據(jù)覆蓋
  • 以及各類由于邊界引起的問題

為解決各種可能出錯(cuò)的狀況,事務(wù)應(yīng)運(yùn)而生,事務(wù)指將應(yīng)用程序的多個(gè)讀渡蜻、寫操作綁定在一起的邏輯單元壤短,整個(gè)事務(wù)要么全部成功,要么全部失敗锭沟。

事務(wù)不一定是必要的,也不一定需要功能完全的事務(wù)機(jī)制,事務(wù)的實(shí)現(xiàn)也有很大的代價(jià)辽剧。

深入理解事務(wù)

幾乎所有關(guān)系型數(shù)據(jù)庫(kù)和部分非關(guān)系型數(shù)據(jù)庫(kù)支持事務(wù),一方面事務(wù)對(duì)于金融等高價(jià)值數(shù)據(jù)非常有意義墓捻,另一方面事務(wù)會(huì)極大的影響系統(tǒng)的可用性和性能抖仅。

ACID的含義

ACID:原子性(Atomicity)、一致性(Consistency)砖第、隔離性(Isolation)撤卢、持久性(Durability)

不符合ACID的標(biāo)準(zhǔn)有時(shí)稱為BASE,即基本可用(Basically Available)梧兼、軟狀態(tài)(Soft State)放吩、最終一致性(Eventually Consistency)

原子性

原子性:事務(wù)中的執(zhí)行全部執(zhí)行或不執(zhí)行

ACID中的原子性是無關(guān)并發(fā)的,僅是針對(duì)數(shù)據(jù)庫(kù)羽杰、客戶端渡紫、連接崩潰的問題,原子性或許稱為可中止性更合適考赛。具有原子性的事務(wù)將在失敗時(shí)丟棄所有操作惕澎。

一致性

一致性:對(duì)數(shù)據(jù)的修改需要滿足一定的狀態(tài)約束,例如需保持轉(zhuǎn)賬前后總和相等

一致性的概念與原子性颜骤、隔離性和持久性有不同唧喉,一致性是應(yīng)用層的要求,而其他三者更多的是數(shù)據(jù)庫(kù)自身的屬性忍抽,ACID中加入一致性一部分原因是為了順口八孝。

隔離性

隔離性:并發(fā)執(zhí)行的多個(gè)事務(wù)應(yīng)當(dāng)相互隔離,不能互相交叉

經(jīng)典的數(shù)據(jù)庫(kù)教程將隔離定義為可串行化鸠项,但是實(shí)踐中干跛,可串行化會(huì)帶來極大的性能損失。

持久性

持久性:保證事務(wù)提交后祟绊,即便存在硬件或軟件故障楼入,事務(wù)所寫入的數(shù)據(jù)也不會(huì)消失

對(duì)于單數(shù)據(jù)庫(kù)系統(tǒng)哥捕,持久性意味著數(shù)據(jù)寫入磁盤,對(duì)于支持復(fù)制的數(shù)據(jù)庫(kù)浅辙,持久性代表著數(shù)據(jù)復(fù)制到其他節(jié)點(diǎn)扭弧。

單對(duì)象與多對(duì)象事務(wù)操作

對(duì)單個(gè)對(duì)象和對(duì)多個(gè)對(duì)象的寫入都會(huì)有事務(wù)的需求,都需要原子性和隔離性记舆。

單對(duì)象寫入

如果對(duì)于單個(gè)節(jié)點(diǎn)的存儲(chǔ)引擎進(jìn)行寫入鸽捻,原子性操作可以通過日志恢復(fù)、原子自增等操作泽腮,隔離性可以通過加鎖的方式實(shí)現(xiàn)御蒲。

多對(duì)象事務(wù)的必要性

如果存在對(duì)于多個(gè)分區(qū)的數(shù)據(jù)進(jìn)行修改,或者對(duì)多個(gè)表格進(jìn)行修改時(shí)诊赊,多對(duì)象事務(wù)也有其必要性厚满。

處理錯(cuò)誤與中止

事務(wù)的關(guān)鍵特性之一:如果事務(wù)的執(zhí)行發(fā)生意外,那么之后可以安全重試碧磅。

弱隔離級(jí)別

只有一個(gè)事務(wù)修改數(shù)據(jù)而另一個(gè)事務(wù)讀取這些數(shù)據(jù)碘箍,或者兩個(gè)事務(wù)修改相同的數(shù)據(jù)時(shí),才會(huì)存在并發(fā)問題鲸郊。而數(shù)據(jù)庫(kù)的隔離時(shí)假裝沒有發(fā)生并發(fā)丰榴,而可串行化意味著執(zhí)行結(jié)果和串行執(zhí)行一致。

但是可串行化對(duì)于性能的影響過大秆撮,因此常采用較弱的隔離四濒,即弱隔離級(jí)別。

讀-提交

讀-提交時(shí)最基本的隔離級(jí)別职辨,只保證不會(huì)出現(xiàn)以下兩種問題:

  • 臟寫:寫入尚未提交的數(shù)據(jù)
  • 臟讀:讀取尚未提交的數(shù)據(jù)

防止臟讀

臟讀指一個(gè)事務(wù)無法看到尚未提交的數(shù)據(jù)盗蟆,臟讀的存在可能導(dǎo)致以下問題:

  • 數(shù)據(jù)的部分更新:例如郵件列表更新,但郵件的計(jì)數(shù)器數(shù)值未更新
  • 讀取到過期數(shù)據(jù):寫入數(shù)據(jù)的事務(wù)回滾舒裤,導(dǎo)致讀取被修改數(shù)據(jù)的事務(wù)讀取到回滾之前的數(shù)據(jù)

防止臟寫

臟寫指一個(gè)事務(wù)修改了另一個(gè)事務(wù)修改但尚未提交的數(shù)據(jù)喳资,臟寫會(huì)導(dǎo)致不同事務(wù)的并發(fā)寫入混雜在一起

實(shí)現(xiàn)讀-提交

臟讀、臟寫的解決方式:

  • 臟讀:通程诠可通過數(shù)據(jù)版本機(jī)制解決
  • 臟寫:通彻嵌觯可通過行級(jí)鎖解決

快照級(jí)別隔離與可重復(fù)讀

不可重復(fù)讀(讀傾斜):事務(wù)兩次讀取相同的數(shù)據(jù)返回不同的結(jié)果

解決不可重復(fù)讀的最常見手段為快照級(jí)別隔離,每個(gè)事務(wù)都從數(shù)據(jù)庫(kù)的一致性快照中讀取

實(shí)現(xiàn)快照級(jí)別隔離

為解決不可重復(fù)讀台腥,數(shù)據(jù)庫(kù)采用了多版本并發(fā)控制機(jī)制(MVCC),該機(jī)制類似于為解決臟讀設(shè)計(jì)的數(shù)據(jù)版本機(jī)制绒北。在采用讀-提交版本級(jí)別黎侈,為每一個(gè)查詢創(chuàng)建一個(gè)快照,而采用可重復(fù)讀級(jí)別時(shí)闷游,僅在每個(gè)事務(wù)開始時(shí)創(chuàng)建一個(gè)快照峻汉,并在整個(gè)事務(wù)中至運(yùn)行該快照贴汪。

MVCC的基本原理:給每個(gè)事務(wù)在開始時(shí)分配一個(gè)自增的事務(wù)ID,當(dāng)進(jìn)行數(shù)據(jù)寫入時(shí)休吠,在行的created_by字段記錄事務(wù)的ID扳埂,在進(jìn)行數(shù)據(jù)刪除時(shí),在行的deleted_by字段記錄事務(wù)ID(墓碑的思想)瘤礁。

一致性快照的可見性規(guī)則

MVCC會(huì)為每個(gè)事務(wù)分配一個(gè)ID阳懂,還要確定事務(wù)ID的可見規(guī)則,在每個(gè)事務(wù)開始時(shí)柜思,都會(huì)獲得一個(gè)活動(dòng)的事務(wù)ID集合岩调,則可見性規(guī)則大體為:

  • 其他正在活動(dòng)的事務(wù)不可見
  • 已經(jīng)中止事務(wù)修改不可見
  • 較晚的事務(wù)的修改不可見

也就是滿足以下條件時(shí),某條數(shù)據(jù)才可見:

  • 事務(wù)開始之前已經(jīng)提交
  • 未被標(biāo)記為刪除赡盘,或者即便被標(biāo)記為刪除号枕,也是未提交事務(wù)標(biāo)記的

索引與快照級(jí)別隔離

如何令多版本數(shù)據(jù)庫(kù)支持索引,方法有兩種:

  • 索引直接指向數(shù)據(jù)的所有版本
  • 每個(gè)寫入事務(wù)(或一批事務(wù))都會(huì)創(chuàng)建一個(gè)新的B-tree root陨享,代表此時(shí)的一致性快照

可重復(fù)讀與命名混淆

現(xiàn)在不同的數(shù)據(jù)庫(kù)對(duì)于可重復(fù)讀的定義很混亂葱淳,對(duì)于能提供的保證也大相徑庭。

防止更新丟失

更新丟失:兩個(gè)事務(wù)都對(duì)于某個(gè)數(shù)據(jù)進(jìn)行讀-修改-寫回操作抛姑,但是后寫回的未能包括先寫回事務(wù)的值赞厕。

典型的更新丟失場(chǎng)景:

  • 兩個(gè)事務(wù)都執(zhí)行遞增計(jì)數(shù)器操作,或都執(zhí)行賬戶扣款
  • 兩個(gè)用戶同時(shí)修改某個(gè)文檔的不同部分

臟讀途戒、不可重復(fù)讀是兩個(gè)事務(wù)分別執(zhí)行讀坑傅、寫操作產(chǎn)生的,臟寫喷斋、更新丟失是兩個(gè)事務(wù)都執(zhí)行寫操作產(chǎn)生的唁毒。典型的解決更新丟失的方式包括原子寫操作和顯示加鎖。

原子寫操作

數(shù)據(jù)庫(kù)提供原子操作的支持星爪,通常采用對(duì)于對(duì)象加獨(dú)占鎖的方式實(shí)現(xiàn)浆西。

顯式加鎖

由應(yīng)用程序控制,對(duì)需要更新的對(duì)象加鎖顽腾,例如

SELECT *
FROM students
WHERE score < 60
FOR UPDATE;

其中FOR UPDATE用于顯式加鎖近零。

自動(dòng)檢測(cè)更新丟失

除此之外,數(shù)據(jù)庫(kù)可以令多個(gè)事務(wù)并發(fā)執(zhí)行抄肖,但是如果事務(wù)管理器檢測(cè)到了丟失風(fēng)險(xiǎn)則會(huì)中止事務(wù)久信。

原子比較和設(shè)置

數(shù)據(jù)庫(kù)提供原子性的“比較并設(shè)置”操作,在更新之前先比較現(xiàn)在數(shù)據(jù)是否和之前讀取時(shí)一致漓摩。

沖突解決與復(fù)制

對(duì)于多節(jié)點(diǎn)的數(shù)據(jù)庫(kù)裙士,情況更為復(fù)雜,多個(gè)節(jié)點(diǎn)上可能具有不同副本管毙,會(huì)導(dǎo)致并發(fā)的修改數(shù)據(jù)腿椎。

寫傾斜與幻讀

定義寫傾斜

寫傾斜:兩個(gè)事務(wù)基于同一種判斷對(duì)于不同數(shù)據(jù)進(jìn)行修改桌硫。

例如,醫(yī)院至少需要一個(gè)醫(yī)生值班啃炸,現(xiàn)在有兩個(gè)醫(yī)生值班并位于值班表上铆隘,兩個(gè)值班醫(yī)生都查詢總值班醫(yī)生數(shù),并發(fā)現(xiàn)大于1南用,則都將自己從值班表上刪除膀钠,最終導(dǎo)致表上沒有醫(yī)生了。

臟寫训枢、更新丟失是不同事務(wù)對(duì)同一對(duì)象更新導(dǎo)致的托修,寫傾斜是不同事務(wù)對(duì)不同對(duì)象更新導(dǎo)致的。

更多寫傾斜的例子

會(huì)議室預(yù)定系統(tǒng)恒界,多人游戲等

為何產(chǎn)生寫傾斜

通常寫傾斜滿足以下的模式:

  1. 首先查詢(SELECT)所有滿足條件的行
  2. 應(yīng)用程序基于以上結(jié)果進(jìn)行決策
  3. 執(zhí)行修改睦刃、插入、刪除(UPDATE十酣、INSERT涩拙、DELETE)

而第3步中的操作將影響第1步的查詢結(jié)果,也就是前提被改變了耸采。

可以認(rèn)為更新丟失兴泥、寫傾斜都是由于前提被改變導(dǎo)致的,只不過更新丟失改變的前提是單條數(shù)據(jù)虾宇,寫傾斜改變的前提是范圍查詢結(jié)果搓彻。

而寫傾斜現(xiàn)象中,一個(gè)事務(wù)的寫入影響了另一個(gè)事務(wù)范圍查詢的結(jié)果的現(xiàn)象嘱朽,稱為幻讀旭贬,寫傾斜可以理解為幻讀的延伸。

實(shí)體化沖突

以上問題的關(guān)鍵在于搪泳,無法對(duì)于某個(gè)查詢結(jié)果為空時(shí)進(jìn)行加鎖(在我本人理解中稀轨,也是無法為某個(gè)查詢結(jié)果為大于多少條加鎖)。

基于該思路岸军,可以將沖突實(shí)體化奋刽,例如對(duì)于會(huì)議室預(yù)訂系統(tǒng),不僅僅構(gòu)建一個(gè)預(yù)定記錄表(字段包括房間號(hào)艰赞、預(yù)定人佣谐、時(shí)間),還要構(gòu)建一個(gè)房間號(hào)與時(shí)段的組合表(字段為房間號(hào)方妖,時(shí)間)台谍,這樣在后續(xù)預(yù)定事務(wù)中,先對(duì)于后者中的單條數(shù)據(jù)加鎖,再修改預(yù)定記錄表趁蕊。實(shí)體化沖突將幻讀問題轉(zhuǎn)化為數(shù)據(jù)庫(kù)中具體行的沖突問題。

串行化

可串行化保證事務(wù)即便是并發(fā)執(zhí)行的仔役,最終結(jié)果也和每次運(yùn)行一個(gè)事務(wù)即串行執(zhí)行一致掷伙,但可串行化仍然沒有被廣泛使用,目前可串行化主要依賴于三種技術(shù)之一:

  • 嚴(yán)格按照串行順序執(zhí)行(實(shí)際的串行執(zhí)行)
  • 兩階段鎖定
  • 樂觀并發(fā)控制技術(shù)

實(shí)行串行執(zhí)行

真的串行執(zhí)行各個(gè)事務(wù)又兵,但是這個(gè)方法是2007年之后數(shù)據(jù)庫(kù)設(shè)計(jì)人員才完全確定可以實(shí)現(xiàn)的任柜,這是兩方面的進(jìn)展推動(dòng)了實(shí)際串行執(zhí)行的發(fā)展:

  • 內(nèi)存I/O非常迅速,且內(nèi)存隨著成本降低迅速增大
  • 數(shù)據(jù)庫(kù)開發(fā)人員意識(shí)到OLTP業(yè)務(wù)執(zhí)行通常非撑娉快

為了能夠優(yōu)化實(shí)際串行執(zhí)行宙地,事務(wù)也需要進(jìn)行一些調(diào)整,例如將事務(wù)封裝為存儲(chǔ)過程逆皮。

采用存儲(chǔ)過程封裝事務(wù)

最初宅粥,事務(wù)需要等待人類做出的決定,后來电谣,待人類決定完由客戶端程序與數(shù)據(jù)庫(kù)通信秽梅,但是仍然需要等待網(wǎng)絡(luò)的延遲。出于減少人類決定延遲以及通信延遲的需要剿牺,將整個(gè)事務(wù)過程打包為存儲(chǔ)過程企垦。

存儲(chǔ)過程的優(yōu)缺點(diǎn)

存儲(chǔ)過程在兼容性、設(shè)計(jì)難度晒来、管理難度上存在一定的缺陷钞诡,但是也使得內(nèi)存式數(shù)據(jù)庫(kù)存儲(chǔ)在單線程上執(zhí)行所有事務(wù)變得可行。

分區(qū)

如果數(shù)據(jù)分散到多個(gè)區(qū)間湃崩,如果也需要可串行化則應(yīng)當(dāng)特殊處理荧降。最好的方式是令每個(gè)事務(wù)只需要在一個(gè)分區(qū)執(zhí)行事務(wù),但是這個(gè)條件對(duì)于鍵/值型數(shù)據(jù)庫(kù)較容易實(shí)現(xiàn)竹习,對(duì)于帶有二級(jí)索引的數(shù)據(jù)則較為麻煩誊抛。

串行執(zhí)行小結(jié)

可串行化能夠采用實(shí)際串行化隔離的條件如下:

  • 事務(wù)必須簡(jiǎn)短高效
  • 數(shù)據(jù)集完全可加載到磁盤
  • 寫入吞吐量足夠低,否則就需要分區(qū)
  • 跨分區(qū)事務(wù)應(yīng)當(dāng)占比較小

兩階段加鎖

思想為多個(gè)事務(wù)可以同時(shí)讀取同一對(duì)象整陌,但是如果希望修改拗窃,則必須加鎖獨(dú)占。

實(shí)現(xiàn)兩階段加鎖

在讀取對(duì)象時(shí)加共享鎖泌辫,在修改數(shù)據(jù)前加排他鎖随夸,事務(wù)持有鎖直到事務(wù)結(jié)束。由于采用了較多的鎖震放,易于產(chǎn)生死鎖現(xiàn)象宾毒。

兩階段加鎖的性能

兩階段加鎖相比于弱隔離級(jí)別,性能下降很大殿遂,一部分因?yàn)殒i獲取和釋放的開銷诈铛,更重要的是嚴(yán)重影響了并發(fā)性乙各。

謂詞鎖

為了解決幻讀和寫傾斜,可以采用謂詞鎖幢竹,謂詞鎖不屬于特定的對(duì)象耳峦,而是屬于滿足某個(gè)查詢條件的所有對(duì)象。謂詞鎖作用于查詢條件而非數(shù)據(jù)焕毫。

謂詞鎖性能不好蹲坷。

索引區(qū)間鎖

為了解決幻讀和寫傾斜,大部分2PL的數(shù)據(jù)庫(kù)實(shí)際采用的是索引區(qū)間鎖邑飒,在查詢條件的某個(gè)具有索引的列上加鎖循签,并且擴(kuò)大加鎖的范圍,如果沒有合適的索引加區(qū)間鎖疙咸,可以回退到對(duì)于整個(gè)表加鎖县匠。區(qū)間鎖的思想在于擴(kuò)大謂詞鎖的加鎖范圍一定能保證達(dá)到謂詞鎖的效果。

可串行化的快照隔離

沒仔細(xì)看罕扎,不太懂聚唐。

悲觀與樂觀的并發(fā)控制

基于過期的條件做決定

檢測(cè)是否讀取了過期的MVCC對(duì)象

檢測(cè)寫是否影響了之前的讀

可串行化快照隔離的性能

小結(jié)

本章討論遵循以下邏輯進(jìn)行:

  • 事務(wù)
  • 事務(wù)的特性
    • 原子性
    • 隔離性
    • 持久性
  • 隔離級(jí)別及其解決的并發(fā)問題
    • 讀提交
      • 臟讀
      • 臟寫
    • 可重復(fù)讀
      • 不可重復(fù)讀(讀傾斜)
      • 更新丟失
    • 可串行化
      • 幻讀
      • 寫傾斜

本人理解:

ACID中,AID是基本的特性腔召,C更多是應(yīng)用層的要求杆查,與數(shù)據(jù)庫(kù)關(guān)系相對(duì)偏小。

三種隔離級(jí)別分別解決了兩個(gè)并發(fā)問題臀蛛,其中一個(gè)讀問題亲桦,一個(gè)寫問題。

臟讀和不可重復(fù)讀兩種并發(fā)問題很像浊仆,實(shí)際都是由于讀取未提交的寫入導(dǎo)致的客峭,因此可以利用MVCC和一致性視圖解決。
更新丟失和寫傾斜具有共同的特征抡柿,都是先讀取然后基于讀取結(jié)果進(jìn)行修改導(dǎo)致的并發(fā)問題舔琅,只不過更新丟失總讀取的結(jié)果是單條數(shù)據(jù)的結(jié)果,而寫傾斜是范圍查詢的結(jié)果洲劣,因此解決手段有不同备蚓,更新丟失適合采用原子操作、顯式加鎖解決囱稽,而寫傾斜需要區(qū)間鎖郊尝。

幻讀與寫傾斜關(guān)系很強(qiáng),幻讀實(shí)際上可以理解為兩次范圍查詢的結(jié)果不一致战惊,而寫傾斜則為數(shù)據(jù)修改違反了第一次范圍查詢的結(jié)果流昏。

臟寫則為最為naive的并發(fā)問題,在修改數(shù)據(jù)時(shí)加鎖即可避免,幾乎所有數(shù)據(jù)引擎都能夠解決臟寫况凉。

常用的解決并發(fā)問題的手段:MVCC谚鄙,顯式加鎖(2PL、共享鎖刁绒、排他鎖襟锐、區(qū)間鎖)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膛锭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚊荣,老刑警劉巖初狰,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異互例,居然都是意外死亡奢入,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門媳叨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腥光,“玉大人,你說我怎么就攤上這事糊秆∥涓#” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵痘番,是天一觀的道長(zhǎng)捉片。 經(jīng)常有香客問我,道長(zhǎng)汞舱,這世上最難降的妖魔是什么伍纫? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮昂芜,結(jié)果婚禮上莹规,老公的妹妹穿的比我還像新娘。我一直安慰自己泌神,他們只是感情好良漱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腻扇,像睡著了一般债热。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幼苛,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天窒篱,我揣著相機(jī)與錄音,去河邊找鬼。 笑死墙杯,一個(gè)胖子當(dāng)著我的面吹牛配并,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播高镐,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溉旋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了嫉髓?” 一聲冷哼從身側(cè)響起观腊,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎算行,沒想到半個(gè)月后梧油,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡州邢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年儡陨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片量淌。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骗村,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呀枢,到底是詐尸還是另有隱情胚股,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布硫狞,位于F島的核電站信轿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏残吩。R本人自食惡果不足惜财忽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泣侮。 院中可真熱鬧即彪,春花似錦、人聲如沸活尊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛹锰。三九已至深胳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铜犬,已是汗流浹背舞终。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工轻庆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敛劝。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓余爆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親夸盟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛾方,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容