日韩欧乱色一区二区三区在线_久久―日本道色综合久久_欧美日本一区二区_网曝91综合精品门事件在线

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 為什么不用key-value型數據庫實現關系型數據庫?

為什么不用key-value型數據庫實現關系型數據庫?

來源:千鋒教育
發布人:xqq
時間: 2023-10-13 04:21:53 1697142113

一、為什么不用key-value型數據庫實現關系型數據庫

TiDB / CockroachDB 都是基于 KV 模型做的分布式關系型數據庫。TiDB 實際上是構建在 TiKV + pd 這一分布式 KV 存儲上的數據庫。所有表都以行的形式存在 KV 數據庫里。

e.g. TiDB 表 a 的某一行,主鍵為 b,就會變成 TiKV 里的一個 KV pair。key 為 table id + primary key, value 為這一行所有列的值。

在繼續回答之前先定義一下 KV 型數據庫,區分開存儲引擎和基于 KV 的關系型數據庫。RocksDB 是 KV 型數據庫(或者說單機 KV 存儲引擎);TiDB 是基于 KV 存儲引擎做的分布式關系型數據庫。

至于“日常業務中的很多簡單查詢”是否用基于 KV 的數據庫更好,可以先從存儲引擎的角度看。

從存儲引擎的角度來講,不管是 MySQL InnoDB 的 B+ 樹,還是基于 LSM-Tree KV 存儲引擎的 MyRocks / CockroachDB / TiDB,跑一個 SELECT * WHERE pk = 1; 讀的路徑應該不會有太大的區別,無非是根據 sort key 定位對應的 page / block 然后把一行撈出來,所以沒有好壞之分。

與此同時,如果這些“簡單查詢”就是直接跑在 KV 存儲引擎上的(比如問題中提到的 RediSQL),只是簡單地把 SQL 翻譯成了 KV 操作,還需要考慮對表的操作是否有事務隔離性的要求。即使是“簡單的”操作,e.g.

UPDATE x = x + 1;

也需要考慮事務的隔離性。對于 KV 存儲引擎來講,大多數引擎只提供點查、刪除、scan 的接口,開發者要在上面自己實現一層事務層。特別是在分布式場景下,這個事情就有點復雜了,和分布式關系型數據庫所面臨的問題是一樣的。

所以講到底,如果要在 KV 引擎上實現關系型數據庫,即使只支持簡單的 query,也需要處理很多 KV 引擎本身沒有考慮到的事情,比如事務、持久化(對于 in-memory engine 來說)等等。

延伸閱讀:

二、MongoDB是什么

非關系型數據庫(nosql ),屬于文檔型數據庫。MongoDB采用類JSON的documents來存儲數據。數據結構由鍵值(key=>value)對組成。

MongoDB采用動態數據模型schema,這意味著不需要預先定義表的數據類型和字段名。當MongoDB需要更新文檔documents的時候,可以輕松增加新的字段名或者刪除舊的字段。MongoDB讓數據結構更加層級化,因而存儲數組等復雜數據結構。 在同一個集合collection中,文檔document對字段也沒有強約束,因此更容易設計差異化的數據結構。

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 太白县| 右玉县| 台湾省| 禹州市| 灌云县| 阜新市| 五华县| 福海县| 遂溪县| 临猗县| 休宁县| 达孜县| 北宁市| 广昌县| 灵台县| 公主岭市| 开原市| 池州市| 板桥市| 尉氏县| 光泽县| 盘锦市| 屏山县| 隆德县| 武平县| 合阳县| 桃源县| 昆山市| 黔东| 江陵县| 黄骅市| 满城县| 镇巴县| 临澧县| 平南县| 衡东县| 玉田县| 肇庆市| 宽城| 张家界市| 林甸县|