2021 iThome 鐵人賽 - DAY1 揭開序幕與 MongoDB 簡介

2021 iThome 鐵人賽 MongoDB披荊斬棘之路


DAY1 揭開序幕與 MongoDB 簡介

前言

終於鼓起勇氣要報名 iThome 鐵人賽!
本系列將會陸續介紹與紀錄在使用 MongoDB 的一些心得以及雷區。MongoDB 在 2021 已經是家喻戶曉的資料庫了,網路上教學資源也很多,我會分配多一些內容在中文資源較少的部分,讓大家能夠更容易學習到更多不同面向的 MongoDB,如有錯誤或者問題請不吝指教。

使用環境

我使用的環境是

  • macOS
  • .NET Core
  • Docker

要如何使用會簡單的說明,因為主軸畢竟還是在 MongoDB。

MongoDB 簡介

MongoDB,是 NoSQL 資料庫的一種,時至今日大部分 RDBMS 功能都有支援。剛開始的語法轉換上會是一個門檻,但更重要的是底層設計概念的不同。在維運工具方面,傳統的老牌 Oracle / MSSQL 還是有更強大的支援,不過 MongoDB 的成長性以及變革速度非常快,尤其 5.0 之後的版本釋出的步伐會更緊湊(嗯~官方是這樣宣稱的),很值得期待!

MongoDB 的特點是文件式資料儲存,這相當於關聯式資料庫的一個 table,而每個文件都不需要長得一樣,具備了高度的彈性,與關聯式資料齊頭時的欄位大小就不同。因為允許資料格式的不同,在設計上就能有效避免多表關聯的部分(table join),減少關聯複雜度。

這邊我會避免使用 優點 是因為某些情境或使用習慣下,並不是優點反而是缺點,但輕量、彈性與便利是很具有競爭力的。

這裡使用的文件(document)是使用 BSON 格式儲存的,BSON 即為 binary json 的意思,傳統 json 支援的格式太少,透過 BSON 儲存後能夠支援相當多的資料類型,在之後會講得更細。雖然是 BSON 格式,但是呈現上與 JSON 可以說是幾乎一模一樣,如下範例。

1
2
3
4
5
6
7
{
"name":"movieA",
"language":"en-gb",
"rating":8,
"totalCost":30000000,
"producer":"companyA"
}

對於文件格式的規範大致上與 JSON 是一樣的,但要記得是 case sensitive 的。

Terminology

要了解、使用 MongoDB 要先對術語有所了解,講錯了會被誤會是不是太少用 MongoDB。

SQL Terms MongoDB
table collection
row(record) document
column field
join lookup
where match
select project

其他沒有列出來的就是術語一致,一次列出太多不僅記不起來,這東西也不是靠死背就能活用,主要還是伸手下去淌這渾水,把手弄髒才能體會。

除了一般的 document 外,還有 embedded document (或稱 nested document),意思是在文件內的某個欄位,再定義一層,繼剛剛上面例子。

1
2
3
4
5
6
7
8
9
10
{
"name": "movieA",
"language": "en-gb",
"rating": 8,
"totalCost": 30000000,
"producer": {
"company": "Bill Film Industry",
"pic": "Bill Fates"
}
}

不需要太擔心效能問題,因為在 embedded document 的欄位也能夠建立 index,這些在後面的章節會再陸續提到。今天就先有個初步了解即可。

  • 作者: MingYi Chou
  • 版權聲明: 轉載不用問,但請註明出處!本網誌均採用 BY-NC-SA 許可協議。