国产精品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ù)存儲系統(tǒng)和存儲方法

      文檔序號:6542389閱讀:289來源:國知局
      一種數(shù)據(jù)存儲系統(tǒng)和存儲方法
      【專利摘要】本發(fā)明公開了一種數(shù)據(jù)存儲系統(tǒng)和存儲方法,屬于數(shù)據(jù)庫處理【技術(shù)領(lǐng)域】。該方法包括:根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表;在第二數(shù)據(jù)存儲器中存儲該索引列表中的每個索引;將第一數(shù)據(jù)存儲器劃分為多個數(shù)據(jù)區(qū),啟動多個第一線程,每個第一線程負(fù)責(zé)從第一數(shù)據(jù)存儲器的一個或多個數(shù)據(jù)區(qū)中獲取各個數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中;根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,獲取與索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表;將與每個索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表與每個索引的索引名稱相關(guān)聯(lián)地存儲到第二數(shù)據(jù)存儲器中。本發(fā)明能夠提高對業(yè)務(wù)數(shù)據(jù)的查詢效率,并提高了數(shù)據(jù)條目及索引數(shù)據(jù)寫入到第二數(shù)據(jù)存儲器的速度。
      【專利說明】一種數(shù)據(jù)存儲系統(tǒng)和存儲方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明屬于數(shù)據(jù)庫處理【技術(shù)領(lǐng)域】,具體涉及一種數(shù)據(jù)存儲系統(tǒng)和存儲方法。
      【背景技術(shù)】
      [0002]傳統(tǒng)的數(shù)據(jù)存儲和訪問的實現(xiàn)方式一般是基于關(guān)系型數(shù)據(jù)庫或者是基于nosql數(shù)據(jù)庫的分布式緩存。對于關(guān)系型數(shù)據(jù)庫實現(xiàn)方式,數(shù)據(jù)存儲在關(guān)系型數(shù)據(jù)庫的磁盤中,應(yīng)用程序通過sql語句訪問數(shù)據(jù)庫中的數(shù)據(jù)。由于sql語句的語法非常靈活,因此能夠支持多種排序和多種分組條件下的復(fù)雜查詢,即能夠支持復(fù)雜的查詢業(yè)務(wù)。但是,關(guān)系型數(shù)據(jù)庫需要維護數(shù)據(jù)一致性,并維護大量關(guān)聯(lián)關(guān)系,并且數(shù)據(jù)存儲在硬盤上,導(dǎo)致數(shù)據(jù)查詢速度慢,特別是在高并發(fā)訪問情況下會嚴(yán)重影響查詢效率。
      [0003]對于nosql數(shù)據(jù)庫實現(xiàn)方式,數(shù)據(jù)以鍵-值(key-value)對的方式存儲在內(nèi)存中。在這種實現(xiàn)方式下,由于數(shù)據(jù)存儲在內(nèi)存中,訪問速度快,并且通過標(biāo)準(zhǔn)api(應(yīng)用程序編程接口)獲取數(shù)據(jù)簡單易用。但這種實現(xiàn)方式無法很好的支持多種排序和多種組合條件的復(fù)雜查詢,無法支持復(fù)雜的查詢業(yè)務(wù)。
      [0004]可見上述兩種數(shù)據(jù)存儲和訪問的實現(xiàn)方式各有優(yōu)劣。而如何在支持復(fù)雜的查詢業(yè)務(wù)的前提下提高數(shù)據(jù)訪問效率,就成為亟待解決的技術(shù)問題。

      【發(fā)明內(nèi)容】

      [0005]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)存儲系統(tǒng)和存儲方法。
      [0006]根據(jù)本發(fā)明的一個方面,提供了一種數(shù)據(jù)存儲方法,適于將來自第一數(shù)據(jù)存儲器的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,該方法包括:
      [0007]根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表,索引列表中的每個索引對應(yīng)一種查詢方式;
      [0008]在第二數(shù)據(jù)存儲器中存儲該索引列表中的每個索引,其中每個索引包括標(biāo)識該索引的索引名稱;
      [0009]將第一數(shù)據(jù)存儲器劃分為多個數(shù)據(jù)區(qū),啟動多個第一線程,每個第一線程負(fù)責(zé)從第一數(shù)據(jù)存儲器的一個或多個數(shù)據(jù)區(qū)中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,其中在第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目包括數(shù)據(jù)條目的唯一標(biāo)識以及相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;
      [0010]根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表;以及
      [0011]將與每個索弓I相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表與每個索弓I的索引名稱相關(guān)聯(lián)地存儲到第二數(shù)據(jù)存儲器中。
      [0012]可選地,所述根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表,包括:
      [0013]根據(jù)對數(shù)據(jù)條目的排序查詢方式建立排序列表,并根據(jù)對數(shù)據(jù)條目的分組查詢方式建立分組列表;
      [0014]根據(jù)排序列表和分組列表進行笛卡爾乘積,構(gòu)造所述索引列表。
      [0015]可選地,所述根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,包括:
      [0016]啟動多個第二線程,每個第二線程負(fù)責(zé)排序列表中的一個或多個排序查詢方式,從第一數(shù)據(jù)存儲器中確定與所負(fù)責(zé)的排序查詢方式對應(yīng)的排序數(shù)據(jù)條目集合;
      [0017]啟動多個第三線程,每個第三線程負(fù)責(zé)索引列表中的一個或多個索引,從與所負(fù)責(zé)的索引對應(yīng)的排序數(shù)據(jù)條目集合中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      [0018]可選地,所述從與所負(fù)責(zé)的索引對應(yīng)的排序數(shù)據(jù)條目集合中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目,包括:
      [0019]將排序數(shù)據(jù)條目集合劃分為多個數(shù)據(jù)塊,啟動多個第四線程,每個第四線程負(fù)責(zé)從一個或多個數(shù)據(jù)塊中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目。
      [0020]可選地,所述索引名稱包括排序查詢方式標(biāo)識和分組查詢方式標(biāo)識;
      [0021]在所述第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目的唯一標(biāo)識為該數(shù)據(jù)條目在第一數(shù)據(jù)存儲器中的唯一標(biāo)識,以及數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的各個字段進行序列化后得到的內(nèi)容。
      [0022]可選地,所述索引名稱還包括數(shù)據(jù)鍵值類型;
      [0023]在所述第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目的唯一標(biāo)識還包括數(shù)據(jù)鍵值類型,以及數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的與數(shù)據(jù)鍵值類型對應(yīng)的各個字段進行序列化后得到的內(nèi)容;
      [0024]其中,所述數(shù)據(jù)鍵值類型用于標(biāo)識鍵值信息,所述鍵值為數(shù)據(jù)條目的一個或多個字段名稱。
      [0025]可選地,所述方法還包括:
      [0026]獲取來自應(yīng)用服務(wù)器的查詢請求,所述查詢請求包括查詢方式和鍵值,其中所述鍵值為數(shù)據(jù)條目的一個或多個字段名稱;
      [0027]根據(jù)查詢方式確定索引名稱,從第二數(shù)據(jù)存儲器中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;
      [0028]對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,并從去序列化后的內(nèi)容中獲取與鍵值對應(yīng)的內(nèi)容返回給應(yīng)用服務(wù)器。
      [0029]可選地,所述方法還包括:
      [0030]獲取來自應(yīng)用服務(wù)器的查詢請求,所述查詢請求包括查詢方式和鍵值;
      [0031]根據(jù)查詢方式和鍵值確定索引名稱,從第二數(shù)據(jù)存儲器中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;
      [0032]對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,將去序列化后的內(nèi)容返回給應(yīng)用服務(wù)器。
      [0033]可選地,第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目以關(guān)系型數(shù)據(jù)庫方式進行存儲;以及[0034]第二數(shù)據(jù)存儲器中的索引以索引名稱為鍵、以相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表為值的鍵-值方式進行存儲,以及數(shù)據(jù)條目以數(shù)據(jù)條目的唯一標(biāo)識為鍵、以相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容為值的鍵-值方式進行存儲。
      [0035]根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)存儲系統(tǒng),適于將來自第一數(shù)據(jù)存儲器的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,該系統(tǒng)包括:
      [0036]索引列表構(gòu)造單元,適于根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表,索引列表中的每個索引對應(yīng)一種查詢方式;
      [0037]索引存儲單元,適于在第二數(shù)據(jù)存儲器中存儲該索引列表中的每個索引,其中每個索引包括標(biāo)識該索引的索引名稱;
      [0038]數(shù)據(jù)條目存儲單元,適于將第一數(shù)據(jù)存儲器劃分為多個數(shù)據(jù)區(qū),啟動多個第一線程,每個第一線程負(fù)責(zé)從第一數(shù)據(jù)存儲器的一個或多個數(shù)據(jù)區(qū)中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,其中在第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目包括數(shù)據(jù)條目的唯一標(biāo)識以及相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;以及
      [0039]關(guān)聯(lián)單元,適于根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表;
      [0040]其中,所述索引存儲單元被配置成將與每個索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表與每個索引的索引名稱相關(guān)聯(lián)地存儲到第二數(shù)據(jù)存儲器中。
      [0041]可選地,所述索引列表構(gòu)造單元被配置成:
      [0042]根據(jù)對數(shù)據(jù)條目的排序查詢方式建立排序列表,并根據(jù)對數(shù)據(jù)條目的分組查詢方式建立分組列表;
      [0043]根據(jù)排序列表和分組列表進行笛卡爾乘積,構(gòu)造所述索引列表。
      [0044]可選地,所述關(guān)聯(lián)單元被配置成:
      [0045]啟動多個第二線程,每個第二線程負(fù)責(zé)排序列表中的一個或多個排序查詢方式,從第一數(shù)據(jù)存儲器中確定與所負(fù)責(zé)的排序查詢方式對應(yīng)的排序數(shù)據(jù)條目集合;
      [0046]啟動多個第三線程,每個第三線程負(fù)責(zé)索引列表中的一個或多個索引,從與所負(fù)責(zé)的索引對應(yīng)的排序數(shù)據(jù)條目集合中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      [0047]可選地,所述關(guān)聯(lián)單元被配置成:
      [0048]將排序數(shù)據(jù)條目集合劃分為多個數(shù)據(jù)塊,啟動多個第四線程,每個第四線程負(fù)責(zé)從一個或多個數(shù)據(jù)塊中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目。
      [0049]可選地,所述索引名稱包括排序查詢方式標(biāo)識和分組查詢方式標(biāo)識;
      [0050]在所述第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目的唯一標(biāo)識為該數(shù)據(jù)條目在第一數(shù)據(jù)存儲器中的唯一標(biāo)識,以及數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的各個字段進行序列化后得到的內(nèi)容。
      [0051]根據(jù)本發(fā)明的又一方面,提供了一種數(shù)據(jù)查詢系統(tǒng),包括第一數(shù)據(jù)存儲器、數(shù)據(jù)發(fā)布服務(wù)器和第二數(shù)據(jù)存儲器,其中,所述數(shù)據(jù)發(fā)布服務(wù)器包括上述的數(shù)據(jù)存儲系統(tǒng)。
      [0052]根據(jù)本發(fā)明的上述一個或多個技術(shù)方案,通過采用離線計算代替同步計算,并整合傳統(tǒng)關(guān)系型數(shù)據(jù)庫和nosql數(shù)據(jù)庫的優(yōu)點,既滿足了對業(yè)務(wù)數(shù)據(jù)進行復(fù)雜查詢的功能要求,又解決了基于傳統(tǒng)關(guān)系型數(shù)據(jù)庫查詢效率較低的問題,特別是提高了高并發(fā)環(huán)境下的數(shù)據(jù)查詢效率;在離線計算中還采用并行計算技術(shù),通過并行的方式將第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目及相應(yīng)的索引數(shù)據(jù)寫入到第二數(shù)據(jù)存儲器中,大幅度提高了數(shù)據(jù)的寫入速度。
      [0053]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
      【專利附圖】

      【附圖說明】
      [0054]圖1示出了根據(jù)本發(fā)明一個實施例的數(shù)據(jù)查詢系統(tǒng)的結(jié)構(gòu)示意圖;
      [0055]圖2示出了根據(jù)本發(fā)明一個實施例的數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)示意圖;
      [0056]圖3示出了根據(jù)本發(fā)明一個實施例的數(shù)據(jù)存儲方法的流程示意圖;以及
      [0057]圖4示出了本發(fā)明實施例中數(shù)據(jù)和索引的分塊并行計算示意圖。
      【具體實施方式】
      [0058]下面將參照附圖更詳細(xì)地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
      [0059]圖1示出了根據(jù)本發(fā)明一個實施例的數(shù)據(jù)查詢系統(tǒng)的結(jié)構(gòu)示意圖。參照圖1,本發(fā)明實施例的數(shù)據(jù)查詢系統(tǒng)可以包括:第一數(shù)據(jù)存儲器100、數(shù)據(jù)發(fā)布服務(wù)器20和第二數(shù)據(jù)存儲器300,其中數(shù)據(jù)發(fā)布服務(wù)器20分別與第一數(shù)據(jù)存儲器100和第二數(shù)據(jù)存儲器300通信連接,且數(shù)據(jù)發(fā)布服務(wù)器20包括數(shù)據(jù)存儲系統(tǒng)200,即數(shù)據(jù)存儲系統(tǒng)200駐留在數(shù)據(jù)發(fā)布服務(wù)器20中。
      [0060]數(shù)據(jù)存儲系統(tǒng)200能夠從第一數(shù)據(jù)存儲器中100獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器300中,其中在第二數(shù)據(jù)存儲器300中,每個數(shù)據(jù)條目包括數(shù)據(jù)條目的唯一標(biāo)識以及相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容。數(shù)據(jù)存儲系統(tǒng)200還能夠根據(jù)對第一數(shù)據(jù)存儲器100中的數(shù)據(jù)條目的各種查詢方式構(gòu)造索引列表(索引列表中的每個索引對應(yīng)一種查詢方式),并將該索引列表中的每個索引存儲到第二數(shù)據(jù)存儲器300中,其中在第二數(shù)據(jù)存儲器300中,每個索引包括標(biāo)識該索引的索引名稱以及相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      [0061 ] 數(shù)據(jù)存儲系統(tǒng)200還可以采用并行計算技術(shù)將第一數(shù)據(jù)存儲器100中的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器300中,和/或,采用并行計算技術(shù)將索引列表中的各索引存儲到第二數(shù)據(jù)存儲器300中,如此,提高了數(shù)據(jù)和索引寫入到第二數(shù)據(jù)存儲器時的寫入速度。
      [0062]根據(jù)數(shù)據(jù)存儲系統(tǒng)200的上述處理,相當(dāng)于預(yù)先完成了在各種查詢方式下對第一數(shù)據(jù)存儲器100中數(shù)據(jù)條目的查詢,并將查詢結(jié)果存儲在第二數(shù)據(jù)存儲器300中,即采用離線計算代替了傳統(tǒng)的同步計算。這樣,當(dāng)應(yīng)用服務(wù)器400需要查詢第一數(shù)據(jù)存儲器100中的數(shù)據(jù)條目時,可以直接從第二數(shù)據(jù)存儲器300提供的查詢接口來獲取查詢結(jié)果,由于不需要根據(jù)具體的查詢方式進行實時計算,因此提高了數(shù)據(jù)查詢速度。具體地,所述查詢接口接收到應(yīng)用服務(wù)器400發(fā)來的查詢請求時,先根據(jù)所述查詢請求中攜帶的查詢方式信息確定索引名稱,然后根據(jù)索引名稱從第二數(shù)據(jù)存儲器200中獲取對應(yīng)的數(shù)據(jù)條目標(biāo)識列表,最后根據(jù)獲取到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器200中獲取對應(yīng)的數(shù)據(jù)條目集合。[0063]第一數(shù)據(jù)存儲器100可以是關(guān)系型數(shù)據(jù)庫,例如Oracle、DB2、Microsoft SQLServer和MySQL等;第二數(shù)據(jù)存儲器200可以是鍵-值方式的no sql數(shù)據(jù)庫,例如redis數(shù)據(jù)庫。此種情況下,該數(shù)據(jù)查詢系統(tǒng)就整合了傳統(tǒng)關(guān)系型數(shù)據(jù)庫和nosql數(shù)據(jù)庫的優(yōu)點,既滿足了對業(yè)務(wù)數(shù)據(jù)進行復(fù)雜查詢的功能要求,又解決了基于傳統(tǒng)關(guān)系型數(shù)據(jù)庫查詢效率較低的問題,特別是提高了高并發(fā)環(huán)境下的數(shù)據(jù)查詢效率。其中,redis是一個key-value存儲系統(tǒng),它支持存儲的value類型包括string (字符串)、list (鏈表)、set (集合)、sortedset (有序集合)和hash (哈希)類型。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集、并集和差集及等操作,而且這些操作都是原子性的。
      [0064]以下對上述數(shù)據(jù)查詢系統(tǒng)中的數(shù)據(jù)存儲系統(tǒng)200的具體構(gòu)成和工作原理進行詳細(xì)描述。
      [0065]圖2示出了根據(jù)本發(fā)明一個實施例的數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)示意圖。該數(shù)據(jù)存儲系統(tǒng)200可以駐留在數(shù)據(jù)發(fā)布服務(wù)器20中,所述數(shù)據(jù)發(fā)布服務(wù)器20分別與第一數(shù)據(jù)存儲器100和第二數(shù)據(jù)存儲器300通信連接,通過所述數(shù)據(jù)存儲系統(tǒng)200,能夠?qū)碜缘谝粩?shù)據(jù)存儲器100的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器300中,從而完成數(shù)據(jù)的發(fā)布。其中,第一數(shù)據(jù)存儲器100可以是關(guān)系型數(shù)據(jù)庫,例如Oracle、DB2、Microsoft SQL Server和MySQL等;第二數(shù)據(jù)存儲器200可以是鍵-值方式的no sql數(shù)據(jù)庫,例如redis數(shù)據(jù)庫。
      [0066]參照圖2,本發(fā)明實施例的數(shù)據(jù)存儲系統(tǒng)200可以包括:索引列表構(gòu)造單元210、索引存儲單元220、數(shù)據(jù)條目存儲單元230和關(guān)聯(lián)單元240。
      [0067]考慮到對業(yè)務(wù)數(shù)據(jù)的使用實際情況,在現(xiàn)實中使用的數(shù)據(jù)查詢方式是有限的,因此,索引列表構(gòu)造單元210可以根據(jù)對第一數(shù)據(jù)存儲器100中的數(shù)據(jù)條目的各種查詢方式構(gòu)造索引列表,也就是說,索引列表中包括多個索引,每個索引對應(yīng)一種查詢方式。
      [0068]對數(shù)據(jù)條目的查詢方式一般包括排序查詢方式(order by)和分組查詢方式(group by),以及二者的組合。order by和group by的數(shù)量是有限的,而且大部分的orderby和group by是一起使用的,因此,索引列表構(gòu)造單元210可以先根據(jù)對數(shù)據(jù)條目的排序查詢方式建立排序列表,并根據(jù)對數(shù)據(jù)條目的分組查詢方式建立分組列表,然后,根據(jù)排序列表和分組列表進行笛卡爾乘積,來構(gòu)造所述索引列表。當(dāng)然,對數(shù)據(jù)條目的查詢方式也可以是現(xiàn)有技術(shù)中的其他查詢方式,甚至是將來有可能出現(xiàn)的其他查詢方式,本發(fā)明實施例對此不做限制。
      [0069]索引列表構(gòu)造單元210構(gòu)造完成索引列表后,索引存儲單元220可以在第二數(shù)據(jù)存儲器300中存儲該索引列表中的每個索引,其中每個索引包括標(biāo)識該索引的索引名稱以及與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。在具體實現(xiàn)時,索引存儲單元220可以先將索引名稱作為鍵(key)存儲到第二存儲器300中,對應(yīng)的值(vlaue)暫時為空。后續(xù),通過關(guān)聯(lián)單元240確定索引名稱對應(yīng)的數(shù)據(jù)條目標(biāo)識列表后,再將該數(shù)據(jù)條目標(biāo)識列表作為值與對應(yīng)的索引名稱相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器300中。例如,對于redis數(shù)據(jù)庫,對應(yīng)的值的類型可以采用有序集(sorted set),即所存儲的數(shù)據(jù)條目標(biāo)識列表中的數(shù)據(jù)條目標(biāo)識是有序的,其順序由索引對應(yīng)的查詢方式所確定。
      [0070]在一種實現(xiàn)方式中,所述索引名稱包括排序查詢方式標(biāo)識(orderID)和分組查詢方式標(biāo)識(groupID)。在另一種實現(xiàn)方式中,所述索引名稱包括數(shù)據(jù)鍵值類型、排序查詢方式標(biāo)識和分組查詢方式標(biāo)識。其中,所述數(shù)據(jù)鍵值類型用于標(biāo)識鍵值信息,所述鍵值為數(shù)據(jù)條目的一個或多個字段名稱。在具體實現(xiàn)時,所述數(shù)據(jù)鍵值類型可以直接采用所述鍵值,也可以是對鍵值進行編碼后的值,且本發(fā)明實施例對具體的編碼方式不做限制。
      [0071]例如,假設(shè)數(shù)據(jù)條目有4個字段,字段名稱分別為A、B、C、D,用戶查詢的鍵值為{A、C},則所述數(shù)據(jù)鍵值類型可以是{A、C},也可以是對{A、C}進行編碼后的值例如2。
      [0072]數(shù)據(jù)條目存儲單元230適于從第一數(shù)據(jù)存儲器100中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器300中,其中在第二數(shù)據(jù)存儲器300中,每個數(shù)據(jù)條目包括數(shù)據(jù)條目的唯一標(biāo)識以及相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容。例如對于redis數(shù)據(jù)庫,每個數(shù)據(jù)條目是以數(shù)據(jù)條目的唯一標(biāo)識作為鍵,以相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容作為值進行存儲。
      [0073]為提高數(shù)據(jù)處理速度,數(shù)據(jù)條目存儲單元230可以將第一數(shù)據(jù)存儲器100劃分為多個數(shù)據(jù)區(qū),并啟動多個第一線程,每個第一線程負(fù)責(zé)從第一數(shù)據(jù)存儲器100的一個或多個數(shù)據(jù)區(qū)中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器300中,即多個第一線程并行地將第一數(shù)據(jù)存儲器100中的數(shù)據(jù)條目寫入到第二數(shù)據(jù)存儲器300中。
      [0074]在具體實現(xiàn)時,數(shù)據(jù)條目存儲單元230可以先判斷第一數(shù)據(jù)存儲器100中存儲的數(shù)據(jù)條目的數(shù)量是否大于閾值,然后根據(jù)判斷結(jié)果決定是否執(zhí)行多線程處理。當(dāng)數(shù)據(jù)條目的數(shù)量大于閾值時,執(zhí)行所述多線程處理,否則,可以不執(zhí)行所述多線程處理。其中,所述閾值可以根據(jù)經(jīng)驗值和試驗確定。
      [0075]當(dāng)所述索引名稱包括排序查詢方式標(biāo)識和分組查詢方式標(biāo)識時,則在第二數(shù)據(jù)存儲器300中,每個數(shù)據(jù)條目的唯一標(biāo)識為該數(shù)據(jù)條目在第一數(shù)據(jù)存儲器100中的唯一標(biāo)識,相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的各個字段進行序列化后得到的內(nèi)容。例如,當(dāng)?shù)谝粩?shù)據(jù)存儲器100為關(guān)系型數(shù)據(jù)庫時,該唯一標(biāo)識可以為數(shù)據(jù)條目的主鍵。
      [0076]其中,對數(shù)據(jù)條目的各個字段進行序列化是指:依次取出該數(shù)據(jù)條目的各個字段的值,將每個字段的值作為一個序列項來組合成一個序列,且各序列項之間用分隔符例如逗號進行分割;或者,依次取出該數(shù)據(jù)條目的各個字段的值,將每個字段的名稱和字段的值作為一個序列項來組合成一個序列,且字段的名稱和字段的值之間用分割符例如冒號分害I],各序列項之間用分隔符例如逗號進行分割。
      [0077]例如,假設(shè)數(shù)據(jù)條目有4個字段,字段名稱分別為A、B、C、D,對應(yīng)的字段值分別為a, b, c, d,則進行序列化后得到的內(nèi)容為{a, b, c, d},或者為{A:a, B:b, C:c, D:d}。
      [0078]當(dāng)所述索引名稱包括數(shù)據(jù)鍵值類型、排序查詢方式標(biāo)識和分組查詢方式標(biāo)識時,則在第二數(shù)據(jù)存儲器300中,每個數(shù)據(jù)條目的唯一標(biāo)識為該數(shù)據(jù)條目在第一數(shù)據(jù)存儲器100中的唯一標(biāo)識,相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的與數(shù)據(jù)鍵值類型對應(yīng)的各個字段進行序列化后得到的內(nèi)容。例如,當(dāng)?shù)谝粩?shù)據(jù)存儲器100為關(guān)系型數(shù)據(jù)庫時,該唯一標(biāo)識可以為數(shù)據(jù)條目的主鍵。
      [0079]例如,假設(shè)數(shù)據(jù)條目有4個字段,字段名稱分別為A、B、C、D,對應(yīng)的字段值分別為a, b,c,d,數(shù)據(jù)鍵值類型為{A、C},則進行序列化后得到的內(nèi)容為{a,c},或者為{A:a,C:c}。
      [0080]關(guān)聯(lián)單元240適于根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器300中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      [0081]每個索引對應(yīng)一種查詢方式,對于每種查詢方式,關(guān)聯(lián)單元240可以構(gòu)造相應(yīng)的查詢語句來從第一數(shù)據(jù)存儲器100中獲取相對應(yīng)的數(shù)據(jù)條目。例如,當(dāng)所述第一數(shù)據(jù)存儲器100為關(guān)系型數(shù)據(jù)庫時,關(guān)聯(lián)單元240可以根據(jù)查詢方式構(gòu)造SQL語句,根據(jù)構(gòu)造的SQL語句對所述第一數(shù)據(jù)存儲器100進行操作,從而獲得與該查詢方式對應(yīng)的數(shù)據(jù)條目。SQL語句示例如下:
      [0082]select*from 表名 sort by A group by B。
      [0083]關(guān)聯(lián)單元240獲取到與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目后,確定每個數(shù)據(jù)條目的唯一標(biāo)識,例如為數(shù)據(jù)條目的主鍵,從而得到與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,然后,索引存儲單元220可以將與每個索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表與每個索引的索引名稱相關(guān)聯(lián)地存儲到第二數(shù)據(jù)存儲器300中。如此,就將第二數(shù)據(jù)存儲器中存儲的索引與該索引對應(yīng)的數(shù)據(jù)條目集合關(guān)聯(lián)起來了。
      [0084]為提高數(shù)據(jù)處理速度,關(guān)聯(lián)單元240可以啟動多個第二線程,每個第二線程負(fù)責(zé)排序列表中的一個或多個排序查詢方式,從第一數(shù)據(jù)存儲器100中確定與所負(fù)責(zé)的排序查詢方式對應(yīng)的排序數(shù)據(jù)條目集合;并啟動多個第三線程,每個第三線程負(fù)責(zé)索引列表中的一個或多個索引,從與所負(fù)責(zé)的索引對應(yīng)的排序數(shù)據(jù)條目集合中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      [0085]為進一步提高數(shù)據(jù)處理速度,關(guān)聯(lián)單元240還可以將排序數(shù)據(jù)條目集合劃分為多個數(shù)據(jù)塊,啟動多個第四線程,每個第四線程負(fù)責(zé)從一個或多個數(shù)據(jù)塊中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目。在具體實現(xiàn)時,關(guān)聯(lián)單元240可以先判斷排序數(shù)據(jù)條目集合中的數(shù)據(jù)條目的數(shù)量是否大于閾值,然后根據(jù)判斷結(jié)果決定是否執(zhí)行多線程處理。當(dāng)數(shù)據(jù)條目的數(shù)量大于閾值時,執(zhí)行所述多線程處理,否則,可以不執(zhí)行所述多線程處理。其中,所述閾值可以根據(jù)經(jīng)驗值和試驗確定。
      [0086]根據(jù)本發(fā)明實施例的數(shù)據(jù)存儲系統(tǒng)200,通過采用離線計算代替同步計算,有效的提高了數(shù)據(jù)的查詢效率。例如,可以在所述第二數(shù)據(jù)存儲器300中配置查詢接口,應(yīng)用服務(wù)器400不需要訪問第一數(shù)據(jù)存儲器100進行實時計算,而是直接從查詢接口來獲取與查詢請求對應(yīng)的數(shù)據(jù)條目,如此,避免了對第一數(shù)據(jù)存儲器100中數(shù)據(jù)條目的復(fù)雜的查詢運算,提高了查詢速度。
      [0087]如前所述,在一種實現(xiàn)方式中,第二數(shù)據(jù)存儲器中300存儲的索引名稱包括排序查詢方式標(biāo)識和分組查詢方式標(biāo)識;在另一種實現(xiàn)方式中,所述索引名稱包括數(shù)據(jù)鍵值類型、排序查詢方式標(biāo)識和分組查詢方式標(biāo)識。
      [0088]對應(yīng)于上述的兩種實現(xiàn)方式,所述查詢接口獲取查詢數(shù)據(jù)的方式也有兩種。在一種實現(xiàn)方式中,查詢接口獲取數(shù)據(jù)的過程為:
      [0089]獲取來自應(yīng)用服務(wù)器400的查詢請求,所述查詢請求包括查詢方式和鍵值;
      [0090]根據(jù)查詢方式確定索引名稱,從第二數(shù)據(jù)存儲器300中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器300中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;
      [0091 ] 對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,并從去序列化后的內(nèi)容中獲取與鍵值對應(yīng)的內(nèi)容返回給應(yīng)用服務(wù)器400。
      [0092]其中,去序列化是序列化的逆過程,其具體實現(xiàn)過程本領(lǐng)域技術(shù)人員容易根據(jù)前述的序列化過程確定。
      [0093]在另一種實現(xiàn)方式中,查詢接口獲取數(shù)據(jù)的過程為:
      [0094]獲取來自應(yīng)用服務(wù)器400的查詢請求,所述查詢請求包括查詢方式和鍵值;
      [0095]根據(jù)查詢方式和鍵值確定索引名稱,從第二數(shù)據(jù)存儲器300中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器300中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;
      [0096]對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,將去序列化后的內(nèi)容返回給應(yīng)用服務(wù)器400。
      [0097]兩種實現(xiàn)方式的一個差別在于:在第一種實現(xiàn)方式中,去序列化后的內(nèi)容是整個數(shù)據(jù)條目的內(nèi)容,還需要從中獲取與鍵值對應(yīng)的內(nèi)容后再返回給應(yīng)用服務(wù)器;在第二種實現(xiàn)方式中,去序列化后的內(nèi)容是數(shù)據(jù)條目中與鍵值對應(yīng)的內(nèi)容,可以直接返回給應(yīng)用服務(wù)器。
      [0098]圖3示出了根據(jù)本發(fā)明一個實施例的數(shù)據(jù)存儲方法的流程示意圖,該數(shù)據(jù)存儲方法適于將來自第一數(shù)據(jù)存儲器的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,其中第一數(shù)據(jù)存儲器可以是關(guān)系型數(shù)據(jù)庫,例如0racle、DB2、Microsoft SQL Server和MySQL等,第二數(shù)據(jù)存儲器可以是鍵-值方式的no sql數(shù)據(jù)庫,例如redis數(shù)據(jù)庫。
      [0099]參照圖3,所述數(shù)據(jù)存儲器方法可以包括:
      [0100]步驟S310,根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表,索引列表中的每個索引對應(yīng)一種查詢方式;
      [0101]對數(shù)據(jù)條目的查詢方式一般包括排序查詢方式(order by)和分組查詢方式(group by),以及二者的組合。order by和group by的數(shù)量是有限的,而且大部分的orderby和group by是一起使用的,因此,可以先根據(jù)對數(shù)據(jù)條目的排序查詢方式建立排序列表,并根據(jù)對數(shù)據(jù)條目的分組查詢方式建立分組列表;然后,根據(jù)排序列表和分組列表進行笛卡爾乘積,構(gòu)造所述索引列表。當(dāng)然,對數(shù)據(jù)條目的查詢方式也可以是現(xiàn)有技術(shù)中的其他查詢方式,甚至是將來有可能出現(xiàn)的其他查詢方式,本發(fā)明實施例對此不做限制。
      [0102]步驟S320,在第二數(shù)據(jù)存儲器中存儲該索引列表中的每個索引;
      [0103]在第二數(shù)據(jù)存儲器中,每個索引包括標(biāo)識該索引的索引名稱以及與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。在本步驟中,可以先將索引名稱作為鍵(key)存儲到第二存儲器中,對應(yīng)的值(vlaue)暫時為空。在后續(xù)的步驟中確定了索引名稱對應(yīng)的數(shù)據(jù)條目標(biāo)識列表后,再將該數(shù)據(jù)條目標(biāo)識列表作為值與對應(yīng)的索引名稱相關(guān)聯(lián)的存儲到第二存儲器中。例如,對于redis數(shù)據(jù)庫,對應(yīng)的值的類型可以采用有序集(sorted set),即所存儲的數(shù)據(jù)條目標(biāo)識列表中的數(shù)據(jù)條目標(biāo)識是有序的,其順序由索引對應(yīng)的查詢方式所確定。
      [0104]在一種實現(xiàn)方式中,所述索引名稱包括排序查詢方式標(biāo)識(orderID)和分組查詢方式標(biāo)識(groupID)。在另一種實現(xiàn)方式中,所述索引名稱包括數(shù)據(jù)鍵值類型、排序查詢方式標(biāo)識和分組查詢方式標(biāo)識。其中,所述數(shù)據(jù)鍵值類型用于標(biāo)識鍵值信息,所述鍵值為數(shù)據(jù)條目的一個或多個字段名稱。在具體實現(xiàn)時,所述數(shù)據(jù)鍵值類型可以直接采用所述鍵值,也可以是對鍵值進行編碼后的值,且本發(fā)明實施例對具體的編碼方式不做限制。
      [0105]步驟S330,從第一數(shù)據(jù)存儲器中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中;
      [0106]在第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目包括數(shù)據(jù)條目的唯一標(biāo)識以及相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容。例如對于redis數(shù)據(jù)庫,每個數(shù)據(jù)條目是以數(shù)據(jù)條目的唯一標(biāo)識作為鍵,以相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容作為值進行存儲。
      [0107]為提高數(shù)據(jù)處理速度,可以將第一數(shù)據(jù)存儲器劃分為多個數(shù)據(jù)區(qū),并啟動多個第一線程,每個第一線程負(fù)責(zé)從第一數(shù)據(jù)存儲器的一個或多個數(shù)據(jù)區(qū)中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,即多個第一線程并行地將第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目寫入到第二數(shù)據(jù)存儲器中。
      [0108]在具體實現(xiàn)時,可以先判斷第一數(shù)據(jù)存儲器中存儲的數(shù)據(jù)條目的數(shù)量是否大于閾值,然后根據(jù)判斷結(jié)果決定是否執(zhí)行多線程處理。當(dāng)數(shù)據(jù)條目的數(shù)量大于閾值時,執(zhí)行所述多線程處理,否則,可以不執(zhí)行所述多線程處理。其中,所述閾值可以根據(jù)經(jīng)驗值和試驗確定。
      [0109]當(dāng)所述索引名稱包括排序查詢方式標(biāo)識和分組查詢方式標(biāo)識時,則在第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目的唯一標(biāo)識為該數(shù)據(jù)條目在第一數(shù)據(jù)存儲器中的唯一標(biāo)識,相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的各個字段進行序列化后得到的內(nèi)容。例如,當(dāng)?shù)谝粩?shù)據(jù)存儲器為關(guān)系型數(shù)據(jù)庫時,該唯一標(biāo)識可以為數(shù)據(jù)條目的主鍵。
      [0110]當(dāng)所述索引名稱包括數(shù)據(jù)鍵值類型、排序查詢方式標(biāo)識和分組查詢方式標(biāo)識時,則在第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目的唯一標(biāo)識為該數(shù)據(jù)條目在第一數(shù)據(jù)存儲器中的唯一標(biāo)識,相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的與數(shù)據(jù)鍵值類型對應(yīng)的各個字段進行序列化后得到的內(nèi)容。例如,當(dāng)?shù)谝粩?shù)據(jù)存儲器為關(guān)系型數(shù)據(jù)庫時,該唯一標(biāo)識可以為數(shù)據(jù)條目的主鍵。
      [0111]步驟S340,根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表;
      [0112]每個索引對應(yīng)一種查詢方式,對于每種查詢方式,可以構(gòu)造相應(yīng)的查詢語句來從第一數(shù)據(jù)存儲器中獲取相對應(yīng)的數(shù)據(jù)條目。例如,當(dāng)所述第一數(shù)據(jù)存儲器為關(guān)系型數(shù)據(jù)庫時,可以根據(jù)查詢方式構(gòu)造SQL語句,根據(jù)構(gòu)造的SQL語句對所述第一數(shù)據(jù)存儲器進行操作,從而獲得與該查詢方式對應(yīng)的數(shù)據(jù)條目。
      [0113]獲取到與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目后,再進一步確定每個數(shù)據(jù)條目的唯一標(biāo)識,例如為數(shù)據(jù)條目的主鍵,從而得到與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      [0114]為提高數(shù)據(jù)處理速度,可以啟動多個第二線程,每個第二線程負(fù)責(zé)排序列表中的一個或多個排序查詢方式,從第一數(shù)據(jù)存儲器中確定與所負(fù)責(zé)的排序查詢方式對應(yīng)的排序數(shù)據(jù)條目集合;并啟動多個第三線程,每個第三線程負(fù)責(zé)索引列表中的一個或多個索引,從與所負(fù)責(zé)的索引對應(yīng)的排序數(shù)據(jù)條目集合中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      [0115]為進一步提高數(shù)據(jù)處理速度,還可以將排序數(shù)據(jù)條目集合劃分為多個數(shù)據(jù)塊,啟動多個第四線程,每個第四線程負(fù)責(zé)從一個或多個數(shù)據(jù)塊中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目。在具體實現(xiàn)時,可以先判斷排序數(shù)據(jù)條目集合中的數(shù)據(jù)條目的數(shù)量是否大于閾值,然后根據(jù)判斷結(jié)果決定是否執(zhí)行多線程處理。當(dāng)數(shù)據(jù)條目的數(shù)量大于閾值時,執(zhí)行所述多線程處理,否則,可以不執(zhí)行所述多線程處理。其中,所述閾值可以根據(jù)經(jīng)驗值和試驗確定。
      [0116]步驟S350,將與每個索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表與每個索引的索引名稱相關(guān)聯(lián)地存儲到第二數(shù)據(jù)存儲器中,如此,就將第二數(shù)據(jù)存儲器中存儲的索引與該索引對應(yīng)的數(shù)據(jù)條目集合關(guān)聯(lián)起來了。
      [0117]根據(jù)本發(fā)明實施例的數(shù)據(jù)存儲方法,通過采用離線計算代替同步計算,有效的提高了數(shù)據(jù)的查詢效率。例如,可以在所述第二數(shù)據(jù)存儲器中配置查詢接口,應(yīng)用服務(wù)器不需要訪問第一數(shù)據(jù)存儲器進行實時計算,而是直接從查詢接口來獲取與查詢請求對應(yīng)的數(shù)據(jù)條目,如此,避免了對第一數(shù)據(jù)存儲器中數(shù)據(jù)條目的復(fù)雜的查詢運算,提高了查詢速度。
      [0118]也就是說,本發(fā)明實施例的數(shù)據(jù)存儲方法還可以包括如下步驟:
      [0119]獲取來自應(yīng)用服務(wù)器的查詢請求,所述查詢請求包括查詢方式和鍵值,其中所述鍵值為數(shù)據(jù)條目的一個或多個字段名稱;
      [0120]根據(jù)查詢方式確定索引名稱,從第二數(shù)據(jù)存儲器中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;
      [0121 ] 對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,并從去序列化后的內(nèi)容中獲取與鍵值對應(yīng)的內(nèi)容返回給應(yīng)用服務(wù)器。
      [0122]或者,本發(fā)明實施例的數(shù)據(jù)存儲方法還可以包括如下步驟:
      [0123]獲取來自應(yīng)用服務(wù)器的查詢請求,所述查詢請求包括查詢方式和鍵值;
      [0124]根據(jù)查詢方式和鍵值確定索引名稱,從第二數(shù)據(jù)存儲器中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;
      [0125]對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,將去序列化后的內(nèi)容返回給應(yīng)用服務(wù)器。
      [0126]以下給出本發(fā)明的一個應(yīng)用實例。
      [0127]在該應(yīng)用實例中,汽車經(jīng)銷商降價排行榜數(shù)據(jù)存儲在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中,在該關(guān)系型數(shù)據(jù)庫中存儲的汽車數(shù)據(jù)條目包括如下字段名稱:
      [0128]DealerId SpecId SpecName SpecImage SeriesId SeriesName BrandIdFactoryId NewsId NewsType NewsTitle StartDate EndDate DTime Price OriginalPricePriceOffPercent OrdersLastMonth OrdersLastQuarter CreateTime ModifyTime PIDCID SID KindId NewsTemplateId serieslevel InventoryState PriceScope EquipCarIdPackageName PackagePrice IsRecommend PriceW IsLastWeek
      [0129]以下列舉該關(guān)系型數(shù)據(jù)庫中的3個數(shù)據(jù)條目:
      [0130]數(shù)據(jù)條目1:1104632012 款 S53.0T Sportback ?/upload/2013/7/19/1_201307191945189324136.jpg2734 奧迪 S533 79 8266471 O 奧迪 S5 現(xiàn)車充足最高優(yōu)惠 9.46 萬元 2013-12-3100:00:00.0002014-01-0500:00:00.0002013-12-3110:35:33.723633400 728000 13 1951 2013-12-31 10:55:00 2013-12-31 10:55:00110000 110100110105 I 2671390 4 O 70 O O O 64 I
      [0131]數(shù)據(jù)條目2:1 10771 2013 款 S64.0TFSI ?/upload/2013/4/19/1_201304191833167634435.jpg2736 奧迪 S633 79 8266541 O 奧迪 S6 現(xiàn)車充足最高優(yōu)惠 6.93 萬元 2013-12-31 00:00:00.000 2014-01-0500:00:00.000 2013-12-3110:37:12.510988700 1058000 7 97 12013-12-31 10:55:00 2013-12-31 10:55:00110000110100 110105 I 26714295 O 100 O O O 99 I
      [0132]數(shù)據(jù)條目3:1122032012 款 30FSI 技術(shù)型~/upload/spec/12203/1_201207041848360214178.jpgl8 奧迪 A6L33 9 8266413 O 奧迪 A6L 現(xiàn)車充足最高優(yōu)惠 11.13 萬元 2013-12-31 00:00:00.000 2014-01-0500:00:00.0002013-12-3110:34:25.467 380900 432800 12 1700 5 2013-12-24 18:55:002013-12-3110:55:00 110000110100 110105 I 2671359 5 O 50 O O O 39 I
      [0133]對上述降價排行榜數(shù)據(jù)進行發(fā)布的過程如下:
      [0134](I)根據(jù)對該降價排行榜數(shù)據(jù)中數(shù)據(jù)條目的查詢方式,構(gòu)造排序列表(Order by)
      如下:
      [0135]
      new string[] { ”PriccOITPcrcent desc,LessPricc desc,DTime desc*',
      tOrdcrsLastMonth dcsc.Pricc dcsc.DTimc desc'*,

      ffDTime desc ,Price asc(,f

      pPrice desosDTime desc'

      lTrice meJDTkm desc'

      tOrdcrsLastQiiartcr dcsc5DTimc desc'
      fOrdcrsLaslMonlh dcsc,PriccCHTPercenl dcsc,LcssPricc desc,DTime
      desc'
      fTriccOffPcrcent desc.0rdersLastMonlh dcsc.Pricc asc,DTimc desc”}
      [0136]可以看出,在所構(gòu)造的排序列表中,包括有8種排序查詢方式。
      [0137]構(gòu)造分組列表(group by)如下
      [0138]new string[] {〃BrandId〃, "Seriesld", "Specld", "PID", "CID", "Brandld, PID",〃BrandId, CID〃, 〃SeriesId, PID〃, 〃SeriesId, CID〃, 〃SpecId, PID〃, 〃SeriesLevel〃}
      [0139]可以看出,在所構(gòu)造的分組列表中,包括有11種分組查詢方式。
      [0140]然后,對二者進行笛卡爾乘積,得到多個組合,組合數(shù)量為8*11=88,即索引列表中包括88個索引,對應(yīng)88種查詢方式。
      [0141](2)將每種查詢條件作為索引的key存儲在redis數(shù)據(jù)庫中,則key為:
      [0142]^Promotion(PriceOffPercent desc, LessPrice desc, DTime desc|Specld, PID)"
      [0143]對應(yīng)排序查詢條件:
      [0144]"PriceOffPercent desc,LessPrice desc, DTime desc"
      [0145]對應(yīng)分組查詢條件:
      [0146]"Specld, PID"
      [0147](3)在redis數(shù)據(jù)庫中以key-value方式存儲數(shù)據(jù)條目的key值和value值,示例如下:
      [0148]Key:"Promotion_urn: promotion:92540000014492〃
      [0149]Value:"{\"DealerId\":9254,\"SpecId\":14492,\"SpecName\":\"2013\xe6\xac\xbel.6L\xe6\x89\x8b\xe5\x8a\xa8\xe8\x88\x92\xe9\x80\x82\xe7\x89\
      【權(quán)利要求】
      1.一種數(shù)據(jù)存儲方法,適于將來自第一數(shù)據(jù)存儲器的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,該方法包括: 根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表,索引列表中的每個索引對應(yīng)一種查詢方式; 在第二數(shù)據(jù)存儲器中存儲該索引列表中的每個索引,其中每個索引包括標(biāo)識該索引的索引名稱; 將第一數(shù)據(jù)存儲器劃分為多個數(shù)據(jù)區(qū),啟動多個第一線程,每個第一線程負(fù)責(zé)從第一數(shù)據(jù)存儲器的一個或多個數(shù)據(jù)區(qū)中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,其中在第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目包括數(shù)據(jù)條目的唯一標(biāo)識以及相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容; 根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表;以及 將與每個索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表與每個索引的索引名稱相關(guān)聯(lián)地存儲到第二數(shù)據(jù)存儲器中。
      2.如權(quán)利要求1所述的數(shù)據(jù)存儲方法,其中,所述根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表,包括: 根據(jù)對數(shù)據(jù)條目的排序查詢方式建立排序列表,并根據(jù)對數(shù)據(jù)條目的分組查詢方式建立分組列表; 根據(jù)排序列表和分組列表進行笛卡爾乘積,構(gòu)造所述索引列表。
      3.如權(quán)利要求2所述的數(shù)據(jù)存儲方法,其中,所述根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,包括: 啟動多個第二線程,每個第二線程負(fù)責(zé)排序列表中的一個或多個排序查詢方式,從第一數(shù)據(jù)存儲器中確定與所負(fù)責(zé)的排序查詢方式對應(yīng)的排序數(shù)據(jù)條目集合; 啟動多個第三線程,每個第三線程負(fù)責(zé)索引列表中的一個或多個索引,從與所負(fù)責(zé)的索引對應(yīng)的排序數(shù)據(jù)條目集合中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表。
      4.如權(quán)利要求3所述的數(shù)據(jù)存儲方法,其中,所述從與所負(fù)責(zé)的索引對應(yīng)的排序數(shù)據(jù)條目集合中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目,包括: 將排序數(shù)據(jù)條目集合劃分為多個數(shù)據(jù)塊,啟動多個第四線程,每個第四線程負(fù)責(zé)從一個或多個數(shù)據(jù)塊中確定與該索引相關(guān)聯(lián)的一個或多個數(shù)據(jù)條目。
      5.如權(quán)利要求2、3或4所述的數(shù)據(jù)存儲方法,其中,所述索引名稱包括排序查詢方式標(biāo)識和分組查詢方式標(biāo)識; 在所述第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目的唯一標(biāo)識為該數(shù)據(jù)條目在第一數(shù)據(jù)存儲器中的唯一標(biāo)識,以及數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的各個字段進行序列化后得到的內(nèi)容。
      6.如權(quán)利要求5所述的數(shù)據(jù)存儲方法,其中,所述索引名稱還包括數(shù)據(jù)鍵值類型; 在所述第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目的唯一標(biāo)識還包括數(shù)據(jù)鍵值類型,以及數(shù)據(jù)內(nèi)容為將數(shù)據(jù)條目的與數(shù)據(jù)鍵值類型對應(yīng)的各個字段進行序列化后得到的內(nèi)容; 其中,所述數(shù)據(jù)鍵值類型用于標(biāo)識鍵值信息,所述鍵值為數(shù)據(jù)條目的一個或多個字段名稱。
      7.如權(quán)利要求5所述的數(shù)據(jù)存儲方法,其中,還包括: 獲取來自應(yīng)用服務(wù)器的查詢請求,所述查詢請求包括查詢方式和鍵值,其中所述鍵值為數(shù)據(jù)條目的一個或多個字段名稱; 根據(jù)查詢方式確定索引名稱,從第二數(shù)據(jù)存儲器中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容; 對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,并從去序列化后的內(nèi)容中獲取與鍵值對應(yīng)的內(nèi)容返回給應(yīng)用服務(wù)器。
      8.如權(quán)利要求6所述的數(shù)據(jù)存儲方法,其中,還包括: 獲取來自應(yīng)用服務(wù)器的查詢請求,所述查詢請求包括查詢方式和鍵值; 根據(jù)查詢方式和鍵值確定索引名稱,從第二數(shù)據(jù)存儲器中查找與索引名稱相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表,并根據(jù)查找到的數(shù)據(jù)條目標(biāo)識列表從第二數(shù)據(jù)存儲器中獲取相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容; 對獲取到的數(shù)據(jù)內(nèi)容進行去序列化,將去序列化后的內(nèi)容返回給應(yīng)用服務(wù)器。
      9.一種數(shù)據(jù)存儲系統(tǒng),適于將來自第一數(shù)據(jù)存儲器的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,該系統(tǒng)包括: 索引列表構(gòu)造單元,適于根據(jù)對第一數(shù)據(jù)存儲器中的數(shù)據(jù)條目的查詢方式構(gòu)造索引列表,索引列表中的每個索引對應(yīng)一種查詢方式; 索引存儲單元,適于在第二數(shù)據(jù)存儲器中存儲該索引列表中的每個索引,其中每個索引包括標(biāo)識該索引的索引名稱; 數(shù)據(jù)條目存儲單元,適于將第一數(shù)據(jù)存儲器劃分為多個數(shù)據(jù)區(qū),啟動多個第一線程,每個第一線程負(fù)責(zé)從第一數(shù)據(jù)存儲器的一個或多個數(shù)據(jù)區(qū)中獲取各個數(shù)據(jù)條目,將所獲取的數(shù)據(jù)條目存儲到第二數(shù)據(jù)存儲器中,其中在第二數(shù)據(jù)存儲器中,每個數(shù)據(jù)條目包括數(shù)據(jù)條目的唯一標(biāo)識以及相關(guān)聯(lián)的數(shù)據(jù)內(nèi)容;以及 關(guān)聯(lián)單元,適于根據(jù)與每個索引相對應(yīng)的查詢方式確定相關(guān)聯(lián)的一個或者多個數(shù)據(jù)條目,并確定各數(shù)據(jù)條目在第二數(shù)據(jù)存儲器中的唯一標(biāo)識,獲取與該索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表; 其中,所述索引存儲單元被配置成將與每個索引相關(guān)聯(lián)的數(shù)據(jù)條目標(biāo)識列表與每個索引的索引名稱相關(guān)聯(lián)地存儲到第二數(shù)據(jù)存儲器中。
      10.一種數(shù)據(jù)查詢系統(tǒng),包括第一數(shù)據(jù)存儲器、數(shù)據(jù)發(fā)布服務(wù)器和第二數(shù)據(jù)存儲器,其中,所述數(shù)據(jù)發(fā)布服務(wù)器包括如權(quán)利要求9所述的數(shù)據(jù)存儲系統(tǒng)。
      【文檔編號】G06F17/30GK103902702SQ201410126243
      【公開日】2014年7月2日 申請日期:2014年3月31日 優(yōu)先權(quán)日:2014年3月31日
      【發(fā)明者】韓明 申請人:北京車商匯軟件有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1