與關係型資料庫相比,mongodb的缺點:
(1)mongodb不支援事務操作。
所以事務要求嚴格的系統(如果銀行系統)肯定不能用它。(這點和優點(1)是對應的)
(2)mongodb占用空間過大
關於其原因,在官方的faq中,提到有如下幾個方面:
1、空間的預分配:為避免形成過多的硬碟碎片,mongodb每次空間不足時都會申請生成一大塊的硬碟空間,而且申請的量以倍,例:64m、128m、256m那樣的指數遞增,直到2g為單個檔案的最大體積。隨著資料量的增加,你可以在其資料目錄裡看到這些整塊生成容量不斷遞增的檔案。
2、欄位名所占用的空間:為了保持每個記錄內的結構資訊用於查詢,mongodb需要把每個欄位的key-value都以bson的形式儲存,如果 value域相對於key域並不大,比如存放數值型的資料,則資料的overhead是最大的。一種減少空間占用的方法是把欄位名盡量取短一些,這樣占用空間就小了,但這就要求在易讀性與空間占用上作為權衡了。建議作者把欄位名作個index,每個欄位名用乙個位元組表示,這樣就不用擔心欄位名取多長了。但作者的擔憂也不無道理,這種索引方式需要每次查詢得到結果後把索引值跟原值作乙個替換,再傳送到客戶端,這個替換也是挺耗費時間的。現在的實現算是拿空間來換取時間吧。
*3、刪除記錄不釋放空間:這很容易理解,為避免記錄刪除後的資料的大規模挪動,原記錄空間不刪除,只標記"已刪除"即可,以後還可以重複利用。
4、可以定期執行db.repairdatabase()來整理記錄,但這個過程會比較緩慢
(3)mongodb沒有如mysql那樣成熟的維護工具,這對於開發和it運營都是個值得注意的地方
如何判斷資料庫中儲存的是不是亂碼
開發人員說從資料庫中讀取的是?資料庫表字符集都是utf8,也set names utf8了,為什麼讀取到的還是?可以判斷資料庫中儲存的是?了,如何驗證呢?1.暫時開啟general log,看看開發人員插入的到底是什麼語句 2.抓包分析 字符集測試情況,作業系統字符集為utf8 表的字符集 set ...
Kafka不是資料庫
kafka 是一種訊息 在過去幾年中迅速流行起來。訊息 已經存在很長時間了,它們是一種專門用於在生產者和消費者系統之間 緩衝 訊息的資料儲存。kafka 已經相當流行,因為它是開源的,並且能夠支援海量的訊息。訊息 通常用於解耦資料的生產者和消費者。例如,我們使用乙個類似 kafka 的訊息 來緩衝客...
MongoDB 資料庫操作
1 插入記錄 使用資料庫 如果沒有該資料庫就會建立,有就進入該模式 use use my testdb 插入資料 db.user.insert db.user.insert 顯示資料庫 show dbs my mongodb是隱式建立的資料庫 顯示表 show collections user是隱式...