日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Hologres是一款高性能的、計(jì)算存儲(chǔ)分離的分布式一站式實(shí)時(shí)數(shù)倉(cāng)引擎,數(shù)據(jù)存儲(chǔ)在位于底層存儲(chǔ)系統(tǒng)的數(shù)據(jù)分片(又稱(chēng)Shard)上。本文為您介紹Hologres中Table Group和Shard Count的概念。

Table Group和Shard

在Hologres中數(shù)據(jù)存儲(chǔ)在Pangu系統(tǒng)上,Shard表示數(shù)據(jù)分片,Table Group則是用于管理這些Shard,類(lèi)似于存儲(chǔ)邏輯概念。一個(gè)表的數(shù)據(jù)將會(huì)存儲(chǔ)在固定的一組Shard上,數(shù)據(jù)寫(xiě)入時(shí)會(huì)按照Distribution Key將數(shù)據(jù)分發(fā)到具體的Shard上。從創(chuàng)建表開(kāi)始,負(fù)責(zé)存儲(chǔ)表數(shù)據(jù)的這一組Shard就已經(jīng)分配好了,Table Group則負(fù)責(zé)管理這一組Shard。

Table Group是Hologres特有的一個(gè)存儲(chǔ)邏輯概念(PostgreSQL無(wú)此概念)。Table Group與PostgreSQL中的TABLESPACE是不一樣的:TABLESPACE唯一標(biāo)識(shí)了數(shù)據(jù)庫(kù)對(duì)象的存儲(chǔ)位置,類(lèi)似一個(gè)目錄的概念。而Table Group代表的是底層的邏輯Shard組。

Table Group布局圖如下:tg布局圖通過(guò)Table Group布局圖,可以看出:

  • Table Group與Schema的區(qū)別

    Schema是一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)概念,而Table Group是一個(gè)邏輯存儲(chǔ)概念,并非數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)。不同Schema下的表可以位于同一個(gè)Table Group,即底層使用同一組Shard存儲(chǔ)。

  • Table Group與數(shù)據(jù)庫(kù)(DB)的關(guān)系

    一個(gè)DB可以包含一個(gè)或者多個(gè)Table Group,但是一個(gè)DB只能有一個(gè)默認(rèn)Table Group。在創(chuàng)建DB之后,系統(tǒng)會(huì)創(chuàng)建一個(gè)默認(rèn)Table Group,可以根據(jù)業(yè)務(wù)情況增加Table Group或者修改默認(rèn)Table Group。

  • 不同Table Group的區(qū)別

    一個(gè)DB可以存在多個(gè)Table Group,但Table Group之間的Shard互不相交,每個(gè)Shard在實(shí)例級(jí)別擁有單獨(dú)的編號(hào)。

  • Shard Count

    一個(gè)Table Group中Shard的數(shù)量稱(chēng)為Shard Count。Shard Count在創(chuàng)建Table Group時(shí)指定,所以Table Group一旦建立,Shard Count就不能調(diào)整,如需調(diào)整Shard Count,需要重新創(chuàng)建Table Group并指定Shard數(shù)。

  • Shard與Table的關(guān)系

    • Shard負(fù)責(zé)表數(shù)據(jù)的存儲(chǔ)和查詢(xún),系統(tǒng)根據(jù)Distribution Key決定表數(shù)據(jù)分布在哪些Shard,如果沒(méi)有設(shè)置Distribution Key,那么數(shù)據(jù)就會(huì)被隨機(jī)分配到各個(gè)Shard。

    • 一個(gè)Table Group中可以有多個(gè)Table,即多個(gè)Table可以分布在同一組Shard上。但是一個(gè)Table只能屬于一個(gè)Table Group,如果Table Group中沒(méi)有Table,那么Table Group會(huì)被系統(tǒng)自動(dòng)刪除。

    • 如果Table的數(shù)據(jù)要從一個(gè)Table Group遷移至另外一個(gè)Table Group,那么需要重新建表指定Table Group,或者通過(guò)遷移函數(shù)將數(shù)據(jù)進(jìn)行遷移。

Shard與計(jì)算節(jié)點(diǎn)Worker的關(guān)系

在Hologres中存儲(chǔ)引擎Storage Engine(SE)主要負(fù)責(zé)管理和處理數(shù)據(jù),在DML的功能上,SE提供了單條或者批量的創(chuàng)建、查詢(xún)、更新、和刪除(CRUD操作)訪(fǎng)問(wèn)方法的接口,查詢(xún)引擎(QE)可以通過(guò)這些接口訪(fǎng)問(wèn)Shard上的數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)的高性能寫(xiě)入或者讀取。

計(jì)算節(jié)點(diǎn)Worker、SE、Shard的布局關(guān)系圖如下。布局關(guān)系圖從圖中可以看出Table Group和Shard不僅與數(shù)據(jù)的存儲(chǔ)分布有關(guān)系,還與計(jì)算Worker有一定的關(guān)系:

  • 當(dāng)創(chuàng)建Table Group并設(shè)置Shard數(shù)后(如果沒(méi)有顯式設(shè)置Table Group和Shard數(shù),那么Hologres會(huì)在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)創(chuàng)建一個(gè)默認(rèn)Table Group并為其設(shè)置默認(rèn)的Shard Count,詳情請(qǐng)參見(jiàn)實(shí)例規(guī)格概述),每個(gè)計(jì)算節(jié)點(diǎn)Worker會(huì)在內(nèi)部創(chuàng)建多個(gè)SE,一個(gè)SE負(fù)責(zé)一個(gè)Shard數(shù)據(jù)的讀取和寫(xiě)入。

  • 系統(tǒng)機(jī)制會(huì)盡量保證每個(gè)Worker中的SE數(shù)量均勻,這樣能夠讓W(xué)orker計(jì)算資源均勻分配。

  • 系統(tǒng)會(huì)保證一個(gè)Table Group內(nèi)的Shard一定是分配給多個(gè)Worker,不會(huì)出現(xiàn)一個(gè)Table Group僅對(duì)應(yīng)一個(gè)Worker,其余Worker空置的情況。但如果Table Group的Shard數(shù)較少,但是實(shí)例規(guī)格較大即Worker較多,則會(huì)導(dǎo)致某些Worker無(wú)法分配Shard,導(dǎo)致某些Worker空置,因此在設(shè)計(jì)Shard數(shù)時(shí)一定要充分考慮業(yè)務(wù)情況,確保Worker的個(gè)數(shù)與實(shí)例總的Shard數(shù)有一定的均衡關(guān)系。

    從上圖中能很容易看出一個(gè)問(wèn)題:假如Table Group的Shard數(shù)與Worker個(gè)數(shù)不成比例關(guān)系(如上圖Table Group 1有3個(gè)Shard,但是只有2個(gè)Worker),那么就一定會(huì)存在某個(gè)Worker比其他Worker多分配一個(gè)SE給Table Group的情況,這樣在計(jì)算時(shí),就非常容易造成Worker資源傾斜,容易出現(xiàn)計(jì)算長(zhǎng)尾。因此我們建議若是要修改Shard Count,建議Shard Count與計(jì)算Worker成一定的比例關(guān)系。如下圖所示Table Group 1Table Group 2的Shard數(shù)都與Worker個(gè)數(shù)存在倍數(shù)關(guān)系,計(jì)算資源能夠均勻的分配。均勻分配示意圖

    在實(shí)際業(yè)務(wù)中,可能會(huì)存在某個(gè)Worker因?yàn)镺OM等原因出現(xiàn)Failover的情況,那么該Worker對(duì)應(yīng)的Shard將會(huì)在Worker Failover之后自動(dòng)掛載在其他Worker上,系統(tǒng)會(huì)保證每個(gè)Worker新分配的Shard均勻。如下示例,實(shí)例一共有4個(gè)Worker,2個(gè)Table Group共8個(gè)Shard,其中每個(gè)Worker有2個(gè)SE均勻?qū)?yīng)Shard,當(dāng)Worker 4Failover后,假設(shè)Worker 4對(duì)應(yīng)Shard 7Shard 8,那么Shard 7Shard 8就會(huì)被快速分配給其他3個(gè)Worker,因?yàn)橹挥?個(gè)Shard,所以系統(tǒng)會(huì)隨機(jī)選擇2個(gè)Worker進(jìn)行分配,盡量保證Worker的SE數(shù)量均勻。示例

總結(jié)

Worker數(shù)量與Shard數(shù)有著非常緊密的聯(lián)系。合理的設(shè)置Table Group與Shard Count,其數(shù)據(jù)寫(xiě)入和查詢(xún)分析處理可以得到更大的并行度,將計(jì)算資源充分使用,從而從根本上提高數(shù)據(jù)的存儲(chǔ)與計(jì)算效率。反之如果Table Group和Shard數(shù)制定不當(dāng),很容易出現(xiàn)性能不如預(yù)期的情況,且無(wú)法從根本上調(diào)優(yōu)到最佳性能:

  • 一定范圍內(nèi)Shard數(shù)多的Table Group,其數(shù)據(jù)寫(xiě)入和查詢(xún)分析處理可以得到更大的并行度。但Shard數(shù)也并非越多越好,更多的Shard數(shù)需要更多的節(jié)點(diǎn)間通信資源、計(jì)算資源以及內(nèi)存資源,在資源不滿(mǎn)足的時(shí)候,或者Query很小時(shí)可能會(huì)導(dǎo)致適得其反的效果。

  • Shard數(shù)下限是1,在數(shù)據(jù)量只有幾百幾千條等很小的情況下,可以設(shè)置Shard數(shù)為1。一個(gè)Table Group上,Shard數(shù)的上限建議是實(shí)例的總計(jì)算Core數(shù),這樣是為了保證每個(gè)Shard在計(jì)算時(shí),至少可以占據(jù)1個(gè)Core用于計(jì)算。如果Shard數(shù)超過(guò)計(jì)算Core數(shù),那么運(yùn)行查詢(xún)時(shí),將有部分Shard無(wú)法一直分到CPU資源,可能帶來(lái)長(zhǎng)尾和切換開(kāi)銷(xiāo)。

  • 除Shard數(shù)量外,Table Group本身的數(shù)量也不是越多越好。每個(gè)Shard無(wú)論是否正在使用,都會(huì)占據(jù)一定的內(nèi)存空間,用于存放表元數(shù)據(jù)、Schema等信息,在表有寫(xiě)入時(shí)則會(huì)占據(jù)更多內(nèi)存空間。因此如果Table Group越多,則實(shí)例內(nèi)總Shard數(shù)越多,內(nèi)存空間占用越大。另外多個(gè)表之間有一些特殊的關(guān)系(例如需要Local Join)時(shí),這些表必須要處在同一Table Group下才行。

  • 從磁盤(pán)上來(lái)看,Shard數(shù)越多,對(duì)于同樣的一張表,數(shù)據(jù)會(huì)分的越散,越容易出現(xiàn)小文件,從而文件個(gè)數(shù)更多。如果表多并且Shard也多,那文件數(shù)量就會(huì)非常龐大。在查詢(xún)時(shí)Failover時(shí)都需要更多的開(kāi)銷(xiāo),造成查詢(xún)I/O增多,恢復(fù)時(shí)間變長(zhǎng)。