<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 56.3\. 實現 本節討論實現細節和其他對SP-GiST操作符類的實現者有用的技巧。 ## 56.3.1\. SP-GiST的限制 單個的葉元組和內部元組必須容納在一個索引頁(默認8KB)里。 因此,當索引可變長數據類型的值時,長值只能被像基數樹這樣的方法支持,在樹的每一層包含一個前綴,這個前綴足夠短,可容納在一個頁面上,并且最后的葉子層級包括的后綴也足夠短以容納在一個頁面上。 操作符類只有準備好了處理這樣的事情,才應該設置`longValuesOK`為TRUE。 否則,SP-GiST核心將拒絕一個太大以致不能裝入一個頁面的數據值的索引請求。 同樣,不要讓內部元組增長得過大以致不能容納在一個索引頁面,這也是操作符類的責任;這限制了在一個內部元組里可以使用的子節點的數量,以及一個前綴值的最大大小。 另一個限制是,當一個內部元組的節點指向一組葉元組,這些元組必須都在相同的索引頁面上。 (這個設計決定是為了減少尋址以及節省把這些元組聯接在一起的鏈接的空間)。 如果葉元組的集合增大到超過一個頁面,就會執行分裂并插入一個中間的內部元組。 為了解決這個問題,新內部元組_必須_把葉子中的值的集合劃分到多個節點組。 如果操作符類的`picksplit`函數未能這樣做,SP-GiST 將會采取[Section 56.3.3](#calibre_link-553)中描述的非常手段。 ## 56.3.2\. 沒有節點標簽的SP-GiST 一些樹算法在每個內部元組中使用固定數量的節點; 例如,在四叉樹中總是正好的有4個節點,它們代表圍繞內部元組的中心點的四個象限。 在這種情況下代碼典型的通過數值和節點打交道,沒有必要有顯式的節點標簽。 為了廢止節點標簽(從而節省一些空間),`picksplit`函數可以為`nodeLabels`數組返回NULL。 結果這將導致隨后調用`choose`和`inner_consistent`函數時,`nodeLabels`為NULL。 原則上,節點標簽可用于一些內部元組,而在相同索引的其它元組上省略。 當使用一個包含無標簽節點的內部元組時,`choose`函數返回`spgAddNode`是錯誤的, 因為在這種情況下,節點的集合被假定為固定的。 同樣也沒有在`spgSplitTuple`動作中產生無標簽節點的條款,因為預計將需要一個`spgAddNode`動作。 ## 56.3.3\. "All-the-same"內部元組 如果操作符類的`picksplit`函數不能把提供的葉子值劃分到至少兩個分類中, SP-GiST核心可以覆蓋`picksplit`函數的結果。 如果發生了這種事情,包含多個節點的新的內部元組會被創建。 每個節點的標簽都和`picksplit`給一個節點使用的標簽相同(如果有的話),并且葉值被隨機劃分到這些等價節點中。 `allTheSame`標志會被設置到這個內部元組上,以警告`choose` 和 `inner_consistent`函數這個元組可能沒有它們期望的節點集合。 當處理一個`allTheSame`元組,`choose`的結果`spgMatchNode` 被解釋為新的值可以被分配到任何等價節點;核心代碼將忽略提供的`nodeN`值并隨機的進入其中一個節點(以保持樹的平衡)。 `choose`返回`spgAddNode`是錯誤的,因為將使這些節點不再是所有都等價。 如果要插入的值不匹配現有的節點,必須使用`spgSplitTuple`動作。 當處理一個`allTheSame`元組,`inner_consistent`函數應該返回所有或沒有一個節點作為繼續索引搜索的目標,因為他們都是等價的。 這可能需要也可能不需要任何特殊的代碼,這取決于`inner_consistent`函數通常假設了多少節點的含義。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看