System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本申請屬于數據排序的,尤其涉及一種基于階梯式計算的數據重排方法、系統、設備及介質。
技術介紹
1、數據重排指的是在計算機科學中對數據進行重新排列的過程,其應用場景很多,譬如新聞文章往往需要把某一些重要文章排到靠前的指定位置,這就需要對文章做排序位置移動,也即文章數據的重排。在系統龐大復雜的情況下,每次被重排影響的數據可能數以百萬、千萬計,對重排效率和方案的調整提出了新的要求。
2、現有技術中關于數據重排的技術方案往往根據實際業務的特性,降級接受某方面的特性,無法同時兼顧實現高效高適用高調整的重排方案?,F通過引入一個案例以輔助理解現有技術中有關數據重排的技術方案,案例內容如下:
3、某新聞站點下有10萬篇新聞文章,這些文章數據都存于mysql數據庫,文章的數據id從1到100000自增存儲。默認情況下,id越大的文章表示內容越新鮮,在文章列表的排序越靠前。
4、現將id為10的數據記為a(此時該數據位于文章列表從后往前數的第10個位置),并且將其移動到文章列表從前往后數的第5個位置,即a要插入原排序的位置4(記此數據為b)和位置5(記此數據為c)之間,此時原位置5的數據順延到位置6,原位置6的數據順延到位置7,以此類推。
5、上述案例的10萬個數據中,排序位置沒有發生變化的只有c前面的4個數據以及a后面的9個數據,即僅有13個數據的位置不發生變化。
6、基于上述案例,現有技術中在如何實現數據重排的技術問題上,通常會有以下三種技術方案:
7、方案一:全量重排;本
8、方案二:利用排序值的數據精度,取相鄰排序值的中值實現重排;與方案一類似,該方案也會設置sort_field字段并初始化,然后通過修改sort_field的大小實現數據重排,區別是sort_field字段會使用精度數據類型表示,先假設數據精度為4。當需要把a重排到bc之間時,先取bc排序值的中值,中值為(4+5)/2=4.5,也即把a的排序值sort_field設置為4.5,這樣即可實現a插入到bc之間,實現數據重排。這種方法看起來簡單高效,實際上適用性不高,因為不斷取數據中值會導致可選的排序值很快用盡。如當數據精度為4時,bc之間可選的排序值為4.0000至5.0000,約為1萬個數值,取一次后ba之間可選的排序值為4.0000至4.5000,約為5000個數值,繼續往ba之間插入數據x時,同理bx之間可選的排序值為4.0000至4.2500,約為2500個數值。以此類推,當數據精度為4時,最多可以不斷往同一個目標位置插入14個數據;數據精度為5時,最多可以不斷往同一個目標位置插入17個數據。
9、假設數據精度為d,則往同一個目標位置插入排序值的個數上限為log2n向上取整,其中2為對數底數,n為10的d次方。而mysql中數據精度最大為30,即d的最大值為30,則按log2n向上取整可得,可選的排序值個數上限為100。本方案中,30位的數據精度明顯影響數據操作效率,且同一個目標位置只能提供100個可用排序值,由此排序值利用率較低,且排序值稀疏,進而導致此重排方法的適用性較低。
10、方案三:組合使用多個排序字段;本方案為解決方案三的缺點,引入多個排序字段sort_field1、sort_field2、sort_field3,假設排序字段的數據精度為12,即d=12,按方案二所述,單排序字段時,同一個目標位置有40個可用排序值,3個排序字段時可用排序值是疊加關系,所以同一個目標位置有40*3=120個可用排序值,適用性不高。如果將三個排序字段的數據精度都增大到最大值30,則可用排序值是100*3=300,適用性高于方案二,但是3個精度為30的排序字段對數據存儲和操作而言均存在負擔,此外,在獲取數據時,多字段的排序查詢效率較低。
11、綜上所述,現有技術的方案在數據重排時的高效性、適用性、調整性難以共存。
技術實現思路
1、本申請實施例提供了一種基于階梯式計算的數據重排方法,可以解決現有技術的方案在數據重排時的高效性、適用性、調整性難以共存問題。
2、第一方面,本申請實施例提供了一種基于階梯式計算的數據重排方法,包括:
3、建立數據表,在數據表中設置排序值字段,所述數據表中的數據為待重排數據;
4、確定階梯長度l和階梯粒度g的數值,其中,所述階梯長度為排序值字段的數據精度,所述階梯粒度用于將所述階梯長度平均劃分為多個單階梯;
5、初始化待重排數據的排序值字段的數值,其中,所述排序值字段的整數位的初始值為所述待重排數據插入所述數據表時的id值,所述排序值字段的小數位的初始值為0;
6、在調整數據表中待重排數據的排序關系時,判斷數據表中是否存在整數位數值相同的待重排數據;
7、若不存在整數位數值相同的待重排數據,則重排所述待重排數據的整數位;
8、若存在整數位數值相同的待重排數據,針對整數位數值相同的待重排數據,在每個單階梯內依次進行局部全量重排;
9、在數據重排過程中,若所述階梯長度排盡,則擴展所述階梯長度的數值;
10、在數據重排過程中,通過比較數據表中待重排數據的數量與預設可選排序值,調整所述階梯粒度,其中,預設可選排序值為在階梯長度l下可進行數據重排的最大數據量。
11、第二方面,本申請實施例提供了一種基于階梯式計算的數據重排系統,所述系統包括:
12、數據表建立模塊:用于建立數據表,在數據表中設置排序值字段,所述數據表中的數據為待重排數據;
13、數值確定模塊:用于確定階梯長度l和階梯粒度g的數值,其中,所述階梯長度為排序值字段的數據精度,所述階梯粒度用于將所述階梯長度平均劃分為多個單階梯;
14、數據初始化模塊:用于初始化待重排數據的排序值字段的數值,其中,所述排序值字段的整數位的初始值為所述待重排數據插入所述數據表時的id值,所述排序值字段的小數位的初始值為0;
15、判斷模塊:用于在調整數據表中待重排數據的排序關系時,判斷數據表中是否存在整數位數值相同的待重排數據;
16、整位數重排模塊:用于若不存在整數位數值相同的待重排數據,則重排所述待重排數據的整數位;
17、小數位重排模塊:用于若存在整數位數值相同的待重排數據,針對整數位數值相同的待重排數據,在每個單階梯內依次進行局本文檔來自技高網...
【技術保護點】
1.一種基于階梯式計算的數據重排方法,其特征在于,所述方法包括:
2.如權利要求1所述的方法,其特征在于,在所述重排所述待重排數據的整數位之后,包括:
3.如權利要求1所述的方法,其特征在于,所述針對整數位數值相同的待重排數據,在每個單階梯內依次進行局部全量重排,包括:
4.如權利要求3所述的方法,其特征在于,所述方法還包括:所述階梯長度排盡時,i=(L/G)-1,且所述第i+1個單階梯的可選排序值排盡。
5.如權利要求3所述的方法,其特征在于:所述方法還包括:
6.如權利要求5所述的方法,其特征在于,所述在每個單階梯內以最小的可選排序值為基礎對所述待重排數據進行局部全量重排,以使所述階梯長度快速排盡,包括:不斷往兩個排序值字段之間差值最小的位置插入數據,直至所述階梯長度排盡。
7.如權利要求5所述的方法,其特征在于,所述計算預設可選排序值包括:計算每個單階梯內的最大可選排序值的總和,其中,所述計算預設可選排序值的計算公式:S=(10G-1)+(10G-1)2+(10G-1)3+...+(10G-1)(L/G
8.一種基于階梯式計算的數據重排系統,其特征在于,所述系統包括:
9.一種終端設備,包括:存儲器和處理器及存儲在存儲器上的計算機程序,當所述計算機程序在處理器上被執行時,實現如權利要求1至7任一項所述的基于階梯式計算的數據重排方法。
10.一種計算機可讀存儲介質,所述計算機可讀存儲介質存儲有計算機程序,其特征在于,所述計算機程序被處理器執行時實現如權利要求1至7任一項所述的方法。
...【技術特征摘要】
1.一種基于階梯式計算的數據重排方法,其特征在于,所述方法包括:
2.如權利要求1所述的方法,其特征在于,在所述重排所述待重排數據的整數位之后,包括:
3.如權利要求1所述的方法,其特征在于,所述針對整數位數值相同的待重排數據,在每個單階梯內依次進行局部全量重排,包括:
4.如權利要求3所述的方法,其特征在于,所述方法還包括:所述階梯長度排盡時,i=(l/g)-1,且所述第i+1個單階梯的可選排序值排盡。
5.如權利要求3所述的方法,其特征在于:所述方法還包括:
6.如權利要求5所述的方法,其特征在于,所述在每個單階梯內以最小的可選排序值為基礎對所述待重排數據進行局部全量重排,以使所述階梯長度快速排盡,包括:不斷往兩個排序值字段之間差值最小的...
【專利技術屬性】
技術研發人員:楊件,陳興才,梁翊天,
申請(專利權)人:廣東南方網絡信息科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。