用 Python 寫一個 NoSQL 資料庫Python

來源:互聯網
上載者:User

標籤:rdb   type   ase   還需   表示   ica   des   記錄   cat   

NoSQL 這個詞在近些年正變得隨處可見. 但是到底 “NoSQL” 指的是什麼? 它是如何並且為什麼這麼有用? 在本文, 我們將會通過純 Python (我比較喜歡叫它, “輕結構化的虛擬碼”) 寫一個 NoSQL 資料庫來回答這些問題.

 

OldSQL

很多情況下, SQL 已經成為 “資料庫” (database) 的一個同義字. 實際上, SQL 是 Strctured Query Language 的首字母縮寫, 而並非指資料庫技術本身. 更確切地說, 它所指的是從 RDBMS (關係型資料庫管理系統, Relational Database Management System ) 中檢索資料的一門語言. mysql, MS SQL Server 和 Oracle 都屬於 RDBMS 的其中一員.

 

RDBMS 中的 R, 即 “Relational” (有關係,關聯的), 是其中內容最豐富的部分. 資料通過 表 (table) 進行組織, 每張表都是一些由 類型 (type) 相關聯的 列 (column) 構成. 所有表, 列及其類的類型被稱為資料庫的 schema (架構或模式). schema 通過每張表的描述資訊完整刻畫了資料庫的結構. 比如, 一張叫做 Car 的表可能有以下一些列:

 

Make: a string

Model: a string

Year: a four-digit number; alternatively, a date

Color: a string

VIN(Vehicle Identification Number): a string

 

在一張表中, 每個單一的條目叫做一 行 (row), 或者一條 記錄 (record). 為了區分每條記錄, 通常會定義一個 主鍵 (primary key). 表中的 主鍵 是其中一列 , 它能夠唯一標識每一行. 在表 Car 中, VIN 是一個天然的主鍵選擇, 因為它能夠保證每輛車具有唯一的標識. 兩個不同的行可能會在 Make, Model, Year 和 Color 列上有相同的值, 但是對於不同的車而言, 肯定會有不同的 VIN. 反之, 只要兩行擁有同一個 VIN, 我們不必去檢查其他列就可以認為這兩行指的的就是同一輛車.

 

Querying

SQL 能夠讓我們通過對資料庫進行 query (查詢) 來擷取有用的資訊. 查詢 簡單來說, 查詢就是用一個結構化語言向 RDBMS 提問, 並將其返回的行解釋為問題的答案. 假設資料庫表示了美國所有的註冊車輛, 為了擷取 所有的 記錄, 我們可以通過在資料庫上進行如下的 SQL 查詢 :

 

SELECT Make, Model FROM Car;

 

將 SQL 大致翻譯成中文:

 

“SELECT”: “向我展示”

“Make, Model”: “Make 和 Model 的值”

“FROM Car”: “對錶 Car 中的每一行”

 

也就是, “向我展示表 Car 每一行中 Make 和 Model 的值”. 執行查詢後, 我們將會得到一些查詢的結果, 其中每個都是 Make 和 Model. 如果我們僅關心在 1994 年註冊的車的顏色, 那麼可以:

 

SELECT Color FROM Car WHERE Year = 1994;

 

此時, 我們會得到一個類似如下的列表:

 

Black

Red

Red

White

Blue

Black

White

Yellow

 

最後, 我們可以通過使用表的 (primary key) 主鍵 , 這裡就是 VIN 來指定查詢一輛車:

 

SELECT * FROM Car WHERE VIN = ‘2134AFGER245267‘

 

上面這條查詢語句會返回所指定車輛的屬性資訊.

 

主鍵被定義為唯一不可重複的. 也就是說, 帶有某一指定 VIN 的車輛在表中至多隻能出現一次. 這一點非常重要,為什麼? 來看一個例子:

 

Relations

假設我們正在經營一個汽車修理的業務. 除了其他一些必要的事情, 我們還需要追蹤一輛車的服務曆史, 即在該輛車上所有的修整記錄. 那麼我們可能會建立包含以下一些列的 ServiceHistory 表:

 

VIN | Make | Model | Year | Color | Service Performed | Mechanic | Price | Date

用 Python 寫一個 NoSQL 資料庫Python

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.