深入講解拉鏈表挂签,還怕面試官問兑凿?

前言

???????? ?今天給大家分享一個(gè)面試中經(jīng)常會(huì)被問到的拉鏈表凯力,我在上篇文章中提出來(lái)一個(gè)需求如果不知道的請(qǐng)去→數(shù)倉(cāng)緩慢變化維深層講解查看,好礼华,廢話不多說(shuō)我們直接開始咐鹤。提出的問題會(huì)在末尾講解。

一圣絮、拉鏈表介紹(百度百科)

???????? 拉鏈表:維護(hù)歷史狀態(tài)祈惶,以及最新狀態(tài)數(shù)據(jù)的一種表,拉鏈表根據(jù)拉鏈粒度的不同,實(shí)際上相當(dāng)于快照捧请,只不過(guò)做了優(yōu)化凡涩,去除了一部分不變的記錄,通過(guò)拉鏈表可以很方便的還原出拉鏈時(shí)點(diǎn)的客戶記錄

二疹蛉、拉鏈表場(chǎng)景

???????? 數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)模型設(shè)計(jì)過(guò)程中活箕,經(jīng)常會(huì)遇到這樣的需求:

  1. 表中的部分字段會(huì)被update,例如:用戶的地址可款,產(chǎn)品的描述信息育韩,品牌信息等等;
  2. 需要查看某一個(gè)時(shí)間點(diǎn)或者時(shí)間段的歷史快照信息,例如:查看某一個(gè)產(chǎn)品在歷史某一時(shí)間點(diǎn)的狀態(tài)查看某一個(gè)用戶在過(guò)去某一段時(shí)間內(nèi)闺鲸,更新過(guò)幾次等等
  3. 變化的比例和頻率不是很大筋讨,例如:總共有1000萬(wàn)的會(huì)員,每天新增和發(fā)生變化的有10萬(wàn)左右

三摸恍、商品數(shù)據(jù)案例

需求商品表

列名類型說(shuō)明goods_idvarchar(50)商品編號(hào)goods_statusvarchar(50)商品狀態(tài)(待審核悉罕、待售、在售误墓、已刪除)createtimevarchar(50)商品創(chuàng)建日期modifytimevarchar(50)商品修改日期

2019年12月20日的數(shù)據(jù)如下所示:

goods_idgoods_statuscreatetimemodifytime001待審核2019-12-202019-12-20002待售2019-12-202019-12-20003在售2019-12-202019-12-20004已刪除2019-12-202019-12-20

???????? 商品的狀態(tài)蛮粮,會(huì)隨著時(shí)間推移而變化,我們需要將商品的所有變化的歷史信息都保存下來(lái)谜慌。如何實(shí)現(xiàn)呢然想?

方案一: 快照每一天的數(shù)據(jù)到數(shù)倉(cāng)(圖解)

該方案為:

  • 每一天都保存一份全量,將所有數(shù)據(jù)同步到數(shù)倉(cāng)中(我這里就使用MySQL操作的
  • 很多記錄都是重復(fù)保存欣范,沒有任何變化

12月20日(4條數(shù)據(jù))

goods_idgoods_statuscreatetimemodifytime001待審核2019-12-182019-12-20002待售2019-12-192019-12-20003在售2019-12-202019-12-20004已刪除2019-12-152019-12-20

12月21日(10條數(shù)據(jù))

goods_idgoods_statuscreatetimemodifytime以下為12月20日快照數(shù)據(jù)001待審核2019-12-182019-12-20002待售2019-12-192019-12-20003在售2019-12-202019-12-20004已刪除2019-12-152019-12-20以下為12月21日快照數(shù)據(jù)001 ?待售(從待審核到待售)2019-12-18 2019-12-21002待售2019-12-192019-12-20003在售2019-12-202019-12-20004已刪除2019-12-152019-12-20005(新商品)待審核2019-12-212019-12-21006(新商品)待審核2019-12-212019-12-21

12月22日(18條數(shù)據(jù))

goods_idgoods_statuscreatetimemodifytime以下為12月20日快照數(shù)據(jù)001待審核2019-12-182019-12-20002待售2019-12-192019-12-20003在售2019-12-202019-12-20004已刪除2019-12-152019-12-20以下為12月21日快照數(shù)據(jù)001待售(從待審核到待售)2019-12-182019-12-21002待售2019-12-192019-12-20003在售2019-12-202019-12-20004已刪除2019-12-152019-12-20005待審核2019-12-212019-12-21006待審核2019-12-212019-12-21以下為12月22日快照數(shù)據(jù)001待售2019-12-182019-12-21002待售2019-12-192019-12-20003已刪除(從在售到已刪除)2019-12-202019-12-22004待審核2019-12-212019-12-21005待審核2019-12-212019-12-21006已刪除(從待審核到已刪除)2019-12-212019-12-22007待審核2019-12-222019-12-22008待審核2019-12-222019-12-22

方案一: MySQL到变泄,MySQL數(shù)倉(cāng)代碼實(shí)現(xiàn)

MySQL初始化

  1. 在MySQL中zw庫(kù)和商品表用于到原始數(shù)據(jù)層
--?創(chuàng)建數(shù)據(jù)庫(kù)
create?database?if?not?exists?zw;
--?創(chuàng)建商品表
create?table?if?not?exists?`zw`.`t_product`(
goods_id?varchar(50),?--?商品編號(hào)
?goods_status?varchar(50),?--?商品狀態(tài)
?createtime?varchar(50),?--?商品創(chuàng)建時(shí)間
?modifytime?varchar(50)?--?商品修改時(shí)間
);
  1. 在MySQL中創(chuàng)建ods和dw層 模擬數(shù)倉(cāng)
--?ods創(chuàng)建商品表
create?table?if?not?exists?`zw`.`ods_t_product`(
goods_id?varchar(50),?--?商品編號(hào)
?goods_status?varchar(50),?--?商品狀態(tài)
?createtime?varchar(50),?--?商品創(chuàng)建時(shí)間
?modifytime?varchar(50),?--?商品修改時(shí)間
cdat?varchar(10)???--模擬hive分區(qū)
)default?character?set?=?'utf8';?;
--?dw創(chuàng)建商品表
create?table?if?not?exists?`zw`.`dw_t_product`(
goods_id?varchar(50),?--?商品編號(hào)
?goods_status?varchar(50),?--?商品狀態(tài)
?createtime?varchar(50),?--?商品創(chuàng)建時(shí)間
?modifytime?varchar(50),?--?商品修改時(shí)間
?cdat?varchar(10)??--?模擬hive分區(qū)
)default?character?set?=?'utf8';?;

增量導(dǎo)入12月20號(hào)數(shù)據(jù)

  1. 原始數(shù)據(jù)導(dǎo)入12月20號(hào)數(shù)據(jù)(4條)
insert?into?`zw`.`t_product`(goods_id,?goods_status,?createtime,?modifytime)?values
('001',?'待審核',?'2019-12-18',?'2019-12-20'),
('002',?'待售',?'2019-12-19',?'2019-12-20'),
('003',?'在售',?'2019-12-20',?'2019-12-20'),
('004',?'已刪除',?'2019-12-15',?'2019-12-20');

注意:由于我這里使用的MySQL來(lái)模擬的數(shù)倉(cāng)在這里偷個(gè)懶直接使用insert into的方式導(dǎo)入數(shù)據(jù),在企業(yè)中可能會(huì)使用hive來(lái)做數(shù)倉(cāng)使用kettle 或者sqoop或datax等來(lái)同步數(shù)據(jù)

#?從原始數(shù)據(jù)層導(dǎo)入到ods?層
insert?into?zw.ods_t_product
select?*,'20191220'?from?zw.t_product?;
#?從ods同步到dw層
insert?into?zw.dw_t_product
select?*?from?zw.ods_t_product?where?cdat='20191220';

增量導(dǎo)入12月21數(shù)據(jù)

  1. 原始數(shù)據(jù)層導(dǎo)入12月21日數(shù)據(jù)(6條數(shù)據(jù))
UPDATE?`zw`.`t_product`?SET?goods_status?=?'待售',?modifytime?=?'2019-12-21'?WHERE?goods_id?=?'001';
INSERT?INTO?`zw`.`t_product`(goods_id,?goods_status,?createtime,?modifytime)?VALUES
('005',?'待審核',?'2019-12-21',?'2019-12-21'),
('006',?'待審核',?'2019-12-21',?'2019-12-21');
  1. 將數(shù)據(jù)導(dǎo)入到ods層與dw層
#?從原始數(shù)據(jù)層導(dǎo)入到ods?層
insert?into?zw.ods_t_product
select?*,'20191221'?from?zw.t_product?;
#?從ods同步到dw層
insert?into?zw.dw_t_product
select?*?from?zw.ods_t_product?where?cdat='20191221';
  1. 查看dw層的運(yùn)行結(jié)果
select?*?from?zw.dw_t_product?where?cdat='20191221';

增量導(dǎo)入12月22日數(shù)據(jù)

  1. 原始數(shù)據(jù)層導(dǎo)入12月22日數(shù)據(jù)(6條數(shù)據(jù))
UPDATE?`zw`.`t_product`?SET?goods_status?=?'已刪除',?modifytime?=?'2019-12-22'?WHERE?goods_id?=?'003';
UPDATE?`zw`.`t_product`?SET?goods_status?=?'已刪除',?modifytime?=?'2019-12-22'?WHERE?goods_id?=?'006';
INSERT?INTO?`zw`.`t_product`(goods_id,?goods_status,?createtime,?modifytime)?VALUES
('007',?'待審核',?'2019-12-22',?'2019-12-22'),
('008',?'待審核',?'2019-12-22',?'2019-12-22');
  1. 將數(shù)據(jù)導(dǎo)入到ods層與dw層
#?從原始數(shù)據(jù)層導(dǎo)入到ods?層
insert?into?zw.ods_t_product
select?*,'20191222'?from?zw.t_product?;
#?從ods同步到dw層
insert?into?zw.dw_t_productpeizhiwenjian
select?*?from?zw.ods_t_product?where?cdat='20191222';
  1. 查看dw層的運(yùn)行結(jié)果
select?*?from?zw.dw_t_product?where?cdat='20191222';

從上述案例恼琼,可以看到:

? ? ?表每天保留一份全量妨蛹,每次全量中會(huì)保存很多不變的信息如果數(shù)據(jù)量很大的話晴竞,對(duì)存儲(chǔ)是極大的浪費(fèi)?????????

? ? ? 可以講表設(shè)計(jì)為拉鏈表蛙卤,既能滿足反應(yīng)數(shù)據(jù)的歷史狀態(tài),又可以最大限度地節(jié)省存儲(chǔ)空間噩死。

方案二: 使用拉鏈表保存歷史快照(思路/圖解)

  • 拉鏈表不存儲(chǔ)冗余的數(shù)據(jù)颤难,只有某行的數(shù)據(jù)發(fā)生變化,才需要保存下來(lái)已维,相比每次全量同步會(huì)節(jié)省存儲(chǔ)空間
  • 能夠查詢到歷史快照
  • 額外的增加了兩列(dw_start_date行嗤、dw_end_date),為數(shù)據(jù)行的生命周期

12月20日商品拉鏈表的數(shù)據(jù):

goods_idgoods_statuscreatetimemodifytimedw_start_datedw_end_date001待審核2019-12-182019-12-20 2019-12-20 9999-12-31 002待售2019-12-192019-12-20 ?2019-12-20 9999-12-31003在售2019-12-202019-12-20 ?2019-12-20 9999-12-31004已刪除2019-12-152019-12-20 2019-12-20 9999-12-31

???????? 12月20日的數(shù)據(jù)是全新的數(shù)據(jù)導(dǎo)入到dw表

  • dw_start_date表示某一條數(shù)據(jù)的生命周期起始時(shí)間垛耳,即數(shù)據(jù)從該時(shí)間開始有效(即生效日期
  • dw_end_date表示某一條數(shù)據(jù)的生命周期結(jié)束時(shí)間栅屏,即數(shù)據(jù)到這一天(不包含)(即失效日期
  • dw_end_date為9999-12-31飘千,表示當(dāng)前這條數(shù)據(jù)是最新的數(shù)據(jù),數(shù)據(jù)到9999-12-31才過(guò)期

12月21日商品拉鏈表的數(shù)據(jù)

goods_idgoods_statuscreatetimemodifytimedw_start_datedw_end_date001待審核2019-12-182019-12-202019-12-202019-12-21002待售2019-12-192019-12-202019-12-209999-12-31003在售2019-12-202019-12-202019-12-209999-12-31004已刪除2019-12-152019-12-202019-12-209999-12-31001(變)待售2019-12-182019-12-212019-12-219999-12-31 005(新)待審核2019-12-212019-12-21 2019-12-219999-12-31

???????? 12月21日商品拉鏈表的數(shù)據(jù)

  • 拉鏈表中沒有存儲(chǔ)冗余的數(shù)據(jù)栈雳,(只要數(shù)據(jù)沒有變化护奈,無(wú)需同步
  • 001編號(hào)的商品數(shù)據(jù)的狀態(tài)發(fā)生了變化(從待審核待售),需要將原有的dw_end_date從9999-12-31變?yōu)?019-12-21哥纫,表示待審核狀態(tài)逆济,在2019/12/20(包含) - 2019/12/21(不包含)有效
  • 001編號(hào)新的狀態(tài)重新保存了一條記錄,dw_start_date為2019/12/21磺箕,dw_end_date為9999/12/31
  • 新數(shù)據(jù)005奖慌、006、dw_start_date為2019/12/21松靡,dw_end_date為9999/12/31

12月22日商品拉鏈表的數(shù)據(jù)

goods_idgoods_statuscreatetimemodifytimedw_start_datedw_end_date001待審核2019-12-182019-12-202019-12-202019-12-21002待售2019-12-192019-12-202019-12-209999-12-31003在售2019-12-202019-12-202019-12-202019-12-22004已刪除2019-12-152019-12-202019-12-209999-12-31001待售2019-12-182019-12-212019-12-219999-12-31005待審核2019-12-212019-12-212019-12-219999-12-31006待審核2019-12-212019-12-212019-12-219999-12-31003(變)已刪除2019-12-202019-12-222019-12-229999-12-31 007(新) ? 待審核2019-12-222019-12-22 ?2019-12-229999-12-31 008(新) ? 待審核2019-12-222019-12-22 ?2019-12-229999-12-31

???????? 12月22日商品拉鏈表的數(shù)據(jù)

  • 003編號(hào)的商品數(shù)據(jù)的狀態(tài)發(fā)生了變化(從在售→已刪除)简僧,需要將原有的 dw_end_date從9999-12-31變?yōu)?019-12-22,表示在售狀態(tài)雕欺,在2019/12/20(包含) - 2019/12/22(不包含) 有效
  • 003編號(hào)新的狀態(tài)重新保存了一條記錄岛马,dw_start_date為2019/12/22,dw_end_date為9999/12/31
  • 新數(shù)據(jù)007屠列、008啦逆、dw_start_date為2019/12/22,dw_end_date為9999/12/31

方案二: 拉鏈表快照代碼實(shí)現(xiàn)

操作流程:

  1. 在原有dw層表上笛洛,添加額外的兩列
  2. 只同步當(dāng)天修改的數(shù)據(jù)到ods層
  3. 拉鏈表算法實(shí)現(xiàn)
  4. 拉鏈表的數(shù)據(jù)為:當(dāng)天最新的數(shù)據(jù) UNION ALL 歷史數(shù)據(jù)

代碼實(shí)現(xiàn):

  1. 在MySQL中zw庫(kù)和商品表用于到原始數(shù)據(jù)層
--?創(chuàng)建數(shù)據(jù)庫(kù)
create?database?if?not?exists?zw;

--?創(chuàng)建商品表
create?table?if?not?exists?`zw`.`t_product_2`(
goods_id?varchar(50),?--?商品編號(hào)
goods_status?varchar(50),?--?商品狀態(tài)
?createtime?varchar(50),?--?商品創(chuàng)建時(shí)間
?modifytime?varchar(50)?--?商品修改時(shí)間
)default?character?set?=?'utf8';
  1. 在MySQL中創(chuàng)建ods和dw層 模擬數(shù)倉(cāng)
--?ods創(chuàng)建商品表
create?table?if?not?exists?`zw`.`ods_t_product2`(
goods_id?varchar(50),?--?商品編號(hào)
?goods_status?varchar(50),?--?商品狀態(tài)
?createtime?varchar(50),?--?商品創(chuàng)建時(shí)間
?modifytime?varchar(50),?--?商品修改時(shí)間
cdat?varchar(10)???--?模擬hive分區(qū)
)default?character?set?=?'utf8';
--?dw創(chuàng)建商品表
create?table?if?not?exists?`zw`.`dw_t_product2`(
goods_id?varchar(50),?--?商品編號(hào)
?goods_status?varchar(50),?--?商品狀態(tài)
?createtime?varchar(50),?--?商品創(chuàng)建時(shí)間
?modifytime?varchar(50),?--?商品修改時(shí)間
?dw_start_date?varchar(12),?--??生效日期
?dw_end_date?varchar(12),?--?失效時(shí)間
?cdat?varchar(10)??--?模擬hive分區(qū)
)default?character?set?=?'utf8';?

全量導(dǎo)入2019年12月20日數(shù)據(jù)

  1. 原始數(shù)據(jù)層導(dǎo)入12月20日數(shù)據(jù)(4條數(shù)據(jù))
insert?into?`zw`.`t_product_2`(goods_id,?goods_status,?createtime,?modifytime)?values
('001',?'待審核',?'2019-12-18',?'2019-12-20'),
('002',?'待售',?'2019-12-19',?'2019-12-20'),
('003',?'在售',?'2019-12-20',?'2019-12-20'),
('004',?'已刪除',?'2019-12-15',?'2019-12-20');
  1. 將數(shù)據(jù)導(dǎo)入到數(shù)倉(cāng)中的ods層
insert?into?zw.ods_t_product2
select?*,'20191220'?from?zw.t_product_2?where?modifytime?>='2019-12-20'
  1. 將數(shù)據(jù)從ods層導(dǎo)入到dw層
insert?into?zw.dw_t_product2
select?goods_id,?goods_status,?createtime,?modifytime,?modifytime,'9999-12-31',?cdat?from?zw.ods_t_product2?where?cdat='20191220'

增量導(dǎo)入2019年12月21日數(shù)據(jù)

  1. 原始數(shù)據(jù)層導(dǎo)入12月21日數(shù)據(jù)(6條數(shù)據(jù))
UPDATE?`zw`.`t_product_2`?SET?goods_status?=?'待售',?modifytime?=?'2019-12-21'?WHERE?goods_id?=?'001';
INSERT?INTO?`zw`.`t_product_2`(goods_id,?goods_status,?createtime,?modifytime)?VALUES
('005',?'待審核',?'2019-12-21',?'2019-12-21'),
('006',?'待審核',?'2019-12-21',?'2019-12-21');
  1. 原始數(shù)據(jù)層同步到ods層
insert?into?zw.ods_t_product2
select?*,'20191221'?from?zw.t_product_2?where?modifytime?>='2019-12-21';
  1. 編寫ods層到dw層重新計(jì)算 dw_end_date

注意:我這里直接將結(jié)果的SQL語(yǔ)句放在這里語(yǔ)句 因?yàn)樾枰獙⒏采w寫入到數(shù)據(jù)庫(kù)中我這里就沒有寫了夏志,但是不影響我們結(jié)果。12月22 號(hào)的操作流程跟21 一樣我就里就不寫了

select?t1.goods_id,?t1.goods_status,?t1.createtime,?t1.modifytime,
???????t1.dw_start_date,
???????case?when?(t2.goods_id?is?not?null?and?t1.dw_end_date>'2019-12-21')?then?'2019-12-21'else?t1.dw__date?end?as?end?,
???????t1.cdat
from?zw.dw_t_product2?t1
left?join?(select?*?from?zw.ods_t_product2?where?cdat='20191221')t2?on?t1.goods_id=t2.goods_id
union
select?goods_id,?goods_status,?createtime,?modifytime,?modifytime,'9999-12-31',?cdat?from?zw.ods_t_product2?where?cdat='20191221'

總結(jié)

???????? 到這里我們終于將拉鏈表實(shí)現(xiàn)完了苛让,雖然實(shí)現(xiàn)拉鏈表這個(gè)功能有點(diǎn)復(fù)雜有點(diǎn)繞沟蔑,但是它真的幫助我們節(jié)省很多的資源,以公司層面難道不選它嗎狱杰,也就為什么面試數(shù)倉(cāng)的時(shí)候基本上都會(huì)問拉鏈表的原因瘦材。很多小伙伴對(duì)dw_start_dateds_end_date有疑惑我們可以在評(píng)論區(qū)一起討論。信自己仿畸,努力和汗水總會(huì)能得到回報(bào)的食棕。我是大數(shù)據(jù)老哥,我們下期見~~~

獲取Flink面試題错沽,Spark面試題簿晓,程序員必備軟件,hive面試題甥捺,Hadoop面試題抢蚀,Docker面試題镀层,簡(jiǎn)歷模板等資源請(qǐng)去GitHub自行下載 https://github.com/lhh2002/Framework-Of-BigData

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镰禾,一起剝皮案震驚了整個(gè)濱河市皿曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吴侦,老刑警劉巖屋休,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異备韧,居然都是意外死亡劫樟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門织堂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叠艳,“玉大人,你說(shuō)我怎么就攤上這事易阳「浇希” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵潦俺,是天一觀的道長(zhǎng)拒课。 經(jīng)常有香客問我,道長(zhǎng)事示,這世上最難降的妖魔是什么早像? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮肖爵,結(jié)果婚禮上卢鹦,老公的妹妹穿的比我還像新娘。我一直安慰自己劝堪,他們只是感情好法挨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幅聘,像睡著了一般凡纳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帝蒿,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天荐糜,我揣著相機(jī)與錄音,去河邊找鬼葛超。 笑死暴氏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绣张。 我是一名探鬼主播答渔,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼侥涵!你這毒婦竟也來(lái)了沼撕?” 一聲冷哼從身側(cè)響起宋雏,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎务豺,沒想到半個(gè)月后磨总,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笼沥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年蚪燕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奔浅。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馆纳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汹桦,到底是詐尸還是另有隱情厕诡,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布营勤,位于F島的核電站灵嫌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏葛作。R本人自食惡果不足惜寿羞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赂蠢。 院中可真熱鬧绪穆,春花似錦、人聲如沸虱岂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)第岖。三九已至难菌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔑滓,已是汗流浹背郊酒。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留键袱,地道東北人燎窘。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹄咖,于是被迫代替她去往敵國(guó)和親褐健。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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