日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL时间序列分表分区_干货丨时序数据库分区教程

發布時間:2024/1/8 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL时间序列分表分区_干货丨时序数据库分区教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.為什么對數據進行分區?

對數據庫進行分區可以極大的降低系統響應延遲同時提高數據吞吐量。具體來說,分區有以下幾個好處:

分區使得大型表更易于管理。對數據子集的維護操作也更加高效,因為這些操作只針對需要的數據而不是整個表。一個好的分區策略將通過只讀取滿足查詢所需的相關數據來減少要掃描的數據量。當所有的數據都在同一個分區上,對數據庫的查詢,計算,以及其它操作都會被限制在磁盤訪問IO這個瓶頸上。

分區使得系統可以充分利用所有資源。一個良好的分區方案搭配并行計算,分布式計算就可以充分利用所有節點來完成通常要在一個節點上完成的任務。 當一個任務可以拆分成幾個分散的子任務,每個子任務訪問不同的分區,就可以達到提升效率的目的。

分區增加了系統的可用性。由于分區的副本通常是存放在不同的物理節點的。所以一旦某個分區不可用,系統依然可以調用其它副本分區來保證作業的正常運轉。

2.分區方式

DolphinDB?database支持多種分區方式: 范圍分區(RANGE),哈希分區(HASH),值分區(VALUE),列表分區(LIST),復合分區(COMPO)。

范圍分區每個區間創建一個分區,是最常用的也是推薦的一種分區方式。可以把數值在一個區間內的所有記錄放置到一個分區。

哈希分區利用哈希函數對分區列操作,方便建立指定數量的分區。

值分區每個值創建一個分區,例如股票交易日期,股票交易月。

列表分區是根據用戶枚舉的列表來進行分區,比值分區更加靈活。

復合分區適用于數據量特別大而且查詢經常涉及兩個或以上的分區列。每個分區選擇都可以采用區間,值或列表分區。例如按股票交易日期進行值分區, 同時按股票代碼進行范圍分區。

我們可以使用

database函數創建數據庫。

語法:

database(directory, [partitionType], [partitionScheme], [locations])

參數

directory:數據庫保存的目錄。DolphinDB有三種類型的數據庫,分別是內存數據庫、磁盤上的數據庫和分布式文件系統上的數據庫。創建內存數據庫,directory為空;創建本地數據庫,directory應該是本地文件系統目錄;創建分布式文件系統上的數據庫,directory應該以“dfs://”開頭。本教程以創建Windows本地數據庫為例。

partitionType:分區方式,有5種方式: 范圍分區(RANGE),哈希分區(HASH),值分區(VALUE),列表分區(LIST),復合分區(COMPO)。

partitionScheme:分區方案。各種分區方式對應的分區方案如下:

locations:指定每個分區所在的節點位置。如果是分布式文件系統的數據庫或者復合分區(COMPO)類型的數據庫,不能使用locations參數。

2.1 范圍分區

范圍分區是由分區向量決定。分區向量表示區間,包含起始值,不包含結尾值。

在下面的例子中,數據庫db有兩個分區:[0,5)和[5,10)。使用函數append!在數據庫db中保存表t為分區表pt,并使用ID作為分區列。

n=1000000

ID=rand(10,?n)

x=rand(1.0,?n)

t=table(ID,?x)

db=database("dfs://rangedb",?RANGE,??0?5?10)

pt?=?db.createPartitionedTable(t,?`pt,?`ID)

pt.append!(t);

pt=loadTable(db,`pt)

select?count(x)?from?pt

2.2 哈希分區

哈希分區對分區列使用哈希函數以產生分區。哈希分區是產生指定數量的分區的一個簡便方法。但是要注意,哈希分區不能保證分區的大小一致,尤其當分區列的值的分布存在偏態的時候。此外,若要查找分區列上一個連續區域的數據時,哈希分區的效率比區域分區或值分區要低。

在下面的例子中,數據庫db有兩個分區。使用函數append!在數據庫db中保存表t為分區表pt,并使用ID作為分區列。

n=1000000

ID=rand(10,?n)

x=rand(1.0,?n)

t=table(ID,?x)

db=database("dfs://hashdb",?HASH,??[INT,?2])

pt?=?db.createPartitionedTable(t,?`pt,?`ID)

pt.append!(t);

pt=loadTable(db,`pt)

select?count(x)?from?pt

2.3 值分區

值分區用一個值代表一個分區。下面的例子定義了204個分區。每個分區表示2000年1月到2016年12月之間的一個月。

n=1000000

month=take(2000.01M..2016.12M,?n)

x=rand(1.0,?n)

t=table(month,?x)

db=database("dfs://valuedb",?VALUE,?2000.01M..2016.12M)

pt?=?db.createPartitionedTable(t,?`pt,?`month)

pt.append!(t)

pt=loadTable(db,`pt)

select?count(x)?from?pt

2.4 列表分區

在列表(LIST)分區中,我們用一個包含多個元素的列表代表一個分區。下面的例子有兩個分區,第一個分區包含3個股票代碼,第二個分區包含2個股票代碼。

n=1000000

ticker?=?rand(`MSFT`GOOG`FB`ORCL`IBM,n);

x=rand(1.0,?n)

t=table(ticker,?x)

db=database("dfs://listdb",?LIST,?[`IBM`ORCL`MSFT,?`GOOG`FB])

pt?=?db.createPartitionedTable(t,?`pt,?`ticker)

pt.append!(t)

pt=loadTable(db,`pt)

select?count(x)?from?pt

2.5 組合分區

組合(COMPO)分區可以定義2或3個分區列。每列可以獨立采用范圍(RANGE),值(VALUE)或列表(LIST)分區。組合分區的多個列在邏輯上是并列的,不存在從屬關系或優先級關系。

n=1000000

ID=rand(100,?n)

dates=2017.08.07..2017.08.11

date=rand(dates,?n)

x=rand(10.0,?n)

t=table(ID,?date,?x)

dbDate?=?database(,?VALUE,?2017.08.07..2017.08.11)

dbID=database(,?RANGE,?0?50?100)

db?=?database("dfs://compoDB",?COMPO,?[dbDate,?dbID])

pt?=?db.createPartitionedTable(t,?`pt,?`date`ID)

pt.append!(t)

pt=loadTable(db,`pt)

select?count(x)?from?pt

上面的例子創建了5個值分區。

在20170807這個分區,有2個范圍分區。

總結

以上是生活随笔為你收集整理的MySQL时间序列分表分区_干货丨时序数据库分区教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。