目錄
- 1 Schema
- 1.1 Orcal數據庫示例
- 1.2 MySQL數據庫示例
- 2 Orcal表分區
- 2.1 創建表分區
- 2.2 查看表分區
- 2.3 查看指定分區數據
此前未了解過Schema的概念,僅知道Orcal數據庫比較側重這個概念,搜遍全網都,都是啰哩吧嗦的搬抄定義,特此在梳理后寫下本文,模擬直觀的示例通俗易懂,3min拿下理解
1 Schema
1.1 Orcal數據庫示例
假設我們有一個多租戶的應用,服務多個學校的學生信息。每個學校都有自己的數據,而且我們希望在同一個數據庫實例中存儲這些信息。使用schema可以很好地實現這個目標。
通過這種方式,每個學校的數據都被組織在自己的schema下,相互隔離。不同學校的表可以使用相同的名稱,而不會發生命名沖突。
1.2 MySQL數據庫示例
在MySQL中,相同的多租戶場景可以使用不同的數據庫來實現,而不需要關心用戶和schema的概念。
在MySQL中,每個數據庫是一個獨立的命名空間,可以存儲相同表名的表而不會發生沖突。因此,MySQL中不同數據庫的隔離性通過數據庫本身來實現,而不需要顯式的用戶和schema的概念。
可以這么說,比如你連接mysql環境xxx.xxx.xx.xx:8080,創建的數據庫如下
- 陽光中學數據庫
- 實驗中學數據庫
- 彩虹中學數據庫
- 西南科技大學數據庫
- 清華大學數據庫
- 華中科技大學數據庫
- 朝陽街道辦數據庫
- 鳳凰南路街道辦數據庫
每個數據庫對應不同的需求
你想要獲取陽光中學的數據,就在項目中連接陽光中學的數據庫;
你想要獲取西南科技大學的數據,就在項目中連接西南科技大學的數據庫
完全沒問題,這是mysql的操作,那么orcal如何處理呢
中學數據庫
- 陽光中學 (A)
- 實驗中學 (B)
- 彩虹中學 (C)
大學數據庫
- 西南科技大學 (D)
- 清華大學 (E)
- 華中科技大學 (F)
街道辦數據庫
- 朝陽街道辦 (G)
- 鳳凰南路街道 (H)
每個數據庫對應不同的需求
項目中連接中心數據庫
你想要獲取陽光中學的數據,就用身份A登陸;
你想要獲取彩虹中學的數據,就用身份C登陸;
2 Orcal表分區
2.1 創建表分區
首先,讓我們創建一個簡單的分區表,然后演示如何查看分區信息。我們將使用范圍分區作為示例。
-- 創建一個范圍分區表,分區名為p0,p1, p2, p3
CREATE TABLE sales (sale_id INT,sale_date DATE,amount DECIMAL(10, 2)
) PARTITION BY RANGE (YEAR(sale_date)) (PARTITION p0 VALUES LESS THAN (2000),PARTITION p1 VALUES LESS THAN (2010),PARTITION p2 VALUES LESS THAN (2020),PARTITION p3 VALUES LESS THAN MAXVALUE
);-- 插入一些數據
INSERT INTO sales VALUES
(1, '1999-05-15', 100.50),
(2, '2005-08-20', 150.75),
(3, '2015-03-10', 200.30),
(4, '2022-02-01', 120.90);
這個表分區是什么意思呢?
sale_date字段對應的是時間,將時間分成四檔,每個時間關聯的那一條數據一起被劃分
2.2 查看表分區
查詢表分區定義
SELECT * FROM information_schema.partitions WHERE table_name = 'sales';
只需關注PARTITION_NAME 和 PARTITION_DESCRIPTION 字段即可,可以看到,p0分區是2000檔,p1是2010檔
2.3 查看指定分區數據
查看 p0 分區的數據
SELECT * FROM sales PARTITION (p0);