嵌入式數(shù)據(jù)庫簡介

什么是嵌入式數(shù)據(jù)庫棍苹?

嵌入式數(shù)據(jù)庫主要有兩種定義:

  • 用于嵌入式系統(tǒng)(如移動設(shè)備或消費電子產(chǎn)品)的數(shù)據(jù)庫。嵌入式數(shù)據(jù)庫需要占用空間小恩沛,并在內(nèi)存和CPU能力有限的環(huán)境中提供足夠的性能器一。
  • 嵌入到應(yīng)用程序中的數(shù)據(jù)庫--這意味著應(yīng)用程序不與數(shù)據(jù)庫服務(wù)器通信,而是內(nèi)置數(shù)據(jù)庫組件罐旗。這種類型的數(shù)據(jù)庫通常用于邊緣計算應(yīng)用。

在這兩種定義中唯蝶,嵌入式數(shù)據(jù)庫系統(tǒng)是一組與應(yīng)用或固件代碼相關(guān)聯(lián)的庫九秀,為應(yīng)用或設(shè)備提供內(nèi)置數(shù)據(jù)庫功能。這不同于客戶端/服務(wù)器數(shù)據(jù)庫系統(tǒng)粘我,在客戶端/服務(wù)器數(shù)據(jù)庫系統(tǒng)中鼓蜒,另一個進(jìn)程(數(shù)據(jù)庫服務(wù)器)為一個或多個客戶端應(yīng)用程序提供數(shù)據(jù)庫服務(wù)痹换。

特點:

  • 具有不同應(yīng)用編程接口(SQL以及專有、本地API)的數(shù)據(jù)庫系統(tǒng)
  • 數(shù)據(jù)庫架構(gòu)(客戶端-服務(wù)器和進(jìn)程內(nèi))
  • 存儲模式(磁盤存儲都弹、內(nèi)存存儲和組合存儲)
  • 數(shù)據(jù)庫模型(關(guān)系型娇豫、面向?qū)ο笮汀嶓w-屬性-值模型畅厢、網(wǎng)絡(luò)/CODASYL)
  • 特定市場

嵌入式系統(tǒng)的特點

嵌入式系統(tǒng)是計算機(jī)硬件和軟件的組合冯痢,旨在執(zhí)行特定功能。例如智能手機(jī)框杜、數(shù)碼相機(jī)和聯(lián)網(wǎng)汽車浦楣。嵌入式系統(tǒng)具有以下特點:

  • 由硬件、固件和軟件組成
  • 為特定系統(tǒng)任務(wù)而設(shè)計霸琴,因此通常集成到更大的系統(tǒng)中
  • 計算能力由集成電路(微處理器或微控制器)提供
  • 通常需要在時間限制下執(zhí)行任務(wù)椒振,以支持更大系統(tǒng)中的其他組件

嵌入式數(shù)據(jù)庫的要求

要了解一個數(shù)據(jù)庫是否適合用作嵌入式數(shù)據(jù)庫,請考慮以下要求:

  • 是否支持CRUD(創(chuàng)建梧乘、讀取澎迎、更新、刪除)选调?
  • 是否支持ACID(原子性夹供、一致性、隔離性仁堪、持久性)哮洽?
  • 能否使用不同的編程語言和操作平臺?
  • 是否可以方便地將數(shù)據(jù)轉(zhuǎn)移到中央數(shù)據(jù)庫弦聂?
  • 是否無需數(shù)據(jù)庫管理員進(jìn)行維護(hù)鸟辅?

在幾乎所有的嵌入式數(shù)據(jù)庫應(yīng)用中,嵌入式應(yīng)用都需要存儲多個復(fù)雜的數(shù)據(jù)流莺葫,以便進(jìn)行分析和操作匪凉。它們必須能夠接收來自多個來源的數(shù)據(jù),并同時執(zhí)行讀寫操作捺檬。數(shù)據(jù)庫不僅需要存儲數(shù)據(jù)再层,還必須保持完整性,并能夠在系統(tǒng)發(fā)生故障時進(jìn)行恢復(fù)堡纬。

您可以使用基本的CRUD功能來修改數(shù)據(jù)聂受,但它不能保證數(shù)據(jù)完整性。ACID提供了更好的完整性級別烤镐,并且能夠支持事務(wù)場景蛋济。在嵌入式場景中,數(shù)據(jù)記錄通過多條語句寫入數(shù)據(jù)庫炮叶。下面介紹ACID如何幫助支持這種需求:

  • 原子性要求數(shù)據(jù)庫允許或拒絕構(gòu)成記錄的所有語句碗旅。
  • 一致性有助于防止可能破壞數(shù)據(jù)的部分更改鹊杖。
  • 隔離性允許您同時寫入多個數(shù)據(jù)記錄,而不會相互影響扛芽。
  • 持久性意味著,如果記錄已提交积瞒,即使系統(tǒng)發(fā)生故障川尖,該記錄也會保持提交狀態(tài)。

不符合ACID要求會增加數(shù)據(jù)庫損壞的風(fēng)險茫孔。在擁有成百上千臺設(shè)備的環(huán)境中叮喳,更有可能發(fā)生錯誤,因此ACID合規(guī)性變得更加重要缰贝。

嵌入式數(shù)據(jù)庫的類型

嵌入式場景中使用的數(shù)據(jù)庫主要有三種類型馍悟。

  • 傳統(tǒng)SQL數(shù)據(jù)庫可用于嵌入式系統(tǒng),但通常必須犧牲存儲空間或功能剩晴。有些數(shù)據(jù)庫僅實現(xiàn)部分SQL語法锣咒,或提供弱類型SQL語法,無法保證完整性赞弥。

  • 時間序列數(shù)據(jù)庫測量毅整、跟蹤、調(diào)查和自動處理時間敏感型數(shù)據(jù)流绽左。時間序列數(shù)據(jù)庫為了速度犧牲了一些ACID功能悼嫉。例如,如果您的系統(tǒng)正試圖優(yōu)化寫入次數(shù)拼窥,記錄鎖定的時間可能會縮短戏蔑,這可能會降低一致性。

  • 數(shù)據(jù)歷史系統(tǒng)收集并存儲大量帶有時間戳的數(shù)據(jù)鲁纠。數(shù)據(jù)歷史器通常內(nèi)置于設(shè)備中总棵,主要用于收集和傳輸信息,分析能力有限房交。它可以提供SQL查詢界面彻舰,但不一定遵循標(biāo)準(zhǔn)SQL語法。

參考資料

嵌入式數(shù)據(jù)庫: SQL與API

在許多嵌入式系統(tǒng)中白群,需要在SQL訪問數(shù)據(jù)庫(通常使用JDBC/ODBC)與專有API訪問之間做出選擇尚胞。讓我們來看看每種方法的優(yōu)缺點。

使用SQL訪問嵌入式數(shù)據(jù)庫

  • SQL眾所周知帜慢,對開發(fā)人員和管理員非常有用笼裳。
  • 提供靈活的查詢功能唯卖。
  • 能夠同時對多條記錄應(yīng)用UPDATE或DELETE語句,而非SQL API則單獨處理每條記錄躬柬。
  • 能夠同時對多條記錄應(yīng)用UPDATE或DELETE語句拜轨,而非SQL API則單獨處理每條記錄。
  • 解析允青、優(yōu)化和執(zhí)行查詢所需的開銷很高橄碾。這些步驟會占用CPU周期、內(nèi)存和其他稀缺資源颠锉。
  • SQL通常與其他系統(tǒng)不完全兼容法牲,例如與面向?qū)ο缶幊滩患嫒荨_@被稱為 "阻抗失配"琼掠。為了解決這個問題拒垃,引入了對象關(guān)系映射(ORM object-relational mapping),但它增加了更多的開銷瓷蛙。

使用專有API訪問嵌入式數(shù)據(jù)庫

  • 避免了阻抗失配悼瓮,因為嵌入式數(shù)據(jù)庫及其API是由同一家公司設(shè)計的。
  • 消除了處理SQL查詢的開銷艰猬,允許直接訪問數(shù)據(jù)谤牡。
  • 使用專有API是一項專業(yè)技能,團(tuán)隊成員必須學(xué)習(xí)姥宝。
  • 鎖定在特定的數(shù)據(jù)庫系統(tǒng)中翅萤,如果該系統(tǒng)不符合要求,則很難遷移腊满。

變更數(shù)據(jù)捕獲(CDC)和嵌入式數(shù)據(jù)庫

在許多嵌入式系統(tǒng)中套么,CDC(Change Data Capture )用于識別哪些數(shù)據(jù)發(fā)生了變化,并為將來的目的保存數(shù)據(jù)變化碳蛋。這可以實現(xiàn)數(shù)據(jù)庫恢復(fù)胚泌、復(fù)制和處理流事件。

在嵌入式數(shù)據(jù)庫中肃弟,變化數(shù)據(jù)捕獲提供了三種主要功能:

  • 事務(wù)記錄-在數(shù)據(jù)庫崩潰后玷室,使用UNDO和REDO操作檢索數(shù)據(jù)庫事務(wù)。
  • 觸發(fā)器-當(dāng)數(shù)據(jù)庫檢測到INSERT笤受、UPDATE或DELETE操作時調(diào)用的動作穷缤。
  • 復(fù)制-CDC可以支持多種復(fù)制模式:
    • 復(fù)制已提交的事務(wù)(鏡像或事務(wù)復(fù)制)
    • 復(fù)制已提交和未提交的事務(wù)(日志傳輸)

常見實現(xiàn)

  • Advantage Database Server from Sybase Inc.

Sybase的Advantage Database Server(ADS)是一個嵌入式數(shù)據(jù)庫管理系統(tǒng)。它提供ISAM和關(guān)系型數(shù)據(jù)訪問箩兽,兼容多種平臺津肛,包括Windows、Linux和Netware汗贫。它既可以是免版稅的本地文件服務(wù)器數(shù)據(jù)庫身坐,也可以是完整的客戶服務(wù)器版本秸脱。ADS具有高度可擴(kuò)展性,無需管理部蛇,支持多種集成開發(fā)環(huán)境摊唇。

  • Berkeley DB from Oracle Corporation

Oracle的嵌入式數(shù)據(jù)庫實際上是Berkeley DB,是Oracle從Sleepycat軟件公司收購的涯鲁。Berkeley DB是一個快速遏片、開源的嵌入式數(shù)據(jù)庫,被用于多個著名的開源產(chǎn)品撮竿,包括Linux和BSD Unix操作系統(tǒng)、Apache Web服務(wù)器笔呀、OpenOffice生產(chǎn)力套件幢踏。然而,近年來許多知名項目轉(zhuǎn)而使用LMDB许师,因為LMDB在 "少即是多 "的設(shè)計基礎(chǔ)上房蝉,在關(guān)鍵場景中的性能優(yōu)于Berkeley DB,而且許可證也發(fā)生了變化微渠。

  • Apache Derby
    Derby是一個完全用Java編寫的可嵌入的SQL引擎搭幻。Derby是一個成熟的引擎,在Apache許可下免費提供逞盆,并得到積極的維護(hù)檀蹋。Derby項目頁面。它也作為Oracle的Java SE開發(fā)包(JDK)的一部分以Java DB的名義發(fā)布云芦。

  • DuckDB from DuckDB Labs

  • CSQL from csqlcache.com

  • Extensible Storage Engine from Microsoft

  • eXtremeDB from McObject

McObject LLC推出的eXtremeDB是第一個為實時嵌入式系統(tǒng)從零開始設(shè)計的內(nèi)存嵌入式數(shù)據(jù)庫俯逾。最初的產(chǎn)品很快被用于容錯應(yīng)用的eXtremeDB高可用性(HA)加入。現(xiàn)在舅逸,該產(chǎn)品系列包括64位版本和事務(wù)日志版本桌肴,以及混合型eXtremeDB Fusion,它結(jié)合了內(nèi)存和磁盤數(shù)據(jù)存儲琉历。2008年坠七,McObject推出了eXtremeDB Kernel Mode,這是第一個設(shè)計用于在操作系統(tǒng)內(nèi)核中運(yùn)行的嵌入式DBMS旗笔。

  • Firebird Embedded
  • HSQLDB from HSQLDB.ORG,
  • Informix Dynamic Server (IDS) from IBM

Informix Dynamic Server (IDS)的特點是作為企業(yè)級可嵌入式數(shù)據(jù)庫服務(wù)器彪置,結(jié)合了可嵌入式特性(如低占用空間、可編程和自主能力)和企業(yè)級數(shù)據(jù)庫特性(如高可用性和靈活的復(fù)制特性)蝇恶。 IDS被用于深度嵌入式場景悉稠,如IP電話呼叫處理系統(tǒng)、銷售點應(yīng)用和金融交易處理系統(tǒng)艘包。

  • InfinityDB from Boiler Bay Inc.

nfinityDB嵌入式Java DBMS是一個排序的分層鍵/值存儲的猛。它現(xiàn)在有一個加密版和一個客戶端/服務(wù)器版耀盗。多核速度已申請專利。InfinityDB是安全的卦尊、事務(wù)性的叛拷、可壓縮的和健壯的,只需一個文件就可以立即安裝和零管理岂却。API包括簡單快速的 "ItemSpace"忿薇、ConcurrentNavigableMap視圖和JSON。RemoteItemSpace可以將嵌入式API透明地重定向到其他數(shù)據(jù)庫實例躏哩∈鸷疲客戶端/服務(wù)器包括一個輕量級的Servlet服務(wù)器、web管理和數(shù)據(jù)庫瀏覽扫尺,以及用于python的REST筋栋。

  • InnoDB from Oracle Corporation
  • InterBase (Both server and mobile friendly deeply embedded version) from Embarcadero Technologies

InterBase是一個屢獲IoT大獎的跨平臺、支持Unicode的SQL數(shù)據(jù)庫平臺正驻,可嵌入到交鑰匙應(yīng)用中弊攘。支持開箱即用的SMP和磁盤AES強(qiáng)度256位加密,符合SQL 92和ACID標(biāo)準(zhǔn)姑曙,支持Windows襟交、LevelDBMacintosh、Linux伤靠、Solaris捣域、iOS和Android平臺。是中小型企業(yè)和大型企業(yè)支持?jǐn)?shù)百個用戶和移動應(yīng)用開發(fā)的理想選擇宴合。InterBase Light是一個免費版本竟宋,可在任何移動設(shè)備上使用,是移動應(yīng)用的理想選擇形纺。隨著對變更管理和安全性要求的提高丘侠,企業(yè)可以切換到付費版本。InterBase在國防逐样、空域蜗字、石油和天然氣以及制造行業(yè)的應(yīng)用率很高

  • KùzuDB
  • LanceDB
  • LevelDB

LevelDB是Google創(chuàng)建的有序鍵/值存儲,是Bigtable存儲設(shè)計的輕量級實現(xiàn)脂新。作為一個庫(這是使用LevelDB的唯一方法)挪捕,它的本地API是C++。它還為大多數(shù)功能提供了官方的C語言封裝争便。第三方API封裝包適用于Python级零、PHP、Go(純Go LevelDB實現(xiàn)已經(jīng)存在,但仍在開發(fā)中)奏纪、Node.js和Objective C鉴嗤。

[圖片上傳失敗...(image-d4aeb8-1689030717397)]

  • Lightning Memory-Mapped Database (LMDB) from Symas Corp.

閃電內(nèi)存映射數(shù)據(jù)庫(LMDB)是OpenLDAP項目的內(nèi)存映射鍵值數(shù)據(jù)庫。它是用C語言編寫的序调,其API仿照Berkeley DB API醉锅,但已大大簡化。該庫非常緊湊发绢,編譯后的x86目標(biāo)代碼不到40KB硬耍,通常比Berkeley DB、LevelDB等類似庫更快边酒。該庫實現(xiàn)了具有多版本并發(fā)控制(MVCC)经柴、單級存儲、寫入時復(fù)制功能的B+樹墩朦,并提供了無死鎖的完全ACID事務(wù)坯认。該庫針對高讀取并發(fā)性進(jìn)行了優(yōu)化;讀者完全不需要鎖介杆。讀取器不會阻塞寫入器,寫入器也不會阻塞讀取器韭寸,因此讀取性能在任意多線程和CPU上完全線性擴(kuò)展春哨。第三方封裝程序適用于C++、Erlang和Python恩伺。LMDB由OpenLDAP項目根據(jù)OpenLDAP公共許可證發(fā)布赴背。自2013年起,OpenLDAP項目不再使用Berkeley DB晶渠,轉(zhuǎn)而使用LMDB凰荚。

  • Mimer SQL

專有的Mimer SQL關(guān)系數(shù)據(jù)庫服務(wù)器有一個嵌入式零維護(hù)版本。它采用模塊化設(shè)計褒脯,占用空間小便瑟,完全支持SQL標(biāo)準(zhǔn),并可移植到Windows番川、Linux到涂、Automotive Grade Linux、Android颁督、QNX践啄、INTEGRITY等平臺。

  • MonetDB/e

MonetDB/e是開源MonetDB SQL列存儲引擎的嵌入式版本沉御∮旆恚可用于C、C++吠裆、Java (JDBC)和Python伐谈。MonetDB許可證烂完,基于MPL 2.0。前身MonetDBLite(用于R衩婚、Python和Java)已不再維護(hù)窜护。取而代之的是MonetDB/e。

  • MySQL Server Embedded

嵌入式MySQL服務(wù)器庫提供了常規(guī)MySQL的大部分功能非春,它是一個可鏈接的庫柱徙,可以在客戶端進(jìn)程的上下文中運(yùn)行。在初始化之后奇昙,客戶端可以使用與單獨的MySQL服務(wù)器相同的C API調(diào)用护侮,但通信開銷較小,并且不需要單獨的數(shù)據(jù)庫進(jìn)程储耐。

  • NexusDB

NexusDB是FlashFiler數(shù)據(jù)庫的商業(yè)繼承者羊初,F(xiàn)lashFiler數(shù)據(jù)庫現(xiàn)在已經(jīng)開源。它們都可以嵌入到Delphi應(yīng)用程序中什湘,創(chuàng)建具有完整數(shù)據(jù)庫功能的獨立可執(zhí)行文件

  • Raima Database Manager from Raima

該產(chǎn)品在兩種意義上是嵌入式的:首先长赞,它嵌入到應(yīng)用程序中,成為應(yīng)用程序的擴(kuò)展闽撤;其次得哆,由于其占用空間小、運(yùn)行高效哟旗,它可以在嵌入式計算機(jī)/操作系統(tǒng)或?qū)崟r環(huán)境中使用贩据。它的API(用于C/C++、SQL闸餐、JDBC饱亮、ODBC、ADO.NET和RESTful)是為支持嵌入式環(huán)境的有限資源而設(shè)計的舍沙。

  • RocksDB

RocksDB創(chuàng)建于Facebook近上,最初是LevelDB的一個分叉。 它專注于性能拂铡,尤其是在SSD上的性能戈锻。它增加了許多功能,包括事務(wù)和媳、 備份格遭、 快照、 Bloom過濾器留瞳、 列族拒迅、 過期、 自定義合并操作符、 更可調(diào)的壓縮璧微、 統(tǒng)計收集作箍、 和地理空間索引。 它被用作其他幾個數(shù)據(jù)庫的存儲引擎前硫,包括ArangoDB胞得、 Ceph、 CockroachDB屹电、 MongoRocks阶剑、 MyRocks、 Rocksandra危号、 TiKV牧愁、 和YugabyteDB。

[圖片上傳失敗...(image-f42ed5-1689030717397)]

  • solidDB

Solid DB是一種磁盤/內(nèi)存混合型關(guān)系數(shù)據(jù)庫外莲,通常用作電信設(shè)備猪半、網(wǎng)絡(luò)軟件和類似系統(tǒng)中的嵌入式系統(tǒng)數(shù)據(jù)庫。內(nèi)存數(shù)據(jù)庫技術(shù)用于實現(xiàn)每秒數(shù)以萬計的事務(wù)吞吐量偷线,響應(yīng)時間以微秒計算磨确。高可用性選項始終保持兩份數(shù)據(jù)同步。如果系統(tǒng)發(fā)生故障声邦,應(yīng)用程序可在一秒鐘內(nèi)恢復(fù)對實體數(shù)據(jù)庫的訪問乏奥,而不會丟失數(shù)據(jù)。

  • SQLite(霸主)

SQLite是一個軟件庫翔忽,它實現(xiàn)了一個自包含英融、無服務(wù)器盏檐、零配置歇式、事務(wù)型SQL數(shù)據(jù)庫引擎。SQLite是世界上部署最廣泛的SQL數(shù)據(jù)庫引擎胡野。SQLite的源代碼(主要是C語言)屬于公共領(lǐng)域材失。它包括本地C庫和簡單的數(shù)據(jù)庫命令行客戶端。

[圖片上傳失敗...(image-1ee9a8-1689030717397)]

  • SQL Server Compact from Microsoft Corporation

SQL Server Compact是微軟的嵌入式數(shù)據(jù)庫硫豆,具有多種功能龙巨,如多進(jìn)程連接、T-SQL熊响、與任何后端數(shù)據(jù)庫同步的ADO.NET同步服務(wù)旨别、與SQL Server的合并復(fù)制、編程API汗茄、LINQ to SQL秸弛、LINQ to Entities、ADO.NET: 編程API:LINQ to SQL、LINQ to Entities递览、ADO.NET叼屠。該產(chǎn)品可在桌面和移動Windows平臺上運(yùn)行。該產(chǎn)品已在市場上銷售了很長時間绞铃,被許多企業(yè)用于生產(chǎn)軟件(案例研究)镜雨。該產(chǎn)品經(jīng)歷了多次品牌重塑,曾有多個名稱儿捧,如 SQL CE荚坞、SQL Server CE、SQL Server Mobile纯命、SQL Mobile西剥。

  • Sophia Embeddable key-value storage
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市亿汞,隨后出現(xiàn)的幾起案子瞭空,更是在濱河造成了極大的恐慌,老刑警劉巖疗我,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆畏,死亡現(xiàn)場離奇詭異,居然都是意外死亡吴裤,警方通過查閱死者的電腦和手機(jī)旧找,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麦牺,“玉大人钮蛛,你說我怎么就攤上這事∑噬牛” “怎么了魏颓?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長甸饱。 經(jīng)常有香客問我,道長叹话,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任驼壶,我火速辦了婚禮,結(jié)果婚禮上喉酌,老公的妹妹穿的比我還像新娘热凹。我一直安慰自己,他們只是感情好碌嘀,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著股冗,像睡著了一般霹陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上止状,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天烹棉,我揣著相機(jī)與錄音怯疤,去河邊找鬼。 笑死集峦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摘昌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼聪黎,長吁一口氣:“原來是場噩夢啊……” “哼备恤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起露泊,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滤淳,沒想到半個月后砌左,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡屁擅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年产弹,在試婚紗的時候發(fā)現(xiàn)自己被綠了弯囊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胶果。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖早抠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蕊连,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布甘苍,位于F島的核電站,受9級特大地震影響看彼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闲昭,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一靡挥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跋破,春花似錦、人聲如沸毒返。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贾富,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颤枪,已是汗流浹背淑际。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工扇住, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艘蹋。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓票灰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親米间。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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