国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      數(shù)據(jù)庫(kù)內(nèi)的分片隊(duì)列的制作方法_5

      文檔序號(hào):9635174閱讀:來(lái)源:國(guó)知局
      的分區(qū)的列表。在上面的SELECT查詢的結(jié)果被迭代時(shí),分區(qū)名稱的批次被構(gòu)造,并且在每次提取之后進(jìn)行更新,以便取消分區(qū)的映射,即取消分區(qū)記錄的shard、pr1rity、subshard和map_time列的標(biāo)記。
      [0213]當(dāng)在迭代期間達(dá)到批量大小時(shí),所構(gòu)造的分區(qū)列表被傳遞到截?cái)嗪瘮?shù),以便在自治事務(wù)中進(jìn)行批量截?cái)唷H绻厦娴牟樵冊(cè)谶@個(gè)批次之后提取出另外的行,則再次構(gòu)造下一個(gè)列表,并且類似地批量截?cái)唷?br>[0214]取消隊(duì)列表分區(qū)的映射
      [0215]如上面所提到的那樣,對(duì)SELECT查詢的每次提取進(jìn)行更新,以便取消分區(qū)的映射,即取消分區(qū)記錄的shard、pr1rity、subshard和map_time列的標(biāo)記。在SELECT提取全局最小LWM以下的所有行/分區(qū)并且全部被截?cái)鄷r(shí),將提交取消分區(qū)記錄的映射的更新語(yǔ)句的提交被發(fā)布。用自治事務(wù)立即提交每個(gè)截?cái)郉DL。
      [0216]重用隊(duì)列表分區(qū)
      [0217]—旦分區(qū)被取消映射,它們就滿足從字典加載空閑分區(qū)以重新填充預(yù)取高速緩存的SQL查詢的條件。對(duì)于下一個(gè)預(yù)取重新填充查詢,通過(guò)使用ORDER BY分區(qū)被挑選并且被放到預(yù)取高速緩存的頭部,使得它們可以被重用。
      [0218]通過(guò)使用ORDER BY并且被放到高速緩存的消費(fèi)端,使得分區(qū)可用于快速重用,因此,為了最近使用的資源的訪問(wèn)局部性、高速緩存蹤跡等等,可以使用可能的最小數(shù)量的不同分區(qū)來(lái)服務(wù)隊(duì)列。
      [0219]出隊(duì)日志分區(qū)的重用的概述
      [0220]根據(jù)一個(gè)實(shí)施例,出隊(duì)日志表包括許可對(duì)出隊(duì)日志分區(qū)的串行重用的VERS1N列,而不需要在出隊(duì)日志分區(qū)每次被重用時(shí)對(duì)出隊(duì)日志分區(qū)的SQL TRUNCATE或SQLUPDATEο
      [0221]具體地,當(dāng)創(chuàng)建出隊(duì)日志分區(qū)時(shí),“0”被存儲(chǔ)在分區(qū)中每一行的VERS1N列中。此夕卜,元數(shù)據(jù)被存儲(chǔ)在數(shù)據(jù)字典中,以指示“1”是此分區(qū)的當(dāng)前版本。出隊(duì)日志分區(qū)每次被重用時(shí),出隊(duì)日志分區(qū)的版本號(hào)在數(shù)據(jù)字典中被更新。因此,當(dāng)出隊(duì)日志分區(qū)第一次被重用時(shí),版本號(hào)將被更新為“2”,并且當(dāng)?shù)诙伪恢赜脮r(shí),版本號(hào)將被更新為“3”。
      [0222]在其VERS1N列小于數(shù)據(jù)字典中針對(duì)出隊(duì)日志分區(qū)識(shí)別出的版本的那個(gè)出隊(duì)日志分區(qū)內(nèi)的任何行都被視為空。因此,如果出隊(duì)日志分區(qū)具有5行,并且那些行的VERS1N列分別包含值2、2、1、0、2,并且出隊(duì)日志分區(qū)的當(dāng)前版本是“2”,則出隊(duì)日志分區(qū)內(nèi)的第三行和第四行被視為空。
      [0223]當(dāng)出隊(duì)日志分區(qū)不再使用時(shí),維護(hù)在數(shù)據(jù)字典中的、針對(duì)出隊(duì)日志分區(qū)的當(dāng)前版本號(hào)增加1。有效地增加當(dāng)前版本使當(dāng)前在出隊(duì)日志分區(qū)中的所有行失效。
      [0224]因?yàn)楫?dāng)前版本號(hào)在對(duì)應(yīng)出隊(duì)日志分區(qū)的每次重用時(shí)增加,因此存在版本號(hào)最終將“溢出”的可能性。根據(jù)一個(gè)實(shí)施例,為了防止這種溢出,后臺(tái)進(jìn)程可以使用數(shù)據(jù)庫(kù)事務(wù)(a)將當(dāng)前版本重置為1,并且(b)將分區(qū)內(nèi)的所有行的VERS1N列更新為“0”。
      [0225]出隊(duì)日志分區(qū)的回收/重用
      [0226]如上面所解釋的那樣,出隊(duì)日志分區(qū)的回收/重用與如何回收隊(duì)列表分區(qū)非常不同。具體地,不使用常規(guī)的截?cái)郉DL重用出隊(duì)日志分區(qū)。由于包含所有固定大小的列的固定數(shù)量的相同形狀的記錄,是存儲(chǔ)在出隊(duì)日志分區(qū)中的內(nèi)容,因此出隊(duì)日志被設(shè)計(jì)為在沒(méi)有昂貴的截?cái)郉DL的情況下被重用。
      [0227]針對(duì)每個(gè)訂戶每個(gè)消息,出隊(duì)日志存儲(chǔ)一行。行的子分片大小數(shù)量是可以存儲(chǔ)在出隊(duì)日志分區(qū)中的行的最大數(shù)量。在一個(gè)實(shí)施例中,缺省的子分片大小為2000。針對(duì)每個(gè)消息的一行是以消息的序列號(hào)作為鍵來(lái)記錄的。
      [0228]在分區(qū)創(chuàng)建時(shí),2000個(gè)空行被插入僅僅具有插入的序列號(hào)列的出隊(duì)日志分區(qū)。使用這個(gè)序列號(hào)列,將消息出隊(duì)的會(huì)話不插入出隊(duì)日志記錄,而是更新出隊(duì)日志中現(xiàn)有的空行。對(duì)先前行的這種更新在出隊(duì)日志分區(qū)的后續(xù)重用中被使用,以便在沒(méi)有截?cái)嗟那闆r下重用分區(qū)。
      [0229]出隊(duì)日志分區(qū)預(yù)填充
      [0230]當(dāng)創(chuàng)建出隊(duì)日志分區(qū)時(shí),在相同事務(wù)中,空行被插入此分區(qū)。為了解釋的目的,將假定出隊(duì)日志分區(qū)具有2000行。在此時(shí),只有值0到1999被插入seq_num列。這2000行構(gòu)成針對(duì)出隊(duì)日志信息的占位符,在出隊(duì)期間,出隊(duì)日志信息將被更新到這些行中。不需要之后的插入。[0231 ] 根據(jù)一個(gè)實(shí)施例,關(guān)于出隊(duì)日志僅存在一個(gè)索引,并且此索引在Seq_num列上。由于序列號(hào)在預(yù)填充期間被插入,因此關(guān)于整個(gè)分區(qū)的索引在預(yù)填充期間被創(chuàng)建,這在大多數(shù)情況下在后臺(tái)進(jìn)程中發(fā)生。一旦被創(chuàng)建,這個(gè)索引就不需要在分區(qū)的剩余壽命中被維護(hù),因?yàn)镾eq_num列從不改變。因此,關(guān)于出隊(duì)日志分區(qū)的每次重用,新的出隊(duì)日志記錄被更新到此分區(qū)中,但是索引不需要在前臺(tái)出隊(duì)操作期間被維護(hù)。
      [0232]使用行標(biāo)記的出隊(duì)日志分區(qū)重用
      [0233]根據(jù)一個(gè)實(shí)施例,每個(gè)出隊(duì)日志分區(qū)(在出隊(duì)日志分區(qū)映射表中)的元數(shù)據(jù)記錄具有存儲(chǔ)被稱為分區(qū)的行標(biāo)記的值的列。當(dāng)創(chuàng)建分區(qū)時(shí),此值初始為1。
      [0234]出隊(duì)日志表還具有VERS1N列。存儲(chǔ)在記錄的這個(gè)列中的值指示出隊(duì)日志行是否實(shí)際存在于這個(gè)記錄中。
      [0235]如果出隊(duì)日志分區(qū)的行中的出隊(duì)日志VERS1N列用其元數(shù)據(jù)中的行標(biāo)記值“被標(biāo)記”,則其表示訂戶已經(jīng)將對(duì)應(yīng)的消息出隊(duì)。
      [0236]當(dāng)針對(duì)消息的出隊(duì)日志信息被更新到預(yù)填充的出隊(duì)日志分區(qū)中的記錄時(shí),來(lái)自其元數(shù)據(jù)的此分區(qū)的當(dāng)前行標(biāo)記被存儲(chǔ)到出隊(duì)日志記錄的VERS1N列中。
      [0237]在希望檢查消息是否被訂戶出隊(duì)時(shí),例如,通過(guò)重新加載等等,分區(qū)的行標(biāo)記值從元數(shù)據(jù)中被挑選并且檢查出隊(duì)日志分區(qū)的每一行是否有這個(gè)行標(biāo)記值。如果在行中發(fā)現(xiàn)此行標(biāo)記,則此消息被出隊(duì)(出隊(duì)日志行存在)。
      [0238]當(dāng)出隊(duì)日志分區(qū)可截?cái)鄷r(shí),分區(qū)實(shí)際上沒(méi)有被截?cái)?。行只是保持原樣,但是分區(qū)映射中分區(qū)元數(shù)據(jù)中的行標(biāo)記從其先前的值開(kāi)始增加。行標(biāo)記可以具有若干個(gè)值,以表示針對(duì)訂戶的消息的狀態(tài)。在一個(gè)實(shí)施例中,值從1開(kāi)始,并且針對(duì)分區(qū)的下次重用被增加了 5。
      [0239]分區(qū)中的行可以具有版本值,作為從存儲(chǔ)在出隊(duì)日志分區(qū)映射表中的對(duì)應(yīng)行標(biāo)記的偏移。以下是偏移值:
      [0240].0=出隊(duì)被提交
      [0241].1 =針對(duì)這個(gè)非持久訂戶,這個(gè)消息不合格
      [0242].2 =后臺(tái)進(jìn)程提交了這個(gè)消息
      [0243].3 =消息被回滾并且重試被更新
      [0244].4 =消息達(dá)到最大重試次數(shù)
      [0245].5 =截?cái)鄻?biāo)記偏移:表示下一個(gè)合法行標(biāo)記和版本值的最后偏移版本。這個(gè)偏移表示出隊(duì)日志分區(qū)的重用。
      [0246]當(dāng)可截?cái)嗟姆謪^(qū)被取消映射時(shí),元數(shù)據(jù)中的行標(biāo)記值增加。此分區(qū)中的現(xiàn)有的行幾乎消失,因?yàn)樽x者預(yù)期針對(duì)有效行的行中新增加的行標(biāo)記值。因此,具有較小行標(biāo)記值的所有舊行被解釋為不存在。
      [0247]行標(biāo)記環(huán)繞
      [0248]由于行標(biāo)記在每次截?cái)鄷r(shí)增加并且分區(qū)可以被重用無(wú)限次,因此行標(biāo)記不能被無(wú)限地增加,因?yàn)樗鼘⑦_(dá)到其存儲(chǔ)的上限值。在固定次數(shù)的重用周期之后,這個(gè)行標(biāo)記被重置為其開(kāi)始值,即1。當(dāng)行標(biāo)記被重置為1時(shí),所有2000行的VERS1N列被設(shè)置為零。這是必須要做的,因?yàn)橛锌赡苋匀淮嬖谶@樣一些行,例如,僅僅通過(guò)分區(qū)的第一次使用用行標(biāo)記的第一次值=1更新這些行,并且現(xiàn)在在環(huán)繞到行標(biāo)記的第二次值=1之后,這些舊行可能看起來(lái)像在分區(qū)的當(dāng)前使用中被出隊(duì)。
      [0249]取消出隊(duì)日志分區(qū)的映射
      [0250]當(dāng)父隊(duì)列表分區(qū)被截?cái)鄷r(shí),出隊(duì)日志分區(qū)被取消映射,并且級(jí)聯(lián)截?cái)?釋放對(duì)(所有訂戶的)所有關(guān)聯(lián)的出隊(duì)日志分區(qū)被調(diào)用。當(dāng)出隊(duì)日志分區(qū)被取消映射時(shí),進(jìn)行行標(biāo)記更新。如果有必要,則還進(jìn)行行標(biāo)記重置。
      [0251 ] 在一個(gè)實(shí)施例中,在出隊(duì)日志分區(qū)取消映射期間的所有這些SQL更新僅僅在外部隊(duì)列表父分區(qū)取消映射被提交時(shí)(在相同事務(wù)中)被提交。
      [0252]出隊(duì)日志分區(qū)的回收/重用
      [0253]—旦出隊(duì)日志分區(qū)被取消映射,它們就滿足從字典加載關(guān)于空閑分區(qū)的信息以重新填充預(yù)取高速緩存的SQL查詢的條件。對(duì)于下一個(gè)預(yù)取重新填充查詢,分區(qū)通過(guò)使用ORDER BY被挑選并且被放到預(yù)取高速緩存的頭部,使得它們可以被重用。
      [0254]通過(guò)使用ORDER BY并且通過(guò)被放到高速緩存的消費(fèi)端,使得出隊(duì)日志分區(qū)可用于快速重用,因此,為了最近使用的資源的訪問(wèn)局部性、高速緩存蹤跡等等,可以使用最小數(shù)量的不同分區(qū)來(lái)服務(wù)隊(duì)列。
      [0255]非持久消息
      [0256]在前面的章節(jié)中,已經(jīng)描述了在其中隊(duì)列中的消息在盤上持久存在直到隊(duì)列中的所有消息都已經(jīng)被所有訂戶消費(fèi)或者直到隊(duì)列已經(jīng)被除去的實(shí)施例。但是,非持久消息僅僅在消息高速緩存中維護(hù),而不持久存儲(chǔ)在任何盤表(例如,隊(duì)列表或出隊(duì)日志表)中。
      [0257]索引
      [0258]根據(jù)一個(gè)實(shí)施例,用于實(shí)施分片隊(duì)列的隊(duì)列表不被索引。另一方面,出隊(duì)日志表具有在分區(qū)在后臺(tái)被初始化時(shí)被填充的本地分區(qū)索引,如說(shuō)明所解釋的那樣。索引分區(qū)隨后不改變,因?yàn)槌鲫?duì)會(huì)話只修改出隊(duì)日志中的非索引列。因此避免了索引爭(zhēng)用和索引維護(hù)開(kāi)銷。
      [0259]崩潰恢復(fù)
      [0260]當(dāng)數(shù)據(jù)庫(kù)實(shí)例在實(shí)例崩潰或正常關(guān)閉后被啟動(dòng)時(shí),針對(duì)每個(gè)分片隊(duì)列,用ORDERBY子句對(duì)隊(duì)列表的每個(gè)非空分區(qū)發(fā)出SQL SELECT命令。這個(gè)SQL SELECT語(yǔ)句從隊(duì)列表中將所有還未出隊(duì)的消息讀取到消息高速緩存。還對(duì)每個(gè)非空出隊(duì)日志分區(qū)發(fā)布SQL SELECT命令,以便將其中包含的信息加載到高速緩存。
      [0261]Java消息服務(wù)隊(duì)列
      [0262]本文所描述的分片隊(duì)列可以用于實(shí)施JMS隊(duì)列。分片隊(duì)列完全支持JMS。點(diǎn)到點(diǎn)的隊(duì)列以及發(fā)布-訂閱主題被支持。
      [0263]非持久JMS消息像持久JMS消息一樣被實(shí)施,但不使用隊(duì)列表和出隊(duì)日志表??梢酝ㄟ^(guò)使現(xiàn)有的消息監(jiān)聽(tīng)器機(jī)制在所有分片上迭代來(lái)支持消息監(jiān)聽(tīng)器。
      [0264]非持久JMS訂戶像長(zhǎng)期用JMS訂戶一樣被實(shí)施,但是僅僅在易失性存儲(chǔ)器中保持其元數(shù)據(jù)。非持久訂戶不在出隊(duì)日志中記錄出隊(duì)操作。
      [0265]在一個(gè)實(shí)施例中,非持久訂戶在決定消息是否為符合出隊(duì)條件時(shí)評(píng)估其規(guī)則。但是,在替代實(shí)施例中,這種評(píng)估也可以在入隊(duì)時(shí)或者在后臺(tái)中進(jìn)行。
      [0266]如同持久訂戶,非持久訂戶使用訂戶位圖中的條目指示訂戶是否正在將消息出隊(duì)或者已經(jīng)將消息出隊(duì)。
      [0267]硬件概述
      [0268]根據(jù)一個(gè)實(shí)施例,本文所述的技術(shù)是由一個(gè)或多個(gè)專用計(jì)算設(shè)備實(shí)施的。專用計(jì)算設(shè)備可以是硬接線的,以便執(zhí)行所述技術(shù),或者可以包括被持久性編程以執(zhí)行所述技術(shù)的、諸如一個(gè)或多個(gè)專用集成電路(ASIC)或現(xiàn)場(chǎng)可編程門陣列(FPGA)的數(shù)字電子設(shè)備,或者可以包括按照固件、存儲(chǔ)器、其它存儲(chǔ)裝置或者其組合中的程序指令被編程以執(zhí)行所述技術(shù)的一個(gè)或多個(gè)通用硬件處理器。這樣的專用計(jì)算設(shè)備還可以將定制硬接線邏輯、ASIC或FPGA與定制編程組合以實(shí)現(xiàn)所述技術(shù)。專用計(jì)算設(shè)備可以是臺(tái)式計(jì)算機(jī)系統(tǒng)、便攜式計(jì)算機(jī)系統(tǒng)、手持式設(shè)備、聯(lián)網(wǎng)設(shè)備或者包含硬接線和/或程序邏輯以實(shí)施所述技術(shù)的任何其它設(shè)備。
      [
      當(dāng)前第5頁(yè)1 2 3 4 5 6 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1