国产精品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ù)庫內(nèi)的分片隊列的制作方法

      文檔序號:9635174閱讀:745來源:國知局
      數(shù)據(jù)庫內(nèi)的分片隊列的制作方法
      【專利說明】數(shù)據(jù)庫內(nèi)的分片隊列
      [0001]對相關(guān)申請的交叉引用;權(quán)益要求
      [0002]本申請要求在2013年6月12日提交的、名稱為“An In-Database ShardedQueue That Supports JMS Session Ordering”的臨時申請 61/834,246 的權(quán)益,根據(jù) 35U.
      S.C. § 119(e),此申請的全部內(nèi)容以引用的方式被并入,如同在本文中被完全闡述。
      技術(shù)領(lǐng)域
      [0003]本發(fā)明涉及隊列,并且更具體地涉及在數(shù)據(jù)庫系統(tǒng)中實施的分片隊列。
      【背景技術(shù)】
      [0004]在許多應(yīng)用中,有必要讓在計算機(jī)系統(tǒng)上執(zhí)行的一個進(jìn)程(計算機(jī)程序、模塊或線程)與在相同的或其它的計算機(jī)系統(tǒng)上執(zhí)行的一個或多個其它進(jìn)程進(jìn)行通信。用來執(zhí)行這些通信的機(jī)制隨系統(tǒng)而變化。
      [0005]在各種系統(tǒng)中促進(jìn)進(jìn)程到進(jìn)程的通信的一種機(jī)制是“消息隊列”。如圖1所示,為了使用常規(guī)的消息隊列,進(jìn)程(“入隊會話”)通過將消息放在消息隊列100中來向其它進(jìn)程(“出隊會話”)發(fā)送信息。通過從消息隊列100讀取消息,出隊會話從入隊會話中獲得信息。當(dāng)需要從消息隊列100中讀取給定消息的全部出隊會話已經(jīng)讀取所述給定消息時,此消息從消息隊列100中移除。消息隊列的實施方式在美國專利No. 7,181,482、美國專利No. 7,185,033、美國專利 No. 7,185,034、美國專利 No. 7,203,706、美國專利 No. 7,779,418、美國專利No. 7,818,386、美國專利No. 7,680,793、美國專利No. 6,058,389和美國專利No. 8,397,244中描述,所有這些專利的內(nèi)容通過引用的方式被并入本申請。
      [0006]遺憾的是,消息隊列的常規(guī)的實施方式擴(kuò)展得不好。具體地,當(dāng)出隊會話的數(shù)量增加時,對隊列頭部的“熱”消息的爭用增加,從而降低性能。另外,當(dāng)入隊會話和出隊會話跨若干個系統(tǒng)散布時,在系統(tǒng)之間的互連的通信量可以變得過多。
      [0007]在本節(jié)中描述的方法是可以尋求的方法,但不一定是先前已經(jīng)構(gòu)想或?qū)で蟮姆椒āR虼?,除非另外指示,不?yīng)當(dāng)僅僅由于在本節(jié)中描述的任何方法被包含在本節(jié)中就假定它們可以作為現(xiàn)有技術(shù)。
      【附圖說明】
      [0008]在附圖中:
      [0009]圖1是常規(guī)消息隊列的框圖;
      [0010]圖2是根據(jù)實施例的分片隊列的框圖;
      [0011]圖3是示出根據(jù)實施例、可以如何通過使用分區(qū)的隊列表來實施分片隊列的框圖;
      [0012]圖4是示出根據(jù)實施例的消息高速緩存的框圖;
      [0013]圖5是根據(jù)實施例的出隊日志表的框圖;
      [0014]圖6是示出根據(jù)實施例的在入隊操作期間被執(zhí)行的步驟的流程圖;
      [0015]圖7是示出根據(jù)實施例、使用出隊指針以跟蹤訂戶的出隊進(jìn)展的框圖;
      [0016]圖8示出了可以在其上實施一個或多個實施例的計算機(jī)系統(tǒng)。
      【具體實施方式】
      [0017]在以下描述中,為了解釋的目的,闡述了大量特定細(xì)節(jié),以便提供對本發(fā)明的深入理解。但顯而易見的是,在沒有這些特定細(xì)節(jié)的情況下也可以實行本發(fā)明。在其它實例中,眾所周知的結(jié)構(gòu)和設(shè)備以框圖形式被示出,以避免不必要地使本發(fā)明難以理解。
      [0018]總體概述
      [0019]本文描述用于使用“分片隊列”在進(jìn)程之間通信傳送消息的技術(shù)。類似于常規(guī)的排隊系統(tǒng),入隊會話向分片隊列添加消息,并且出隊會話消費來自分片隊列的消息。但是,單個分片隊列由多個分片實施,并且通過將消息放在實施特定隊列的分片中的任何一個,消息可以被放在所述特定隊列中。
      [0020]在一個實施例中,為了減少入隊會話當(dāng)中的爭用,每個入隊會話被分配給分片中的僅僅一個分片。因此,入隊會話當(dāng)中的爭用被限制到被分配給相同分片的那些入隊會話,而不是被限制到向隊列發(fā)布消息的所有入隊會話。
      [0021 ]消費來自特定分片隊列的消息的訂戶必須將消息從那個特定分片隊列的所有分片出隊。針對具有單個數(shù)據(jù)庫實例的環(huán)境,訂戶可以具有將消息從所有分片出隊的單個出隊會話。針對多個數(shù)據(jù)庫實例共享相同的持久儲存器的環(huán)境,訂戶可以具有多個出隊會話,其中每個出隊會話僅僅從與包含出隊會話的實例有相關(guān)性的分片出隊。出隊會話使用出隊日志跟蹤它們的出隊操作的進(jìn)展。在一個實施例中,分片隊列和出隊日志均通過使用分區(qū)表而被實施。具體地,使用隊列表中的一個或多個分區(qū)來實施每個分片,并且每個訂戶具有針對隊列表的每個分區(qū)的出隊日志表的分區(qū)。
      [0022]消息
      [0023]消息是要經(jīng)由隊列通信傳送的數(shù)據(jù)。在一個實施例中,消息包括一組元數(shù)據(jù)和有效負(fù)載。每個消息由對應(yīng)的消息標(biāo)識符唯一地識別。消息的有效負(fù)載是消息中的數(shù)據(jù)。在一個實施例中,在消息句柄中每個有效負(fù)載具有存儲在有效負(fù)載外面的關(guān)聯(lián)的元數(shù)據(jù)。有效負(fù)載可以具有不同的大小。如下面將更詳細(xì)解釋的那樣,有效負(fù)載的大小可以是確定有效負(fù)載被行內(nèi)(in-line)存儲、行外(out-of-line)存儲還是被存儲在數(shù)據(jù)庫表中(未被高速緩存)的因素,并且可用的存儲器可以確定消息究竟是否被高速緩存。
      [0024]分片隊列
      [0025]圖2是根據(jù)實施例的分片隊列200的框圖。參考圖2,分片隊列200由多個分片202、204和206組成。雖然在所示出的實施例中,分片隊列200具有三個分片,但是被用于實施分片隊列的分片的實際數(shù)量可以隨實施方式而變化。例如,在一個實施例中,分片隊列的分片的數(shù)量可以由管理員指定。在替代實施例中,上界和下界可以被指定,并且系統(tǒng)可以動態(tài)地改變針對入隊可用的分片的數(shù)量。
      [0026]在所示出的實施例中,屬于隊列200的分片維護(hù)彼此分離,并且可以由不同的數(shù)據(jù)庫服務(wù)器管理。在圖2所示的示例中,分片202、204和206分別由數(shù)據(jù)庫服務(wù)器的不同實例1、2和3維護(hù)。雖然所示出的實施例示出在每個數(shù)據(jù)庫服務(wù)器實例中的一個分片,但是對于任何數(shù)據(jù)庫服務(wù)實例可以具有的、在給定的分片隊列中的分片的數(shù)量沒有限制。
      [0027]分片202、204和206存儲針對相同分片隊列200的不同的消息集合。在圖2所示的實施例中,在分片隊列200中的分片202存儲由在實例I中執(zhí)行的入隊會話入隊的消息。類似地,在分片隊列200中的分片202存儲由在實例2中執(zhí)行的入隊會話入隊的消息,而在分片隊列200中的分片206存儲由在實例3中執(zhí)行的入隊會話入隊的消息。
      [0028]隊列表
      [0029]根據(jù)一個實施例,使用分區(qū)隊列表300實施分片隊列200,如圖3所示。參考圖3,隊列表300被分為六個分區(qū)302、304、306、308、310和312。隊列表300的分區(qū)中的兩個分區(qū)當(dāng)前被分配給隊列200的每個分片。具體地,分區(qū)302和304被分配給分片202,分區(qū)306和308被分配給分片204,而分區(qū)310和312被分配給分片206。
      [0030]雖然為了說明的目的,分片隊列200的每個分片具有隊列表300的兩個分區(qū),但是每個分片所使用的分區(qū)的數(shù)量可以基于各種因素而變,所述因素包括入隊器將消息入隊到每個分片的速度,以及出隊器將消息從每個分片出隊的速度。因此,任何給定分片中分區(qū)的數(shù)量可以隨時間而變化,當(dāng)入隊器針對新消息用完存儲器時,新分區(qū)被添加,并且當(dāng)出隊器完成分區(qū)中所有消息的出隊時,分區(qū)被丟棄。
      [0031]在所示出的實施例中,每個分區(qū)具有隊列表300的五行。但是,在典型的實施方式中,每個分區(qū)中的行的數(shù)量可以變化。例如,一些分區(qū)可以具有數(shù)萬行。
      [0032]因為隊列200是使用分區(qū)表而實施的,因此將持久消息入隊涉及將行插入隊列表300的分區(qū)中。例如,在實例I中執(zhí)行的入隊會話會通過將與消息對應(yīng)的行插入與分片202關(guān)聯(lián)的分區(qū),諸如隊列表300的分區(qū)302或分區(qū)304,將消息入隊到隊列表300。在一個實施例中,分片202被配置為維護(hù)當(dāng)前插入點,使得消息基于分片202的當(dāng)前插入點被插入關(guān)聯(lián)的分區(qū)302-304中的一個分區(qū)。
      [0033]在下面將更詳細(xì)描述的實施例中,對隊列表300執(zhí)行的操作包括SQL INSERT(將消息入隊)、SQL SELECT(用于使具有大的消息有效負(fù)載的消息出隊)、以及分區(qū)級SQLTRUNCATE (在后臺丟棄不再需要的消息)。
      [0034]隊列表分區(qū)
      [0035]如上所提到的那樣,隊列表300被分區(qū)。在任何給定時間,隊列表分區(qū)要么被分配給特定分片,要么在針對分片隊列維護(hù)的隊列表分區(qū)的“空閑池(free pool)”中。當(dāng)隊列表分區(qū)已經(jīng)被所有相關(guān)的訂戶處理時,此隊列表分區(qū)被添加到空閑池。當(dāng)針對特定分片附加的存儲器被需要時,隊列表分區(qū)從空閑池中被移除并被分配給此分片。當(dāng)以這種方式被重用時,相同的隊列表分區(qū)可以在不同的時間點被分配給相同分片隊列中的不同分片。
      [0036]如果針對特定分片附加的存儲器被需要并且空閑池是空的,則新的隊列表分區(qū)被創(chuàng)建并且被分配給此分片。
      [0037]子分片
      [0038]每個分片可以被劃分成一個或多個子分片。子分片是已經(jīng)被分配給分片的隊列表行的子集。在一個實施例中,已經(jīng)被分配給給定分片的一個或多個隊列表分區(qū)被分配給此給定分片的每個子分片。在另一個實施例中,單個隊列表分區(qū)可以被分配給多個子分片。在替代實施例中,分片被劃分成子分片,而與隊列表300的分區(qū)無關(guān)。因此,子分片與隊列表分區(qū)之間的關(guān)系可以是一對多、一對一、多對一、或者可以完全沒有特定關(guān)系。在子分片內(nèi),消息按入隊時間排序。分片的子分片本身也按入隊時間排序。因此,由于入隊會話與分片之間的入隊器相關(guān)性,出隊會話可以按入隊時間的順序訪問每個入隊器的消息。
      [0039]當(dāng)隊列表的分區(qū)被用于建立子分片時,被分配給任何給定子分片的隊列表分區(qū)的數(shù)量可以變化。例如,分片可以具有帶三個隊列表分區(qū)的一個子分片,以及帶五個隊列表分區(qū)的另一個子分片。
      [0040]為了解釋的便利,將假定子分片包括隊列表的單個分區(qū)。在這種假定下,每個分片202、204和206具有兩個子分片。分片、隊列表分區(qū)與子分片之間的映射在圖3中不出。
      [0041]具體地,屬于分片202的分區(qū)302和304對應(yīng)于子分片352和354。屬于分片204的分區(qū)306和308對應(yīng)于子分片356和358。屬于分片206的分區(qū)310和312對應(yīng)于子分片 360 和 362。
      [0042]隊列表行
      [0043]隊列表中的每一行對應(yīng)于已經(jīng)入隊到與隊列表相關(guān)聯(lián)的分片隊列的持久消息。在圖3所示的實施例中,分區(qū)302針對消息Ml至M5當(dāng)中的每一個消息具有一行,分區(qū)304針對消息M6至M10當(dāng)中的每一個消息具有一行,分區(qū)306針對消息Ml 1至M15當(dāng)中的每一個消息具有一行,分區(qū)308針對消息M16至M20當(dāng)中的每一個消息具有一行,分區(qū)310針對消息M21至M25當(dāng)中的每一個消息具有一行,而分區(qū)312針對消息M26至M30當(dāng)中的每一個消息具有一行。
      [0044]根據(jù)一個實施例,在隊列表300內(nèi),針對給定消息的行包括針對此消息的以下信息:
      [0045].MSGID-消息標(biāo)識符
      [0046].SE
      當(dāng)前第1頁1 2 3 4 5 6 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1