第六十二章 Caché 函數大全 $SORTBEGIN 函數 第六十二章 Caché 函數大全 $SORTBEGIN 函數 大綱 描述

第六十二章 Caché 函數大全 $SORTBEGIN 函數

啓動排序模式以提高全局變量多個集合的性能。

大綱

$SORTBEGIN(set_global)

參數

  • set_global 全局變量名稱。

描述

$SORTBEGIN會啓動一種特殊的排序模式,在該模式下,對指定目標全局的SET操作將被重定向到進程專用的臨時區域,並被分類爲子集。該模式以對$SORTEND的調用結束,該調用將數據複製到目標全局引用中。當特殊排序模式生效時,目標全局參考的所有集合及其任何後代都將受到影響。

$SORTBEGIN旨在幫助執行操作,例如建立索引,在該操作中需要將大量無序數據寫入全局。當寫入的數據量接近或超過可用緩衝池內存量時,性能可能會受到極大影響。 $SORTBEGIN通過保證將數據按順序寫入目標全局來解決此問題,從而最大程度地減少了所需的物理磁盤訪問次數。它通過將數據寫入並排序到一個或多個臨時緩衝區(如果需要,使用^CacheTemp全局空間)來完成此操作,然後在調用$SORTEND時,將數據順序複製到目標全局中。

$SORTBEGIN有效時,從目標全局讀取的數據將不會反映任何SET操作。如果需要從插入值的同一全局中讀取全局值,則不能使用$SORTBEGIN

Caché對象和CachéSQL應用程序自動使用$SORTBEGIN進行索引和臨時索引的創建。

通過調用$SORTEND並將其可選的第二個參數設置爲0,可以終止$SORTBEGIN排序模式,而無需將數據寫入目標全局變量。

如果成功,$SORTBEGIN返回一個非零的整數值。如果不成功,則$SORTBEGIN返回零。

排序模式錯誤

$SORTBEGIN$SORTEND之間調用某些操作會導致Caché發出錯誤代碼:

  • 如果在$SORTBEGIN$SORTEND之間更改了set_global命名空間的映射,則在調用$SORTEND時會發生錯誤。但是,如果$SORTBEGIN使用隱式名稱空間指定set_global,則後續名稱空間映射更改對$SORTEND無效。具有隱式名稱空間的全局引用和具有顯式名稱空間的全局引用不應在同一排序操作中混合使用。
  • 如果建立全局$SORTBEGIN,然後爲該全局的祖先或後代發出$SORTBEGIN,則Caché會發出<DUPLICATEARG>錯誤。例如,如果調用$SORTBEGIN(^test(1,2,3)),則以下函數調用將導致<DUPLICATEARG>錯誤:$SORTBEGIN(^test(1,2))$SORTBEGIN(^test(1,2,3,4))
/// d ##class(PHA.TEST.Function).SORTBEGINTEST()
ClassMethod SORTBEGINTEST()
{
    s t1 = $p($zts,",",2)
    
    WRITE "begin:" _ $SORTBEGIN(^mytesta),!
    for i = 1 : 1 : 10000000{
        s ^mytesta(i)=i
    }
    s t2 = $p($zts,",",2)
    w "end:" _ $SORTEND(^mytesta,1),!
    w t2-t1,!
    
    k ^mytesta
    
    
    
    s t3 = $p($zts,",",2)
    for i = 1 : 1 : 10000000{
        s ^mytesta(i)=i
    }
    s t4 = $p($zts,",",2)
    w t4-t3,!
    
    k ^mytesta
}
DHC-APP>d ##class(PHA.TEST.Function).SORTBEGINTEST()
begin:1
end:10000000
1.63
2.374
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章