NoSql資料庫使用半年後在設計上面的一些心得

2022-05-18 05:00:00 字數 2396 閱讀 5245

nosql資料庫這個概念聽聞許久了,也陸續看到很多公司和產品都在使用,優缺點似乎都被分析的清清楚楚。但我心裡一直存有乙個疑惑,它的出現究竟是為了解決什麼問題?

這個疑惑非常大,為此我看了很多分析文章,但卻總感覺是隔靴搔癢。為了一**竟,半年前我決定用mongodb這個著名的nosql資料庫做個產品試試。只有在真實的使用環境中才能得到最貼切的感受。

一晃眼,半年過去了,現在我能用親身的體會來談談nosql資料庫存在的理由和試**決的問題了。就像所有的哲學思考都**於對日常活動的觀察一樣,我們也從最基本的東西說起吧。

如果用nosql還是同樣的設計的話,那你會驚喜的發現nosql資料庫的效能簡直差到爆。性子火爆的估計當場就要掀桌。

什麼破爛資料庫,不是號稱效能一流的嗎!

好吧,效能問題也就不說了,竟然連事務都不支援!?那我同時插入四張表的資料該怎麼保持一致?開玩笑的吧!

nosql資料庫此時默默的淚流滿面,冤枉啊……你別說,還真是冤枉它了。

先從最基本的設計元素說起,幾乎所有的nosql資料庫都沒有表(table)的概念,取而代之的是文件(document)。文件是個什麼東西?mongodb的解釋,文件是乙個使用json格式以key-value方式儲存資料的結構,比如:

看起來和表沒什麼不同嘛?咳咳,json是支援巢狀結構的,比如可以把書籍資訊和使用者打分的資訊存到一起:
,

],

}

一堆document儲存到一起就叫做collection,而同乙個collection裡面的document可以不一樣。注意,這裡也是重點概念。如果切換到關係型資料庫的話,相當於一張表裡每一行資料的列都可以不一樣。這不是亂套了嗎?用不好確實會亂套的。

如果是關聯式資料庫,獲取資料的思路是這樣的:

1. 根據書籍id取到書籍資訊。

4. 根據書籍id和使用者id取到打分資訊。

那在nosql資料庫中如果我們用如下結構儲存資料的話……

,

"score": 3,

"title": "書評1",

"content": "書評內容1",

},

,

"score": 4,

"title": "書評2",

"content": "書評內容2"

}

],

}

似乎只要根據書籍id查詢一次就能得到結果了吧……明白為什麼說nosql資料庫效率高了嗎?一邊是從四個集合中查詢資料,一邊是從乙個集合中查詢資料,這執行效率肉眼就能看出來差別了吧。

所以到這裡我得到了一條設計心得,盡可能把一次展示所需的必要資料都儲存到一起。這是典型的空間換時間。所幸現在的科技條件下空間的**非常低廉,所以很划算。

根據這個設計結構,似乎也不需要事務的支援了,使用者為一本書籍打分只需要在乙個document裡面新增資料就夠了。

好,document特性的用處明白了,現在就來研究下nosql資料庫另外一條原則的用途了,還記得是什麼嗎?同乙個collection裡面的document可以不一樣

還是從實際應用中來看,某日,產品經理說,書籍詳細資訊頁面上還要顯示書評的建立時間。

如果使用關聯式資料庫該怎麼辦?

1. 建立乙個為review表增加」creationtime「列的sql指令碼。

2. 到資料庫中執行。

3. 修改相關**和儲存過程。

nosql呢?

1. 在comment結構實體中增加creationtime,增加賦值**。

沒了,不需要去修改歷史資料,因為?同乙個collection裡面的document可以不一樣。那如果取到歷史資料怎麼辦?comment的creationtime會被置為空。挺合理的,也不會產生什麼危害。

大家都知道,網際網路產品的更新速度是非常快的,經常根據使用者反饋和市場情況調整產品形態,而資料結構也會經常發生變化。為了適應這種環境,如何處理歷史資料就成了老大難。還記得當年看到乙個dba在設計表的時候會留出幾個字段叫做」reserved1,reserved2……「,感覺好無厘頭,浪費空間,後來隨著產品功能的增加才明白這其實是經驗豐富的表現。如果用nosql就不用這麼糾結了。

另外需要提醒一下,mongodb不支援事務,所以務必在設計的時候考慮到這一點。核心業務資料盡可能通過結構設計做到資料插入的一致性。如果實在無法達成,請立即轉回去用關聯式資料庫,否則或早或晚你一定會後悔的。

NoSql資料庫使用半年後在設計上面的一些心得

nosql資料庫這個概念聽聞許久了,也陸續看到很多公司和產品都在使用,優缺點似乎都被分析的清清楚楚。但我心裡一直存有乙個疑惑,它的出現究竟是為了解決什麼問題?這個疑惑非常大,為此我看了很多分析文章,但卻總感覺是隔靴搔癢。為了一 竟,半年前我決定用mongodb這個著名的nosql資料庫做個產品試試。...

Nosql資料庫概述

nosql資料庫簡稱非關係型資料庫,not only sql 那麼nosql資料庫有什麼特點呢?1.易擴充套件 nosql資料庫種類很多,但是有乙個共同的特點是都去掉了關係型資料庫的關係型特性 資料之間無關係,這樣就很容易擴充套件,也在架構的層面帶來了可擴充套件的能力 2.大資料量高效能 nosql...

NoSQL資料庫筆談

序 思想篇cap 最終一致性 變體base 其他i o的五分鐘法則 不要刪除資料 ram是硬碟,硬碟是磁帶 amdahl定律和gustafson定律 萬兆乙太網 手段篇一致性雜湊 亞馬遜的現狀 演算法的選擇 quorum nrw vector clock virtual node gossip go...