1. 程式人生 > >MongoDB資料庫設計

MongoDB資料庫設計

MongoDB本身不強制使用schema,但是我們在做一個服務應用的時候,應該要知道資料應該怎麼組織。

MongoDB設計的考慮

MongoDB的資料庫與關係型資料庫一樣,也存在一對多、多對多等關係。關係型資料庫設計的時候有資料庫設計正規化(1NF,2NF,3NF,BCNF等等),非關係型資料庫要思考的問題則不太一樣:
- 關係型資料庫的資料基本單位是行和列,MongoDB的資料基本單位是BSON文件;
- 關係型資料庫一般只吃ad hoc即席查詢以及連線;MongoDB支援ad hoc,但不支援連線;
- 關係型資料庫允許使用SQL進行復雜的更新,可以在事務中包含多個更新並支援原子性和回滾;MongoDB不支援事務,但支援更新複雜結構的文件資料;
- MongoDB無需指定id生成策略,會自動生成_id;
- MongoDB無法與Hibernate之類的ORM框架結合使用;因為文件本身已經是類物件的表示形式了。

MongoDB相關概念

資料庫


資料庫是集合和索引的名稱空間和物理分組。
MongoDB沒有顯式地建立資料庫的方式,而是會在第一次寫入資料的時候建立資料庫。
建立資料庫的時候,MongoDB會在磁碟上分配一系列資料庫檔案集合,包括所有的集合、索引,以及其他元資料。
資料庫檔案儲存在mongod啟動時的dbpath引數指定的目錄資料夾中;如果不指定dbpath,則會預設在/data/db資料夾下儲存。
.ns檔案用來表明名稱空間;資料庫中每個集合和索引的元資料都有自己的名稱空間檔案,組織形式是雜湊表。.ns檔案固定大小16MB,意味著資料庫中集合和索引的數目之和不能超過26000。
MongoDB還為集合和索引在檔案裡分配空間,從0開始以遞增的方式作為字尾。
db.status()可以檢視資料庫的各項資訊,如空間資訊等:
這裡寫圖片描述

fileSize表示資料庫的所有檔案的大小;
dataSize是資料庫中BSON資料的大小;
storageSize還包括資料庫為集合增長預留的空間大小,以及未刪除的空間;
indexSize是資料庫縮印的總空間。

集合

集合是結構或者概念上相似的文件的容器。
MongoDB建立集合也是隱式的,在插入文件的時候才會建立。但因為有多重集合型別的存在,所以也提供了建立集合的命令:db.createCollection(“users”);
從MongoDB內部來講,集合名字是通過其名稱空間名字來區分的,包含所屬的資料庫的名字。

蓋子集合

有上限的集合,有固定的大小;這意味著如果蓋子集合的size達到上限,後續的插入會覆蓋最先插入的文件。
除了size大小限制,MongoDB允許為蓋子集合指定最大文件數量的max引數。不過size大小配置具有優先權。

TTL集合

MongoDB也允許在特定的時間後廢棄文件資料,叫做Time-To-Live(TTL)集合。這個功能實際上是通過一個特殊的索引實現的。
db.logs.createIndex({time_field: 1}, {expireAfterSeconds: 3600});
該命令在time_field上建立索引,該索引會定期檢查時間戳,與當前時間戳比較,如果大於expireAfterSeconds的時間設定,則會刪除文件。

系統集合

MongoDB的部分設計依賴於內部集合的使用。
有兩個特殊的集合:system.namespaces和system.indexes。
system.namespaces中可以查詢當前資料庫定義的所有名稱空間。
system.indexes儲存了當前資料庫中定義的所有索引。
這兩個集合都是標準集合,除錯的時候很有用。

文件

所有的文件再被髮送給MongoDB之前都序列化為BSON格式,以後再從BSON反序列化。
在MongoDB中,與關係型資料庫不同,行名和列名不是分開的。key名會儲存到每一個文件中,因此key名要儘量簡短,這樣可以節省空間(資料量龐大的情況下效果明顯)。

字串

所有的字串都必須使用UTF-8編碼。

數字

BSO內指定三種資料型別,分別是double、int、long。
JavaScript僅支援Number型別,所以MongoDB中如果要指定資料型別,要是用NumberLong()和NumberInt()強制指定。
type調db.numbers.find(n:$type:1);ndoubletype表需要查詢相關資料)。

時間

BSON的時間型別用來儲存臨時值,從Unix紀元計時開始時間值,使用64b整數的毫秒值表示,負數表示之前的時間。
JavaScript的月份是從0開始的。

文件限制

MongoDB中,BSO你文件的大小限制為16M,文件的巢狀深度最大為100.

相關推薦

MongoDB資料庫設計

MongoDB本身不強制使用schema,但是我們在做一個服務應用的時候,應該要知道資料應該怎麼組織。 MongoDB設計的考慮 MongoDB的資料庫與關係型資料庫一樣,也存在一對多、多對多等關係。關係型資料庫設計的時候有資料庫設計正規化(1NF,2NF,

MongoDB資料庫設計中6條重要的經驗法則(二)

在上一篇文章中我介紹了三種基本的設計方案:內嵌,子引用,父引用,同時說明了在選擇方案時需要考慮的兩個關鍵因素。 一對多中的多是否需要一個單獨的實體。 這個關係中集合的規模是一對很少,很多,還是非常多。 在掌握了以上基礎技術後,我將會介紹更為高階的主題:雙向關聯和反

MongoDB資料庫設計法則

Part 1 By William Zola, Lead Technical Support Engineer at MongoDB “我有豐富的sql使用經驗,但是我是個MongoDB的初學者。我應該如何在MongoDB中針對一對多關係進行建模?”這是我被問及最多的

MongoDB資料庫設計規範

MongoDB是非關係型資料庫的典型代表,DB-Engines Ranking 資料顯示,近年來,MongoDB在NoSQL領域一直獨佔鰲頭。MongoDB是為快速開發網際網路應用 而設計的資料庫系統,其資料模型和持久化策略就是為了構建高讀/寫的效能,並且可以方面的彈性拓展。目前公司使用到的Mong

MongoDB資料庫關係表示和設計:(1)巢狀文件和引用連結

使用資料的時候,一個數據項常常和另外的一個或多個數據項產生關係,比如一個“人”物件,有一個名字,可能有多個電話號碼,以及多個子女,等等。 在傳統的SQL資料庫中,關係被分為一個個表(table),在表中,每個資料項以主鍵(primary key)標識,而一個表的主鍵又

解密未來資料庫設計:MongoDB新儲存引擎WiredTiger實現(事務篇)

導語:計算機硬體在飛速發展,資料規模在急速膨脹,但是資料庫仍然使用是十年以前的架構體系,WiredTiger 嘗試打破這一切,充分利用多核與大記憶體時代,開發一種真正滿足未來大資料管理所需的資料庫。本文由袁榮喜向「高可用架構」投稿,介紹對 WiredTiger 原始碼學習過程中對資料庫設計的感悟。

mongodb 3.2 實戰(一)非關係型資料庫設計,如何進行mongo的資料庫設計

mongo 於2015,12,8 正式釋出了3.2的穩定版,這次重大的更新後,主要包括以下幾個比較令人興奮的點。 1.wiredtiger 引擎 在3.0釋出時,wiredtiger作為資料引擎之一。3.2之後wiredtiger作為建立資料庫的預設

mongodb設計特征

支持 javascrip 來源 對象類型 script 通過 集群 當前 工具 MongoDB 的設計目標是高性能、可擴展、易部署、易使用,存儲數據非常方便。其主要功能特性如下。 (1)面向集合存儲,容易存儲對象類型的數據。在MongoDB 中數據被分組存儲在集合中,集合

node.js連線mongoDB資料庫

前面已經講了mongoDB資料庫的安裝和使用,今天來研究一下node.js中如何連線和使用mongoDB資料庫。 方法一:mongoose連線 一、配置mongose 增加mongose類庫 npm install mongoose 二、利用mongoose連線mongoDB

MongoDB資料庫操作常用語法

一、建立資料庫 建立: use DATABASE_NAME(資料庫名稱) 如果資料庫不存在,則建立資料庫,否則切換到指定資料庫。 顯示所有資料庫: show dbs 剛建立的資料庫,並不在資料庫的列表中, 要顯示它,我們需要向其中插入一些資料。 插入資料: db.DATABASE_NAM

資料庫設計一二三四正規化有何區別

範化是在識別資料庫中的資料元素、關係、以及定義所需的表和各表中的專案這些初始化工作之後的一個細化的過程。常見的正規化有1NF 2NF 3NF BCNF以及4NF。 1NF,第一正規化。第一正規化是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者

第七章 資料庫設計

資料庫設計 資料庫設計是指對於一個給定的應用環境,構造(設計)優化的資料庫邏輯模式和物理結構,並據此建立資料庫及其應用系統,使之能夠有效地儲存和管理資料,滿足各種使用者的應用需求,包括資訊管理要求和資料操作要求。 資訊管理要求:在資料庫中應該儲存和管理哪些資料物件 。 資料操作要求:對資料物件需要進

Koa2學習之旅----mongodb資料庫查詢分頁資訊

db.表名.find().skip((page-1)*pageSize).limit(pageSize) db.collection(collectionName).find(json1,{fields:attr}).skip(slipNum).limit(pageSize); fi

linux使用yum安裝mongoDB資料庫

安裝步驟: 1、建立倉庫檔案:  1 vi /etc/yum.repos.d/mongodb-org-3.4.repo  然後複製下面配置,儲存退出 1 2 3 4 5 6

#資料庫設計規範

資料庫設計規範, 一二三正規化,E-R模型 1.資料庫表的設計正規化(三正規化和反正規化) E-R圖的基本成分包括實體型別、屬性和聯絡 1. 實體:用矩形表示,框內註明實體名稱。 2. 屬性;用橢圓表示,框內標註屬性名稱,並用無向邊

在Django框架下向MongoDB資料庫中匯入.scv檔案資料

在學習了一些MongoDB和Django框架的一些基礎知識後,我對MongoDB以及Django知識已經有了一個初步的掌握,是時候對學長的專案裡面的東西進行一個初步的實踐了,於是我選擇從Django框架中向MongoDB匯入資料的這部分程式碼開始。通過複用幾段學長專案裡的程式碼,在我自己新建的專案中

MongoDB資料庫入門筆記

MongoDB資料庫是非關係型資料庫,以文件為導向,與MySQL物件的概念為: MySQL  MongoDB 資料庫  資料庫 表  集合

重新學習mongodb:操作mongodb資料庫

1.啟動shell 2.資料庫、集合、文件 3.插入和查詢 插入:db.users.insert({username:"smith"}) 查詢:db.users.find() mongodb的_id欄位: 傳遞查詢條件:db.users.find({usernam

站內信的資料庫設計

站內信總體可以分為兩種:點到點,點到面 點到點即使用者給使用者,管理員給使用者 點到面即管理員給使用者組 點到點的設計 若只存在點到點或使用者量很少的情況下用一張表既可以 列名 含義 sen

Spring Boot中使用MongoDB資料庫實戰

 一 MongoDB簡介 MongoDB是一個基於分散式檔案儲存的資料庫,它是一個介於關係資料庫和非關係資料庫之間的產品,其主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)和傳統的RDBMS系統(具有豐富的功能)之間架起一座橋樑,它集兩者的優勢於一身。 MongoDB支援