1. 程式人生 > 其它 >Django | ORM分組查詢

Django | ORM分組查詢

一、MySQL體系結構

   1. 連線層       

  最上層是一些客戶端和連結服務,主要完成一些類似於連線處理、授權認證、及相關的安全方案。伺服器也會為安全接入的每個客戶
  端驗證它所具有的操作許可權。

   2. 服務層

  第二層架構主要完成大多數的核心服務功能,如SQL介面,並完成快取的查詢, SQL 的分析和優化,部分內建函式的執行。所有跨存
  儲引擎的功能也在這一層實現, 如過程、函式等。

   3. 引擎層

  儲存引擎真正的負責了MySQL中資料的儲存和提取,伺服器通過API和儲存引擎進行通訊。不同的儲存引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的儲存引擎。

   4. 儲存層

  主要是將資料儲存在檔案系統之上,並完成與儲存引擎的互動。 

二、儲存引擎介紹

   1. 檢視儲存引擎

  儲存引擎就是儲存資料、建立索引、更新/查詢資料等技術的實現方式。儲存引擎是基於表的,而不是基於庫的,所以儲存引擎也可被稱為表型別。

  mysql5.5版本之後預設的引擎是InnoDB,可以根據sql語句檢視建表語句 

#檢視建表語句  預設儲存引擎是InnoDB
show create table account;

    2. 建表時指定儲存引擎 

create table 表名(
    欄位1 欄位1型別,
    欄位2 欄位2型別
)engine 
= innodb;

 預設引擎就是innodb也可以省略不寫或者設定為其他儲存引擎

   3. 查詢當前資料庫支援的儲存引擎  

show engines;

 三、儲存引擎特點  

   1. InnoDB 

  InnoDB是一種兼顧高可靠性和高效能的通用儲存引擎,在MySQL 5.5之後, InnoDB是預設的MySQL儲存引擎。

  特點:

    DML(增刪改)操作遵循ACID模型,支援事務
    行級鎖,提高併發訪問效能
    支援外來鍵FOREIGN KEY約束,保證資料的完整性和正確性

  檔案:

    xxx.ibd: xxx代表的是表名,innoDB引擎的每張表都會對應這樣一個表空間檔案, 儲存該表的表結構(frm、 sdi)、資料和索引。
    引數: innodb_ file_per_table   代表每一張表對應一個表空間

  InnoDB邏輯結構:

  

   2. MyISAM  

  MylSAM是MySQL早期的預設儲存引擎。

  特點:

    不支援事務,不支援外來鍵
    支援表鎖,不支援行鎖
    訪問速度快

  檔案:

    xxx.sdi: 儲存表結構資訊
    xxx.MYD: 儲存資料
    xxx.MYI: 儲存索引

   3. Memory 

  Memory引擎的表資料是儲存在記憶體中的,由於受到硬體問題、或斷電問題的影響,只能將這些表作為臨時表或快取使用。

  特點:

    記憶體存放
    hash索引(預設)

  檔案:

    xxx.sdi:儲存表結構資訊

   4. 三種儲存引擎的區別 

  

四、儲存引擎的選擇   

  在選擇儲存引擎時,應該根據應用系統的特點選擇合適的儲存引擎。對於複雜的應用系統,還可以根據實際情況選擇多種儲存引擎進行組合。

   1. InnoDB 

  是Mysq|的預設儲存引擎,支援事務、外來鍵。如果應用對事務的完整性有比較高的要求,在併發條件下要求資料的一致性,資料操作除了插入和查詢之外,還包含很多的更新、刪除操作,那麼InnoDB儲存引擎是比較合適的選擇。

   2. MyISAM

  如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,並且對事務的完整性、併發性要求不是很高,那麼選擇這個儲存引擎是非常合適的。(此類場景的使用被MongoDB取代)

   3. MEMORY

  將所有資料儲存在記憶體中,訪問速度快,通常用於臨時表及快取。MEMORY的缺陷就是對錶的大小有限制,太大的表無法快取在記憶體中,而且無法保障資料的安全性。(此類場景更多的使用被Redis取代)