ClickHouse - 01

1、ClickHouse與其特性


在大數(shù)據(jù)處理場景中袒餐,流處理和批處理使用到的技術大致如下:

大數(shù)據(jù)處理場景流程.png

批處理會將源業(yè)務系統(tǒng)中的數(shù)據(jù)通過數(shù)據(jù)抽取工具(例如 Sqoop)將數(shù)據(jù)抽取到 HDFS 中楣富,這個過程可以使用 MapReduce绸罗、Spark愉老、Flink 技術對數(shù)據(jù)進行 ETL 清洗處理嚷节,也可以直接將數(shù)據(jù)抽取到 Hive 數(shù)倉中硬萍,一般可以將結構化的數(shù)據(jù)直接抽取到 Hive 數(shù)據(jù)倉庫中扩所,然后使用 HiveSQL 或者 SparkSQL 進行業(yè)務指標分析,如果涉及到的分析業(yè)務非常復雜朴乖,可以使用 Hive 的自定義函數(shù)或者 Spark碌奉、Flink 進行復雜分析,這就是我們通常說的數(shù)據(jù)指標分析寒砖。分析之后的結果可以保存到 Hive赐劣、HBase、MySQL哩都、Redis等魁兼,供后續(xù)查詢使用。一般在數(shù)倉構建中漠嵌,如果指標存入Hive中咐汞,我們可以使用 Sqoop 工具將結果導入到關系型數(shù)據(jù)庫中供后續(xù)查詢。HBase 中更擅長存儲原子性非聚合查詢數(shù)據(jù)儒鹿,如果有大量結果數(shù)據(jù)后期不需要聚合查詢化撕,也可以通過業(yè)務分析處理考慮存入 HBase 中。對于一些查詢需求結果反饋非吃佳祝快的場景可以考慮將結果存入 Redis 中植阴。

對于大多數(shù)企業(yè)構建數(shù)倉之后,會將結果存入到 Hive 中的 DM 層中圾浅。DM 層數(shù)據(jù)存入的是與業(yè)務強相關的報表數(shù)據(jù)掠手,DM 層數(shù)據(jù)是由數(shù)倉中 DWS 層主題寬表聚合統(tǒng)計得到,這種報表層設計適合查詢固定的場景狸捕。對于一些查詢需求多變場景喷鸽,我們也可以使用 Impala 來直接將主題寬表數(shù)據(jù)基于內存進行交互式查詢,對 Web 或者數(shù)據(jù)分析做到交互式返回結果灸拍,使用 Impala 對內存開銷非常大做祝。還有另外一種方式是使用 Kylin 進行預計算砾省,將結果提前計算好存入 Hbase 中,以供后續(xù)交互式查詢結果混槐,Kylin 是使用空間換取時間的一種方式纯蛾,預先將各種維度組合對應的度量計算出來存入 HBase,用戶寫 SQL 交互式查詢的是 HBase 中預計算好的結果數(shù)據(jù)纵隔。最后將數(shù)據(jù)分析結果可以直接對 Web 以接口服務提供使用或者公司內部使用可視化工具展示使用翻诉。

以上無論批處理過程還是流處理過程,使用到的技術幾乎離不開 Hadoop 生態(tài)圈捌刮。

ClickHouse

ClickHouse 是一個開源的碰煌,用于聯(lián)機分析(OLAP)的列式數(shù)據(jù)庫管理系統(tǒng)(DBMS-database manager system),它是面向列的绅作,并允許使用 SQL 查詢芦圾,實時生成分析報告。ClickHouse 最初是一款名為 Yandex Metrica 的產(chǎn)品俄认,主要用于 WEB 流量分析个少。ClickHouse 的全稱是 Click Stream,Data WareHouse眯杏,簡稱 ClickHouse夜焦。

ClickHouse 不是一個單一的數(shù)據(jù)庫,它允許在運行時創(chuàng)建表和數(shù)據(jù)庫岂贩,加載數(shù)據(jù)和運行查詢茫经,而無需重新配置和重新啟動服務器。ClickHouse 同時支持列式存儲和數(shù)據(jù)壓縮萎津,這是對于一款高性能數(shù)據(jù)庫來說是必不可少的特性卸伞。一個非常流行的觀點認為,如果你想讓查詢變得更快锉屈,最簡單且有效的方法是減少數(shù)據(jù)掃描范圍和數(shù)據(jù)傳輸時的大小荤傲,而列式存儲和數(shù)據(jù)壓縮就可以幫助我們實現(xiàn)上述兩點,列式存儲和數(shù)據(jù)壓縮通常是伴生的颈渊,因為一般來說列式存儲是數(shù)據(jù)壓縮的前提遂黍。

OLAP場景的特征

  • 絕大多數(shù)是讀請求。

  • 數(shù)據(jù)以相當大的批次(> 1000行)更新儡炼,而不是單行更新妓湘,或者根本沒有更新查蓉。

  • 已添加到數(shù)據(jù)庫的數(shù)據(jù)不能修改乌询。

  • 對于讀取,從數(shù)據(jù)庫中提取相當多的行豌研,但只提取列的一小部分妹田。

  • 寬表唬党,即每個表包含著大量的列。

  • 查詢相對較少鬼佣,通常每臺服務器每秒查詢數(shù)百次或更少驶拱。

  • 對于簡單查詢,允許延遲大約50毫秒晶衷。

  • 列中的數(shù)據(jù)相對較欣陡佟:數(shù)字和短字符串,例如晌纫,每個URL 60個字節(jié)税迷。

  • 處理單個查詢時需要高吞吐量,每臺服務器每秒可達數(shù)十億行锹漱。

  • 事務不是必須的箭养。

  • 對數(shù)據(jù)一致性要求低。有副本情況下哥牍,寫入一個即可毕泌,后臺自動同步。

  • 每個查詢有一個大表嗅辣。除了他以外撼泛,其他的都很小。

  • 查詢結果明顯小于源數(shù)據(jù)澡谭。數(shù)據(jù)經(jīng)過過濾或聚合坎弯,因此結果適合于單個服務器的RAM中。

通過以上 OLAP 場景分析特點很容易可以看出译暂,OLAP 場景與其他通常業(yè)務場景(例如 OLTP 或 K/V)有很大的不同抠忘,因此想要使用 OLTP 或 Key-Value 數(shù)據(jù)庫去高效的處理分析查詢場景,并不是非常完美的適用方案外永。例如崎脉,使用 OLAP 數(shù)據(jù)庫去處理分析請求通常要優(yōu)于使用 MongoDB 或 Redis 去處理分析請求。

1.1伯顶、完備的DBMS功能


ClickHouse 是一個數(shù)據(jù)庫管理系統(tǒng)囚灼,而不僅是一個數(shù)據(jù)庫,作為數(shù)據(jù)庫管理系統(tǒng)具備完備的管理功能:

  • DDL(Data Definition Language - 數(shù)據(jù)定義語言):可以動態(tài)地創(chuàng)建祭衩、修改或刪除數(shù)據(jù)庫灶体、表和視圖,而無須重啟服務掐暮。
  • DML(Data Manipulation Language):可以動態(tài)查詢蝎抽、插入、修改或刪除數(shù)據(jù)路克。
  • 分布式管理:提供集群模式樟结,能夠自動管理多個數(shù)據(jù)庫節(jié)點养交。
  • 權限控制:可以按照用戶粒度設置數(shù)據(jù)庫或者表的操作權限,保障數(shù)據(jù)的安全性瓢宦。
  • 數(shù)據(jù)備份與恢復:提供了數(shù)據(jù)備份導出與導入恢復機制碎连,滿足生產(chǎn)環(huán)境的要求。

1.2驮履、列式存儲


目前大數(shù)據(jù)存儲有兩種方案可以選擇圃阳,行式存儲(Row-Based)和列式存儲(Column-Based)位岔。

列式存儲.png
  • 行式存儲在數(shù)據(jù)寫入和修改上具有優(yōu)勢趴泌。行存儲的寫入是一次完成的狮惜,如果這種寫入建立在操作系統(tǒng)的文件系統(tǒng)上,可以保證寫入過程的成功或者失敗摘悴,可以保證數(shù)據(jù)的完整性峭梳。列式存儲需要把一行記錄拆分成單列保存,寫入次數(shù)明顯比行存儲多(因為磁頭調度次數(shù)多蹂喻,而磁頭調度是需要時間的葱椭,一般在1ms~10ms),再加上磁頭需要在盤片上移動和定位花費的時間口四,實際消耗更大孵运。數(shù)據(jù)修改實際上也是一次寫入過程,不同的是蔓彩,數(shù)據(jù)修改是對磁盤上的記錄做刪除標記治笨。行存儲是在指定位置寫入一次,列存儲是將磁盤定位到多個列上分別寫入赤嚼,這個過程仍是行存儲的列數(shù)倍旷赖。所以,行式存儲在數(shù)據(jù)寫入和修改上具有很大優(yōu)勢更卒。
  • 列式存儲在數(shù)據(jù)讀取和解析等孵、分析數(shù)據(jù)上具有優(yōu)勢。數(shù)據(jù)讀取時蹂空,行存儲通常將一行數(shù)據(jù)完全讀出俯萌,如果只需要其中幾列數(shù)據(jù)的情況,就會存在冗余列上枕,出于縮短處理時間的考量咐熙,消除冗余列的過程通常是在內存中進行的。列存儲每次讀取的數(shù)據(jù)是集合的一段或者全部辨萍,不存在冗余性問題棋恼。列式存儲中的每一列數(shù)據(jù)類型是相同的,不存在二義性問題,例如蘸泻,某列類型為整型琉苇,那么它的數(shù)據(jù)集合一定是整型數(shù)據(jù)嘲玫,這種情況使數(shù)據(jù)解析變得十分容易悦施。相比之下,行存儲則要復雜得多去团,因為在一行記錄中保存了多種類型的數(shù)據(jù)抡诞,數(shù)據(jù)解析需要在多種數(shù)據(jù)類型之間頻繁轉換,這個操作很消耗CPU土陪,增加了解析的時間昼汗。所以,列式存儲在數(shù)據(jù)讀取和解析數(shù)據(jù)做數(shù)據(jù)分析上更具優(yōu)勢鬼雀。

綜上所述顷窒,行存儲的寫入是一次性完成,消耗的時間比列存儲少源哩,并且能夠保證數(shù)據(jù)的完整性鞋吉,缺點是數(shù)據(jù)讀取過程中會產(chǎn)生冗余數(shù)據(jù),如果只有少量數(shù)據(jù)励烦,此影響可以忽略谓着,數(shù)量大可能會影響到數(shù)據(jù)的處理效率。列存儲在寫入效率坛掠、保證數(shù)據(jù)完整性上都不如行存儲赊锚,它的優(yōu)勢是在讀取過程,不會產(chǎn)生冗余數(shù)據(jù)屉栓,這對數(shù)據(jù)完整性要求不高的大數(shù)據(jù)處理領域比較重要舷蒲。一般來說,一個 OLAP 類型的查詢可能需要訪問幾百萬或者幾十億行的數(shù)據(jù)友多,但是 OLAP 分析時只是獲取少數(shù)的列阿纤,對于這種場景列式數(shù)據(jù)庫只需要讀取對應的列即可,行式數(shù)據(jù)庫需要讀取所有的數(shù)據(jù)列夷陋,因此這種場景更適合列式數(shù)據(jù)庫欠拾,可以大大提高 OLAP 數(shù)據(jù)分析的效率。ClickHouse 就是一款使用列式存儲的數(shù)據(jù)庫骗绕,數(shù)據(jù)按列進行組織藐窄,屬于同一列的數(shù)據(jù)會被保存在一起,列與列之間也會由不同的文件分別保存酬土,在對 OLAP 場景分析時荆忍,效率很高。

1.3、數(shù)據(jù)壓縮


為了使數(shù)據(jù)在傳輸上更小刹枉,處理起來更快叽唱,可以對數(shù)據(jù)進行壓縮,ClickHouse 默認使用 LZ4 算法壓縮微宝,數(shù)據(jù)總體壓縮比可達 8:1棺亭。

ClickHouse 采用列式存儲,列式存儲相對于行式存儲另一個優(yōu)勢就是對數(shù)據(jù)壓縮的友好性蟋软。例如:有兩個字符串 "'ABCDE"镶摘,"BCD",現(xiàn)在對它們進行壓縮:

  • 壓縮前:ABCDE_BCD
  • 壓縮后:ABCDE_(5,3)

通過以上案例可以看到岳守,壓縮的本質是按照一定步長對數(shù)據(jù)進行匹配掃描凄敢,當發(fā)現(xiàn)重復部分的時候就進行編碼轉換。例如:(5,3) 代表從下劃線往前數(shù)5個字節(jié)湿痢,會匹配上3個字節(jié)長度的重復項涝缝,即 "BCD"。當然譬重,真實的壓縮算法比以上舉例更復雜拒逮,但壓縮的本質就是如此,數(shù)據(jù)中重復性項越多害幅,則壓縮率越高消恍,壓縮率越高,則數(shù)據(jù)體量越小以现,而數(shù)據(jù)體量越小狠怨,則數(shù)據(jù)在網(wǎng)絡中的傳輸越快,對網(wǎng)絡帶寬和磁盤IO的壓力也就越小邑遏。

列式存儲中同一個列的數(shù)據(jù)由于它們擁有相同的數(shù)據(jù)類型和現(xiàn)實語義佣赖,可能具備重復項的可能性更高,更利于數(shù)據(jù)的壓縮记盒。所以 ClickHouse 在數(shù)據(jù)壓縮上比例很大憎蛤。

1.4、向量化執(zhí)行引擎


向量化執(zhí)行引擎.png

在計算機系統(tǒng)的體系結構中纪吮,存儲系統(tǒng)是一種層次結構俩檬,典型服務器計算機的存儲層次結構如上圖,上圖表述了 CPU碾盟、CPU 三級緩存棚辽、內存、磁盤數(shù)據(jù)容量與數(shù)據(jù)讀取速度對比冰肴,我們可以看出存儲媒介距離 CPU 越近屈藐,則訪問數(shù)據(jù)的速度越快榔组。

從內存讀取數(shù)據(jù)速度比磁盤讀取數(shù)據(jù)速度要快1000倍,從 CPU 緩存中讀取數(shù)據(jù)的速度比從內存中讀取數(shù)據(jù)的速度最快要快 100 倍联逻,從 CPU 寄存器中讀取數(shù)據(jù)的速度為300ps(1納秒 = 1000皮秒)搓扯,比 CPU 緩存要快3倍還多。從寄存器中訪問數(shù)據(jù)的速度包归,是從內存訪問數(shù)據(jù)速度的300倍锨推,是從磁盤中訪問數(shù)據(jù)速度的30萬倍。

如果能從 CPU 寄存器中訪問數(shù)據(jù)對程序的性能提升意義非凡箫踩,向量化執(zhí)行就是在寄存器層面操作數(shù)據(jù)爱态,為上層應用程序的性能帶來了指數(shù)級的提升谭贪。

向量化執(zhí)行境钟,可以簡單地看作一項消除程序中循環(huán)的優(yōu)化。

為了實現(xiàn)向量化執(zhí)行俭识,需要利用 CPU 的 SIMD(Single Instruction Multiple Data) 指令慨削,即用單條指令操作多條數(shù)據(jù)。現(xiàn)代計算機系統(tǒng)概念中套媚,它是通過數(shù)據(jù)并行以提高性能的一種實現(xiàn)方式缚态,其他的還有指令級并行和線程級并行,它的原理是在 CPU 寄存器層面實現(xiàn)數(shù)據(jù)的并行操作堤瘤。

ClickHouse 列式存儲除了降低 IO 和存儲的壓力之外玫芦,還為向量化執(zhí)行做好了鋪墊,除了讀取磁盤速度快之外本辐,ClickHouse 還利用 SSE4.2 指令集實現(xiàn)向量化執(zhí)行桥帆,為處理數(shù)據(jù)提升很大效率。

1.5慎皱、關系模型與標準SQL查詢


相比 HBase 和 Redis 這類 NoSQL 數(shù)據(jù)庫老虫,ClickHouse 使用關系模型描述數(shù)據(jù)并提供了傳統(tǒng)數(shù)據(jù)庫的概念(數(shù)據(jù)庫、表茫多、視圖和函數(shù)等)祈匙。ClickHouse 完全使用 SQL 作為查詢語言(支持 GROUP BY、ORDER BY天揖、JOIN夺欲、IN 等大部分標準 SQL),ClickHouse 提供了標準協(xié)議的 SQL 查詢接口今膊,可以與第三方分析可視化系統(tǒng)無縫集成對接些阅。在 SQL 解析方面,ClickHouse 是大小寫敏感万细,SELECT aSELECT A 所代表的語義不同扑眉。

1.6纸泄、多樣化的表引擎


與 MySQL 類似,ClickHouse 也將存儲部分進行了抽象腰素,把存儲引擎作為一層獨立的接口聘裁。ClickHouse 擁有各種表引擎,每種表引擎決定不同的數(shù)據(jù)存儲方式弓千。其中每一種表引擎都有著各自的特點衡便,用戶可以根據(jù)實際業(yè)務場景的要求,選擇合適的表引擎使用洋访。將表引擎獨立設計的好處是通過特定的表引擎支撐特定的場景镣陕,十分靈活,對于簡單的場景姻政,可直接使用簡單的引擎降低成本呆抑,而復雜的場景也有合適的選擇。

1.7汁展、多線程與分布式


多線程與分布式.png

向量化執(zhí)行是通過數(shù)據(jù)級并行的方式提升了性能鹊碍,多線程處理是通過線程級并行的方式實現(xiàn)了性能的提升。相比基于底層硬件實現(xiàn)的向量化執(zhí)行 SIMD食绿,線程級并行通常由更高層次的軟件層面控制侈咕,目前市面上的服務器都支持多核心多線程處理能力。由于 SIMD 不適合用于帶有較多分支判斷的場景器紧,ClickHouse 也大量使用了多線程技術以實現(xiàn)提速耀销,以此和向量化執(zhí)行形成互補。ClickHouse 在數(shù)據(jù)存取方面铲汪,既支持分區(qū)(縱向擴展熊尉,利用多線程原理),也支持分片(橫向擴展桥状,利用分布式原理)帽揪,可以說是將多線程和分布式的技術應用到了極致。

1.8辅斟、多主架構


HDFS转晰、Spark、HBase 和 ElasticSearch 這類分布式系統(tǒng)士飒,都采用了 Master-Slave 主從架構查邢,由一個管控節(jié)點作為 Leader 統(tǒng)籌全局。而 ClickHouse 則采用 Multi-Master多主架構酵幕,集群中的每個節(jié)點角色對等扰藕,客戶端訪問任意一個節(jié)點都能得到相同的效果。這種多主的架構有許多優(yōu)勢芳撒,例如對等的角色使系統(tǒng)架構變得更加簡單邓深,不用再區(qū)分主控節(jié)點未桥、數(shù)據(jù)節(jié)點和計算節(jié)點,集群中的所有節(jié)點功能相同芥备。所以它天然規(guī)避了單點故障的問題冬耿,非常適合用于多數(shù)據(jù)中心、異地多活的場景萌壳。

1.9亦镶、交互式查詢


Hive、SparkSQL袱瓮、HBase 等都支持海量數(shù)據(jù)的查詢場景缤骨,都擁有分布式架構,都支持列存尺借、數(shù)據(jù)分片绊起、計算下推等特性。ClickHouse 在設計上吸取了以上技術的優(yōu)勢褐望,例如:Hive勒庄、SparkSQL 無法保證 90% 以上的查詢在秒級內響應串前,在大數(shù)據(jù)量復雜查詢下需要至少分鐘級的響應時間瘫里,而 HBase 可以對海量數(shù)據(jù)做到交互式查詢,由于不支持標準 SQL 在對數(shù)據(jù)做 OLAP 聚合分析時顯得捉襟見肘荡碾。ClickHouse 吸取以上各個技術的優(yōu)勢谨读,在復雜查詢的場景下,它也能夠做到極快響應坛吁,且無須對數(shù)據(jù)進行任何預處理加工劳殖。

1.10、數(shù)據(jù)分片與分布式查詢


數(shù)據(jù)分片是將數(shù)據(jù)進行橫向切分拨脉,這是一種在面對海量數(shù)據(jù)的場景下哆姻,解決存儲和查詢瓶頸的有效手段,是一種分治思想的體現(xiàn)玫膀。ClickHouse 支持分片矛缨,而分片則依賴集群。每個集群由一到多個分片組成帖旨,而每個分片則對應了 ClickHouse 的一個服務節(jié)點箕昭。分片的數(shù)量上限取決于節(jié)點數(shù)量:一個分片只能對應一個服務節(jié)點。

ClickHouse 擁有高度自動化的分片功能解阅。ClickHouse 提供了 Local Table 本地表與 Distributed Table 分布式表的概念落竹。一張本地表等同于一份數(shù)據(jù)的分片。而分布式表本身不存儲任何數(shù)據(jù)货抄,它是本地表的訪問代理述召,其作用類似分庫中間件朱转。借助分布式表,能夠代理訪問多個數(shù)據(jù)分片积暖,從而實現(xiàn)分布式查詢肋拔。

這種設計類似數(shù)據(jù)庫的分庫和分表,十分靈活呀酸。例如在業(yè)務系統(tǒng)上線的初期凉蜂,數(shù)據(jù)體量并不高,此時數(shù)據(jù)表并不需要多個分片性誉。所以使用單個節(jié)點的本地表(單個數(shù)據(jù)分片)即可滿足業(yè)務需求窿吩,待到業(yè)務增長、數(shù)據(jù)量增大的時候错览,再通過新增數(shù)據(jù)分片的方式分流數(shù)據(jù)纫雁,并通過分布式表實現(xiàn)分布式查詢。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末倾哺,一起剝皮案震驚了整個濱河市轧邪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羞海,老刑警劉巖忌愚,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異却邓,居然都是意外死亡硕糊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門腊徙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來简十,“玉大人,你說我怎么就攤上這事撬腾∶” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵民傻,是天一觀的道長胰默。 經(jīng)常有香客問我,道長饰潜,這世上最難降的妖魔是什么初坠? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮彭雾,結果婚禮上碟刺,老公的妹妹穿的比我還像新娘。我一直安慰自己薯酝,他們只是感情好半沽,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布爽柒。 她就那樣靜靜地躺著,像睡著了一般者填。 火紅的嫁衣襯著肌膚如雪浩村。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天占哟,我揣著相機與錄音心墅,去河邊找鬼。 笑死榨乎,一個胖子當著我的面吹牛怎燥,可吹牛的內容都是我干的。 我是一名探鬼主播蜜暑,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铐姚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肛捍?” 一聲冷哼從身側響起隐绵,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拙毫,沒想到半個月后依许,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡恬偷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年悍手,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袍患。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖竣付,靈堂內的尸體忽然破棺而出诡延,到底是詐尸還是另有隱情,我是刑警寧澤古胆,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布肆良,位于F島的核電站,受9級特大地震影響逸绎,放射性物質發(fā)生泄漏惹恃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一棺牧、第九天 我趴在偏房一處隱蔽的房頂上張望巫糙。 院中可真熱鬧,春花似錦颊乘、人聲如沸参淹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浙值。三九已至恳不,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間开呐,已是汗流浹背烟勋。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留筐付,地道東北人神妹。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像家妆,于是被迫代替她去往敵國和親鸵荠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容