本發(fā)明涉及數(shù)據(jù)傳輸技術(shù)領(lǐng)域,特別是涉及一種行情數(shù)據(jù)的寫入、讀取以及行情數(shù)據(jù)的讀寫方法和一種行情數(shù)據(jù)的寫入、讀取以及行情數(shù)據(jù)的讀寫系統(tǒng)。
背景技術(shù):
在證券行業(yè)中,行情數(shù)據(jù)是所有數(shù)據(jù)分析系統(tǒng)的基礎(chǔ)數(shù)據(jù),每一種證券的報(bào)價(jià)信息的變化,都是市場(chǎng)變化的數(shù)據(jù)體現(xiàn),這些數(shù)據(jù)在投資過程中供投資人作為參考,從而直接影響投資人的投資行為。在這樣的背景下,如何更高效的對(duì)行情數(shù)據(jù)進(jìn)行處理,成為了業(yè)界技術(shù)人員所面對(duì)的一大難題。
行情數(shù)據(jù)的訪問分為三個(gè)部分:服務(wù)器響應(yīng)行情源的更新寫入;服務(wù)器響應(yīng)客戶端請(qǐng)求的數(shù)據(jù)讀??;通過網(wǎng)絡(luò)對(duì)分筆數(shù)據(jù)進(jìn)行分發(fā)。其中,寫入和讀取兩個(gè)訪問是同時(shí)進(jìn)行的,在數(shù)據(jù)寫入過程中需要進(jìn)行數(shù)據(jù)讀取時(shí),需要確保讀寫兩個(gè)線程不需要相互等待,并且得到的行情數(shù)據(jù)是邏輯完整的,而不是臟數(shù)據(jù)。
在現(xiàn)有技術(shù)中,對(duì)數(shù)據(jù)的并發(fā)訪問存在著兩種解決方案。
方案一,使用讀寫鎖技術(shù),數(shù)據(jù)讀取時(shí),使用讀鎖,讀取之間不相互排斥,讀鎖只與寫鎖排斥。數(shù)據(jù)寫入時(shí),使用寫鎖,寫鎖之間,寫鎖與讀鎖之間相互排斥。就是說(shuō),若另外的線程已經(jīng)獲得了讀鎖或?qū)戞i,當(dāng)前寫入線程必須等待另外的線程釋放該鎖。此方案優(yōu)點(diǎn)是能確保同時(shí)只有一條線程對(duì)數(shù)據(jù)進(jìn)行寫入的操作,確保數(shù)據(jù)邏輯完整,避免臟數(shù)據(jù)。
方案二,使用rcu(readcopyupdate,讀取,復(fù)制,更新),具體是指,數(shù)據(jù)區(qū)域都擁有一個(gè)索引,對(duì)數(shù)據(jù)不能直接訪問,而是通過索引訪問。要寫入更新數(shù)據(jù)時(shí),首先復(fù)制一份數(shù)據(jù),對(duì)復(fù)制數(shù)據(jù)的字段進(jìn)行寫入更新后,再對(duì)索引進(jìn)行鎖定并更新。此方案的優(yōu)點(diǎn)是,更新時(shí)不需要鎖定數(shù)據(jù),只需在更新索引時(shí)鎖定索引,由于更新索引耗時(shí)極少,所以寫入線程與讀取線程之間的等待時(shí)間相對(duì)較短,幾乎不用等待。
然而,針對(duì)現(xiàn)有技術(shù)中的解決方案中,依舊存在著不可忽視的技術(shù)缺陷。
針對(duì)方案一,使用讀寫鎖技術(shù)。此方案的缺點(diǎn)是并發(fā)訪問時(shí)寫入線程需要等待,尤其在大量讀取訪問正在進(jìn)行時(shí),寫入線程容易發(fā)生擁堵,這對(duì)行情服務(wù)器的影響是致命的。
針對(duì)方案二,使用rcu技術(shù)。此方案的缺點(diǎn)是,每次更新數(shù)據(jù)都需要進(jìn)行數(shù)據(jù)拷貝,對(duì)內(nèi)存消耗很大,而且拷貝也耗損cpu資源,使得吞吐量下降。
因此,在對(duì)于在大量讀取訪問的場(chǎng)景下,利用現(xiàn)有技術(shù)解決對(duì)數(shù)據(jù)的并發(fā)訪問很可能會(huì)造成寫入線程的效率低下,以及,對(duì)cpu資源的過度侵占,導(dǎo)致吞吐量下降。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明實(shí)施例以便提供一種克服上述問題或者至少部分地解決上述問題的一種行情數(shù)據(jù)的寫入、讀取以及行情數(shù)據(jù)的讀寫方法和相應(yīng)的一種行情數(shù)據(jù)的寫入、讀取以及行情數(shù)據(jù)的讀寫系統(tǒng)。
為了解決上述問題,本發(fā)明實(shí)施例公開了一種行情數(shù)據(jù)的寫入、讀取以及行情數(shù)據(jù)的讀寫方法和系統(tǒng),解決了針對(duì)大量讀取訪問時(shí)吞吐量低下的問題。
第一方面,本發(fā)明實(shí)施例提供了一種行情數(shù)據(jù)的寫入方法,所述方法包括:
生成分筆行情數(shù)據(jù);
針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
在完成分筆記錄的寫入后,累加分筆記錄數(shù)量。
優(yōu)選地,所述生成分筆行情數(shù)據(jù)的步驟包括:
獲取行情源數(shù)據(jù);
判斷所述行情源數(shù)據(jù)生成時(shí)間是否在清盤前;若否,則將所述行情數(shù)據(jù)判定為有效的行情源數(shù)據(jù);
判斷所述行情數(shù)據(jù)生成時(shí)間是否處于競(jìng)價(jià)階段,若否,則將所述行情數(shù)據(jù)判定為有效的行情源數(shù)據(jù);
判斷所述行情數(shù)據(jù)是否為異常數(shù)據(jù),若否,則將所述行情數(shù)據(jù)判定為有效的行情源數(shù)據(jù);
將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理,獲得分筆行情數(shù)據(jù)。
優(yōu)選地,所述判斷所述行情數(shù)據(jù)是否為異常數(shù)據(jù)的子步驟進(jìn)一步包括:
當(dāng)所述行情源數(shù)據(jù)成交量出現(xiàn)倒退,
和/或,
所述行情源數(shù)據(jù)生成時(shí)間出現(xiàn)倒退,
和/或,
所述行情源數(shù)據(jù)內(nèi)外盤標(biāo)記出現(xiàn)錯(cuò)誤,
和/或,
所述行情源數(shù)據(jù)的平均價(jià)格振幅超過預(yù)設(shè)閾值時(shí),將所述行情數(shù)據(jù)判定為異常數(shù)據(jù)。
優(yōu)選地,所述行情源數(shù)據(jù)包括,行情源數(shù)據(jù)代碼、行情源數(shù)據(jù)市場(chǎng)代碼、行情源數(shù)據(jù)生成時(shí)間、行情源數(shù)據(jù)價(jià)格、行情源數(shù)據(jù)開盤價(jià)格、行情源數(shù)據(jù)最高價(jià)格、行情源數(shù)據(jù)最低價(jià)格、行情源數(shù)據(jù)最新價(jià)格、行情源數(shù)據(jù)成交量、行情源數(shù)據(jù)成交額、行情源數(shù)據(jù)買一價(jià)、行情源數(shù)據(jù)買二價(jià)、行情源數(shù)據(jù)買三價(jià)、行情源數(shù)據(jù)買四價(jià)、行情源數(shù)據(jù)買五價(jià)、行情源數(shù)據(jù)賣一價(jià)、行情源數(shù)據(jù)賣二價(jià)、行情源數(shù)據(jù)賣三價(jià)、行情源數(shù)據(jù)賣四價(jià)、行情源數(shù)據(jù)賣五價(jià)、行情源數(shù)據(jù)買一量、行情源數(shù)據(jù)買二量、行情源數(shù)據(jù)買三量、行情源數(shù)據(jù)買四量、行情源數(shù)據(jù)買五量、行情源數(shù)據(jù)賣一量、行情源數(shù)據(jù)賣二量、行情源數(shù)據(jù)賣三量、行情源數(shù)據(jù)賣四量、行情源數(shù)據(jù)賣五量、行情源數(shù)據(jù)內(nèi)外盤標(biāo)記、行情源數(shù)據(jù)漲跌家數(shù);
所述將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理,獲得分筆行情數(shù)據(jù)的子步驟進(jìn)一步包括:
當(dāng)所述行情源數(shù)據(jù)最新價(jià)格不為0且不等于其前一次交易的行情源數(shù)據(jù)最新價(jià)格,
和/或,
所述行情源數(shù)成交量大于0且大于其前一次交易的行情源數(shù)據(jù)成交量,
和/或,
所述行情源數(shù)成交額大于0且大于其前一次交易的行情源數(shù)據(jù)成交額時(shí),從當(dāng)前有效的行情源數(shù)據(jù)中,提取行情源數(shù)據(jù)代碼、行情源數(shù)據(jù)市場(chǎng)代碼、行情源數(shù)據(jù)生成時(shí)間、行情源數(shù)據(jù)成交額、行情源數(shù)據(jù)最新價(jià)、行情源數(shù)據(jù)成交量、行情源數(shù)據(jù)持倉(cāng)量、行情源數(shù)據(jù)買一價(jià)、行情源數(shù)據(jù)買一量、行情源數(shù)據(jù)賣一價(jià)、行情源數(shù)據(jù)賣一量、行情源數(shù)據(jù)內(nèi)外盤標(biāo)記,組成分筆行情數(shù)據(jù)。
優(yōu)選地,所述差額數(shù)據(jù)包括時(shí)間差、成交額差、價(jià)格差、成交量差、持倉(cāng)量差、買一價(jià)差、買一量差、賣一價(jià)差、賣一量差,所述針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù)的步驟包括:
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)生成時(shí)間,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)生成時(shí)間差額,并記錄為時(shí)間差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)成交額,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)成交額差額,并記錄為成交額差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)最新價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)最新價(jià)差額,并記錄為價(jià)格差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)成交量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)成交量差額,并記錄為成交量差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)持倉(cāng)量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)持倉(cāng)量差額,并記錄為持倉(cāng)量差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)買一價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)買一價(jià)差額,并記錄為買一價(jià)差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)買一量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)買一量差額,并記錄為買一量差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)賣一價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)賣一價(jià)差額,并記錄為賣一價(jià)差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)賣一量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)賣一量差額,并記錄為賣一量差。
優(yōu)選地,所述在完成分筆記錄的寫入后,累加分筆記錄數(shù)量的步驟包括:
記錄所述累加的分筆記錄數(shù)量為分筆總量;
判斷當(dāng)前分筆總量是否超出預(yù)設(shè)存儲(chǔ)區(qū)域的大小;
若是,則終止分筆記錄的寫入。
第二方面,本發(fā)明實(shí)施例提供了提供了一種行情數(shù)據(jù)的讀取方法,所述方法包括:
接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
獲取已記錄的分筆記錄數(shù)量;
采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
第三方面,本發(fā)明實(shí)施例提供了提供了一種行情數(shù)據(jù)的讀寫方法,所述方法涉及讀線程和寫線程,所述讀線程和寫線程同時(shí)進(jìn)行,所述寫線程包括:
生成分筆行情數(shù)據(jù);
針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
在完成分筆記錄的寫入后,累加分筆記錄數(shù)量;
所述讀線程包括:
接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
獲取已記錄的分筆記錄數(shù)量;
采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
第四方面,本發(fā)明實(shí)施例提供了提供了一種行情數(shù)據(jù)的寫入系統(tǒng),所述系統(tǒng)包括:
數(shù)據(jù)生成模塊,用于生成分筆行情數(shù)據(jù);
差額數(shù)據(jù)計(jì)算模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
寫入模塊,用于將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
數(shù)量累加模塊,用于在完成分筆記錄的寫入后,累加分筆記錄數(shù)量。
第五方面,本發(fā)明實(shí)施例提供了提供了一種行情數(shù)據(jù)的讀取系統(tǒng),所述系統(tǒng)包括:
請(qǐng)求接受模塊,用于接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
數(shù)量獲取模塊,用于獲取已記錄的分筆記錄數(shù)量;
分筆記錄及分筆記錄數(shù)量讀取模塊,用于采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
差額數(shù)據(jù)讀取模塊,用于從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
數(shù)據(jù)返回模塊,用于向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
第六方面,本發(fā)明實(shí)施例提供了提供了一種行情數(shù)據(jù)的讀寫系統(tǒng),所述系統(tǒng)涉及讀線程和寫線程,所述讀線程和寫線程同時(shí)進(jìn)行,所述讀線程包括:
第二數(shù)據(jù)生成模塊,用于生成分筆行情數(shù)據(jù);
第二差額數(shù)據(jù)計(jì)算模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
第二寫入模塊,用于將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
第二數(shù)量累加模塊,用于在完成分筆記錄的寫入后,累加分筆記錄數(shù)量;
所述讀線程包括:
第二請(qǐng)求接受模塊,用于接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
第二數(shù)量獲取模塊,用于獲取已記錄的分筆記錄數(shù)量;
第二分筆記錄及分筆記錄數(shù)量讀取模塊,用于采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
第二差額數(shù)據(jù)讀取模塊,用于從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
第二數(shù)據(jù)返回模塊,用于向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
本發(fā)明實(shí)施例包括以下優(yōu)點(diǎn):
本發(fā)明實(shí)施例,通過在行情數(shù)據(jù)更新時(shí),生成新的一筆分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù),在預(yù)置存儲(chǔ)區(qū)域中,把這組數(shù)據(jù)各個(gè)字段依次填入,再使用原子操作,累加分筆記錄數(shù)量,當(dāng)下次出現(xiàn)行情更新時(shí),重復(fù)此操作;接收分筆記錄讀取請(qǐng)求,獲取接收分筆記錄讀取請(qǐng)求時(shí)生成的分筆記錄讀取起始時(shí)間,和,已記錄的分筆記錄數(shù)量,采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量,并從分筆記錄中提取分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù),從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù),最后像用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù),通過運(yùn)用本發(fā)明實(shí)施例所述的方法,可以實(shí)現(xiàn)寫線程與讀線程可以并發(fā)同時(shí)進(jìn)行,操作系統(tǒng)提供指令級(jí)別的不能重疊的讀取和寫入操作,確保要讀取或?qū)懭氲淖止?jié)在操作過程中不會(huì)被掛起(中斷),使得系統(tǒng)在讀線程中,只能讀取到寫入前的分筆匯總或是寫入后的分筆匯總,從而獲得邏輯完整的分筆行情數(shù)據(jù),這便保證了在并發(fā)訪問時(shí)寫入線程無(wú)需等待,從而提升了對(duì)行情數(shù)據(jù)的讀寫效率。
附圖說(shuō)明
圖1是本發(fā)明的一種行情數(shù)據(jù)的寫入方法實(shí)施例的步驟流程圖;
圖2是本發(fā)明的一種行情數(shù)據(jù)的讀取方法實(shí)施例的步驟流程圖;
圖3是本發(fā)明的一種行情數(shù)據(jù)的讀寫方法實(shí)施例的步驟流程圖;
圖4是本發(fā)明的一種行情數(shù)據(jù)的寫入系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖;
圖5是本發(fā)明的一種行情數(shù)據(jù)的讀取系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖;
圖6是本發(fā)明的一種行情數(shù)據(jù)的讀寫系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
參照?qǐng)D1,示出了本發(fā)明的一種行情數(shù)據(jù)的寫入方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:
步驟101,生成分筆行情數(shù)據(jù);
在實(shí)際應(yīng)用中,本發(fā)明實(shí)施例可以應(yīng)用于客戶端,和/或,服務(wù)器中,本發(fā)明針對(duì)分筆行情數(shù)據(jù)的特點(diǎn),設(shè)計(jì)特定的訪問技術(shù),使得分筆行情數(shù)據(jù)的同時(shí)寫入和讀取,繼而傳輸?shù)娇蛻舳耍瑥亩梢垣@得更大的吞吐量。
在本發(fā)明實(shí)施例中,可以通過如下方式生成分筆行情數(shù)據(jù):
先對(duì)行情源所發(fā)送的行情源數(shù)據(jù)進(jìn)行獲取,再對(duì)所述行情源數(shù)據(jù)是否為有效行情數(shù)據(jù)進(jìn)行判斷,當(dāng)所述行情源數(shù)據(jù)被判定為有效行情源數(shù)據(jù)時(shí),將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理,獲得分筆行情數(shù)據(jù)。
作為本發(fā)明實(shí)施例的一種示例,所述行情源數(shù)據(jù)可以包括,行情源數(shù)據(jù)代碼、行情源數(shù)據(jù)市場(chǎng)代碼、行情源數(shù)據(jù)生成時(shí)間、行情源數(shù)據(jù)價(jià)格、行情源數(shù)據(jù)開盤價(jià)格、行情源數(shù)據(jù)最高價(jià)格、行情源數(shù)據(jù)最低價(jià)格、行情源數(shù)據(jù)最新價(jià)格、行情源數(shù)據(jù)成交量、行情源數(shù)據(jù)成交額、行情源數(shù)據(jù)買一價(jià)、行情源數(shù)據(jù)買二價(jià)、行情源數(shù)據(jù)買三價(jià)、行情源數(shù)據(jù)買四價(jià)、行情源數(shù)據(jù)買五價(jià)、行情源數(shù)據(jù)賣一價(jià)、行情源數(shù)據(jù)賣二價(jià)、行情源數(shù)據(jù)賣三價(jià)、行情源數(shù)據(jù)賣四價(jià)、行情源數(shù)據(jù)賣五價(jià)、行情源數(shù)據(jù)買一量、行情源數(shù)據(jù)買二量、行情源數(shù)據(jù)買三量、行情源數(shù)據(jù)買四量、行情源數(shù)據(jù)買五量、行情源數(shù)據(jù)賣一量、行情源數(shù)據(jù)賣二量、行情源數(shù)據(jù)賣三量、行情源數(shù)據(jù)賣四量、行情源數(shù)據(jù)賣五量、行情源數(shù)據(jù)內(nèi)外盤標(biāo)記、行情源數(shù)據(jù)漲跌家數(shù)等。
在具體實(shí)現(xiàn)中,可以通過如下方式對(duì)獲取到的行情源數(shù)據(jù)是否為有效行情源數(shù)據(jù)進(jìn)行判斷:
方式一:判斷所述行情源數(shù)據(jù)生成時(shí)間是否在清盤前;若否,則將所述行情源數(shù)據(jù)判定為有效的行情源數(shù)據(jù)。
例如,交易日9:00am清盤,清盤前到來(lái)的行情源數(shù)據(jù)不生成分筆行情數(shù)據(jù)。
方式二:判斷所述行情源數(shù)據(jù)生成時(shí)間是否處于競(jìng)價(jià)階段,若否,則將所述行情源數(shù)據(jù)判定為有效的行情源數(shù)據(jù)。
例如,若盤口價(jià)格有效(買1賣1),且盤口價(jià)格和量相等,則處于競(jìng)價(jià)階段,此時(shí)到來(lái)的行情源數(shù)據(jù)不生成分筆行情數(shù)據(jù)。
方式三:判斷所述行情源數(shù)據(jù)是否為異常數(shù)據(jù),若否,則將所述行情源數(shù)據(jù)判定為有效的行情源數(shù)據(jù)。
作為本發(fā)明一個(gè)更為優(yōu)選的實(shí)施例,所述判斷所述行情行情源數(shù)據(jù)是否為異常數(shù)據(jù)還可以包括:
當(dāng)所述行情源數(shù)據(jù)成交量出現(xiàn)倒退時(shí),判斷所述行情源數(shù)據(jù)為異常數(shù);
例如,在當(dāng)前獲取的行情源數(shù)據(jù)的成交量比前一次獲取的行情源數(shù)據(jù)的成交量少時(shí),將所述行情源數(shù)據(jù)判定為異常數(shù)據(jù),所述異常數(shù)據(jù)不參與生成分筆行情數(shù)據(jù)。
當(dāng)所述行情源數(shù)據(jù)生成時(shí)間出現(xiàn)倒退時(shí),判斷所述行情源數(shù)據(jù)為異常數(shù);
例如,當(dāng)前獲取的行情源數(shù)據(jù)所標(biāo)記的時(shí)間比前次獲取的行情源數(shù)據(jù)所標(biāo)記的時(shí)間早,將所述行情源數(shù)據(jù)判定為異常數(shù)據(jù),所述異常數(shù)據(jù)不生參與成分筆行情數(shù)據(jù)。
當(dāng)所述行情源數(shù)據(jù)內(nèi)外盤標(biāo)記出現(xiàn)錯(cuò)誤時(shí),判斷所述行情源數(shù)據(jù)為異常數(shù);
在具體操作中,可以通過如下方法判斷關(guān)于內(nèi)外盤標(biāo)記內(nèi)外盤標(biāo)記是否出現(xiàn)錯(cuò)誤:
若當(dāng)前價(jià)大于或等于賣出價(jià),屬外盤。
若當(dāng)前價(jià)小于或等于買入價(jià),屬內(nèi)盤。
若當(dāng)前價(jià)介于買入價(jià)與賣出價(jià)之間:使用上一筆分筆判斷,比前一筆價(jià)格增加屬外盤,比前一筆價(jià)格減少屬內(nèi)盤,若相等則維持上一筆的內(nèi)外盤標(biāo)記,若沒有前一筆數(shù)據(jù),則使用昨收價(jià)判斷,大于等于昨收為外盤,小于昨收為內(nèi)盤。
例如,當(dāng)買1到買5依次減少,賣1到賣5依次增大時(shí),將所述行情源數(shù)據(jù)判定為異常數(shù)據(jù),所述異常數(shù)據(jù)不參與生成分筆行情數(shù)據(jù)。
當(dāng)所述行情源數(shù)據(jù)的平均價(jià)格振幅超過預(yù)設(shè)閾值時(shí),將所述行情源數(shù)據(jù)判定為異常數(shù)據(jù)。
例如,累計(jì)1分鐘的成交額除以成交量,當(dāng)此波幅大于50%時(shí),將所述行情源數(shù)據(jù)判定為異常數(shù)據(jù),所述異常數(shù)據(jù)不生成分筆行情數(shù)據(jù)。
當(dāng)然,本領(lǐng)域技術(shù)人員任意選擇上述一種或多種方法都對(duì)所述行情源數(shù)據(jù)是否為無(wú)效行情源數(shù)據(jù)進(jìn)行判斷都是可行的,在此本發(fā)明對(duì)此不作限制。
在本發(fā)明一個(gè)優(yōu)選地實(shí)施例中,可以通過如下方法將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理,獲得分筆行情數(shù)據(jù):
方法一,當(dāng)所述行情源數(shù)據(jù)最新價(jià)格不為0且不等于其前一次交易的行情源數(shù)據(jù)最新價(jià)格時(shí),將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理。
方法二,當(dāng)所述行情源數(shù)成交量大于0且大于其前一次交易的行情源數(shù)據(jù)成交量時(shí),將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理。
方法三,當(dāng)所述行情源數(shù)成交額大于0且大于其前一次交易的行情源數(shù)據(jù)成交額時(shí),將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理。
當(dāng)然,本領(lǐng)域技術(shù)人員任意選擇上述一種或多種方法對(duì)所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理都是可行的,對(duì)此本發(fā)明對(duì)此不作限制。
進(jìn)一步地,所述分筆處理的方法包括,從當(dāng)前有效的行情源數(shù)據(jù)中,提取行情源數(shù)據(jù)代碼、行情源數(shù)據(jù)市場(chǎng)代碼、行情源數(shù)據(jù)生成時(shí)間、行情源數(shù)據(jù)成交額、行情源數(shù)據(jù)最新價(jià)、行情源數(shù)據(jù)成交量、行情源數(shù)據(jù)持倉(cāng)量、行情源數(shù)據(jù)買一價(jià)、行情源數(shù)據(jù)買一量、行情源數(shù)據(jù)賣一價(jià)、行情源數(shù)據(jù)賣一量、行情源數(shù)據(jù)內(nèi)外盤標(biāo)記等,組成分筆行情數(shù)據(jù)。
為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明實(shí)施例,以下通過一個(gè)具體應(yīng)用的示例進(jìn)行說(shuō)明。
例如,當(dāng)獲取到的行情源數(shù)據(jù)的為:行情源數(shù)據(jù)代碼:600000;行情源數(shù)據(jù)生成時(shí)間:212347272630000000;行情源數(shù)據(jù)開盤價(jià)格:1728;行情源數(shù)據(jù)最高價(jià)格:1729;行情源數(shù)據(jù)最低價(jià)格:1726;行情源數(shù)據(jù)最新價(jià)格:1729;行情源數(shù)據(jù)成交量:237301;行情源數(shù)據(jù)成交額:3581907;行情源數(shù)據(jù)買1價(jià)/量:1728/4900;行情源數(shù)據(jù)買2價(jià)/量:1726/17699;行情源數(shù)據(jù)買3價(jià)/量:1725/29200;行情源數(shù)據(jù)買4價(jià)/量:1724/26200;行情源數(shù)據(jù)買5價(jià)/量:1723/700;行情源數(shù)據(jù)賣1價(jià)/量:1729/71093;行情源數(shù)據(jù)賣2價(jià)/量:1730/133650;行情源數(shù)據(jù)賣3價(jià)/量:1731/2400;行情源數(shù)據(jù)賣4價(jià)/量:1732/11000;行情源數(shù)據(jù)賣5價(jià)/量:1733/30800;則生成的分筆行情數(shù)據(jù)可以為:分筆時(shí)間:212347272630000000;分筆最新價(jià):1729;分筆成交量:4600;分筆成交額:79534;分筆買1價(jià):1728;分筆買1量:4900;分筆賣1價(jià):1729;分筆賣1量:71093;內(nèi)外盤:外盤;上漲家數(shù):0;下跌家數(shù):0。
其中,上漲家數(shù)和下跌家數(shù)的此字段只對(duì)指數(shù)品種有效,非指數(shù)字段填0,指數(shù)則遍歷成份股,統(tǒng)計(jì)上漲的品種數(shù)和下跌的品種數(shù)。
步驟102,針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
在實(shí)際應(yīng)用中,所述差額數(shù)據(jù)可以為兩組分筆行情數(shù)據(jù)之間,各個(gè)字段相減,得出的分筆差額(增量)數(shù)據(jù),所述差額數(shù)據(jù)包括時(shí)間差、成交額差、價(jià)格差、成交量差、持倉(cāng)量差、買一價(jià)差、買一量差、賣一價(jià)差、賣一量差。
在本發(fā)明實(shí)施例中,所述針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù)的步驟可以包括:
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)生成時(shí)間,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)生成時(shí)間差額,并記錄為時(shí)間差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)成交額,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)成交額差額,并記錄為成交額差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)最新價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)最新價(jià)差額,并記錄為價(jià)格差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)成交量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)成交量差額,并記錄為成交量差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)持倉(cāng)量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)持倉(cāng)量差額,并記錄為持倉(cāng)量差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)買一價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)買一價(jià)差額,并記錄為買一價(jià)差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)買一量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)買一量差額,并記錄為買一量差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)賣一價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)賣一價(jià)差額,并記錄為賣一價(jià)差;
針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)賣一量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)賣一量差額,并記錄為賣一量差。
例如:當(dāng)前分筆行情數(shù)據(jù)為:分筆時(shí)間:212347272635000000;分筆最新價(jià):1729;分筆成交量:200;分筆成交額:522025;分筆買1價(jià):1726;分筆買1量:17699;分筆賣1價(jià):1729;分筆賣1量:60793;內(nèi)外盤:外盤;上漲家數(shù):0;下跌家數(shù):0;前一筆分筆行情數(shù)據(jù)的參數(shù)為:分筆時(shí)間:212347272630000000;分筆最新價(jià):1729;分筆成交量:4600;分筆成交額:79534;分筆買1價(jià):1728;分筆買1量:4900;分筆賣1價(jià):1729;分筆賣1量:71093;內(nèi)外盤:外盤;上漲家數(shù):0;下跌家數(shù):0;則差額數(shù)據(jù)可以為:時(shí)間:5000000;最新價(jià):0;成交量:4400;成交額:442491;買1價(jià):1;買1量:12799;賣1價(jià):0;賣1量:-10300;內(nèi)外盤:0;上漲家數(shù):0;下跌家數(shù):0;則所述差額數(shù)據(jù)為分筆差:時(shí)間差:5000000最新價(jià):0;成交量差:4400;成交額差:442491;買1價(jià)差:1;買1量差:12799;賣1價(jià)差:0;賣1量差:-10300;內(nèi)外盤:0;上漲家數(shù):0;下跌家數(shù):0
另外,值得注意的是,第一筆分筆行情數(shù)據(jù)所對(duì)應(yīng)的差額數(shù)據(jù)為所述分筆行情數(shù)據(jù)自身。
步驟103,將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)可以作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
在具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例可以通過將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄通過不能重疊的原子操作進(jìn)行寫入處理,確保須要寫入的字節(jié)在操作過程中不會(huì)被掛起(中斷)。
步驟104,在完成分筆記錄的寫入后,累加分筆記錄數(shù)量。
在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,所述在完成分筆記錄的寫入后,累加分筆記錄數(shù)量的步驟可以包括如下子步驟:
s41,記錄所述累加的分筆記錄數(shù)量為分筆總量;
s42,判斷當(dāng)前分筆總量是否超出預(yù)設(shè)存儲(chǔ)區(qū)域的大?。?/p>
s43,若是,則終止分筆記錄的寫入。
在具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例可以通過不能重疊的原子操作對(duì)分筆記錄數(shù)量進(jìn)行累加,通過分筆記錄數(shù)量進(jìn)行累加結(jié)果對(duì)分筆記錄數(shù)量進(jìn)行更新,并記錄所述累加的分筆記錄數(shù)量為分筆總量,通過判斷當(dāng)前分筆總量是否超出預(yù)設(shè)存儲(chǔ)區(qū)域的大小,決定是否終止分筆記錄的寫入。
例如,在完成對(duì)差額數(shù)據(jù)的寫入后,使用原子操作更新分筆記錄的總數(shù)量,每次寫入差額數(shù)據(jù)時(shí)更新一次分筆記錄數(shù)量,分筆記錄數(shù)量等于全部差額數(shù)量的筆數(shù),查看當(dāng)前分筆總量,要是所述分筆總量超過預(yù)設(shè)儲(chǔ)存區(qū)域的大小,就不再將分筆記錄寫入所述儲(chǔ)存區(qū)域。
參照?qǐng)D2,示出了本發(fā)明的一種行情數(shù)據(jù)的讀取方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:
步驟201,接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
步驟202,獲取已記錄的分筆記錄數(shù)量;
在具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例可以通過將當(dāng)前分筆記錄數(shù)量通過不能重疊的原子操作進(jìn)行讀取處理,確保須要讀取的分筆記錄數(shù)量在操作過程中不會(huì)被掛起(中斷)。
步驟203,采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中可以包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
步驟204,從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
在具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例可以通過獲取分筆記錄數(shù)量以及用戶端所請(qǐng)求的分筆行情數(shù)據(jù)的時(shí)間,從儲(chǔ)存區(qū)域中確定出一個(gè)基準(zhǔn)分筆行情數(shù)據(jù)作為第一筆分筆記錄的分筆行情數(shù)據(jù),再通過與后續(xù)的增量差額,計(jì)算出共要傳輸?shù)姆止P數(shù)量。
步驟205,向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
在實(shí)際操作中,為了確保在傳輸過程中減小傳輸量,本發(fā)明實(shí)施例還可以通過以下方法向客戶端返回讀取的分筆行情數(shù)據(jù)及差額數(shù)據(jù):
先將所述分筆行情數(shù)據(jù)進(jìn)行變長(zhǎng)壓縮處理生成客戶端傳輸數(shù)據(jù),再將所述客戶端傳輸數(shù)據(jù)發(fā)送至客戶端。
參照?qǐng)D3,示出了本發(fā)明的一種行情數(shù)據(jù)的讀寫方法實(shí)施例的步驟流程圖,其中,所述方法涉及讀線程和寫線程,所述讀線程和寫線程同時(shí)進(jìn)行,應(yīng)用本發(fā)明實(shí)施例,所述寫線程具體可以包括如下步驟:
步驟301,生成分筆行情數(shù)據(jù);
步驟302,針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
步驟303,將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
步驟304,在完成分筆記錄的寫入后,累加分筆記錄數(shù)量;
所述讀線程具體可以包括如下步驟:
步驟305,接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
步驟306,獲取已記錄的分筆記錄數(shù)量;
步驟307,采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
步驟308,從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
步驟309,向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
本發(fā)明實(shí)施例,通過在行情數(shù)據(jù)更新時(shí),生成新的一筆分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù),在預(yù)置存儲(chǔ)區(qū)域中,把這組數(shù)據(jù)各個(gè)字段依次填入,再使用原子操作,累加分筆記錄數(shù)量,當(dāng)下次出現(xiàn)行情更新時(shí),重復(fù)此操作;接收分筆記錄讀取請(qǐng)求,獲取接收分筆記錄讀取請(qǐng)求時(shí)生成的分筆記錄讀取起始時(shí)間,和,已記錄的分筆記錄數(shù)量,采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量,并從分筆記錄中提取分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù),從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù),最后像用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù),通過運(yùn)用本發(fā)明實(shí)施例所述的方法,可以實(shí)現(xiàn)寫線程與讀線程可以并發(fā)同時(shí)進(jìn)行,操作系統(tǒng)提供指令級(jí)別的不能重疊的讀取和寫入操作,確保要讀取或?qū)懭氲淖止?jié)在操作過程中不會(huì)被掛起(中斷),使得系統(tǒng)在讀線程中,只能讀取到寫入前的分筆匯總或是寫入后的分筆匯總,從而獲得邏輯完整的分筆行情數(shù)據(jù),這便保證了在并發(fā)訪問時(shí)寫入線程無(wú)需等待,從而提升了對(duì)行情數(shù)據(jù)的讀寫效率。
對(duì)于本方法實(shí)施例而言,由于其與上述方法實(shí)施例基本相似,所以對(duì)相同部分內(nèi)容就不再贅述。
需要說(shuō)明的是,對(duì)于方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明實(shí)施例并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明實(shí)施例,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作并不一定是本發(fā)明實(shí)施例所必須的。
參照?qǐng)D4,示出了本發(fā)明的一種行情數(shù)據(jù)的寫入系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
數(shù)據(jù)生成模塊401,用于生成分筆行情數(shù)據(jù);
差額數(shù)據(jù)計(jì)算模塊402,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
寫入模塊403,用于將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
數(shù)量累加模塊404,用于在完成分筆記錄的寫入后,累加分筆記錄數(shù)量。
在本發(fā)明一種優(yōu)選實(shí)施例中,所述數(shù)據(jù)生成模塊401還可以包括如下子模塊:
行情源數(shù)據(jù)獲取子模塊,用于獲取行情源數(shù)據(jù);
第一判斷子模塊,用于判斷所述行情源數(shù)據(jù)生成時(shí)間是否在清盤前;若否,則調(diào)用分筆處理子模塊;
第二判斷子模塊,用于判斷所述行情數(shù)據(jù)生成時(shí)間是否處于競(jìng)價(jià)階段,若否,則調(diào)用分筆處理子模塊;
第三判斷子模塊,用于判斷所述行情數(shù)據(jù)是否為異常數(shù)據(jù),若否,則調(diào)用分筆處理子模塊;
分筆處理子模塊,用于將所述有效的行情源數(shù)據(jù)進(jìn)行分筆處理,獲得分筆行情數(shù)據(jù)。
在本發(fā)明一種更為優(yōu)選實(shí)施例中,所述數(shù)據(jù)生成模塊第三判斷子模塊還可以包括如下單元:
成交量判斷單元,用于判斷所述行情源數(shù)據(jù)成交量是否出現(xiàn)倒退;若是,則調(diào)用異常數(shù)據(jù)判斷單元;
時(shí)間判斷單元,用于判斷所述行情源數(shù)據(jù)生成時(shí)間是否出現(xiàn)倒退,若是,則調(diào)用異常數(shù)據(jù)判斷單元;
盤口判斷單元,用于判斷所述行情源數(shù)據(jù)內(nèi)外盤標(biāo)記是否出現(xiàn)錯(cuò)誤,若是,則調(diào)用異常數(shù)據(jù)判斷單元;
分筆處理單元,用于判斷所述行情源數(shù)據(jù)的平均價(jià)格振幅是否超過預(yù)設(shè)閾值,若是,則調(diào)用異常數(shù)據(jù)判斷單元;
異常數(shù)據(jù)判斷單元,用于將所述行情數(shù)據(jù)判定為異常數(shù)據(jù)。
在本發(fā)明一種優(yōu)選實(shí)施例中,所述分筆處理子模塊還可以包括如下單元:
最新價(jià)判斷單元,用于判斷所述行情源數(shù)據(jù)最新價(jià)格是否為0,以及,是否等于其前一次交易的行情源數(shù)據(jù)最新價(jià)格,若所述行情源數(shù)據(jù)最新價(jià)格不為0或不等于其前一次交易的行情源數(shù)據(jù)最新價(jià)格,則調(diào)用提取單元;
成交量判斷單元,用于判斷所述行情源數(shù)成交量是否大于0,以及,是否大于其前一次交易的行情源數(shù)據(jù)成交量;若所述行情源數(shù)成交量大于0或大于其前一次交易的行情源數(shù)據(jù)成交量,則調(diào)用提取單元;
成交額判斷單元,用于判斷所述行情源數(shù)成交額是否大于0,以及,是否大于其前一次交易的行情源數(shù)據(jù)成交額時(shí);若所述行情源數(shù)成交額大于0或大于其前一次交易的行情源數(shù)據(jù)成交額,則調(diào)用提取單元;
提取單元,用于從當(dāng)前有效的行情源數(shù)據(jù)中,提取行情源數(shù)據(jù)代碼、行情源數(shù)據(jù)市場(chǎng)代碼、行情源數(shù)據(jù)生成時(shí)間、行情源數(shù)據(jù)成交額、行情源數(shù)據(jù)最新價(jià)、行情源數(shù)據(jù)成交量、行情源數(shù)據(jù)持倉(cāng)量、行情源數(shù)據(jù)買一價(jià)、行情源數(shù)據(jù)買一量、行情源數(shù)據(jù)賣一價(jià)、行情源數(shù)據(jù)賣一量、行情源數(shù)據(jù)內(nèi)外盤標(biāo)組成分筆行情數(shù)據(jù)。
在本發(fā)明一種優(yōu)選實(shí)施例中,所述差額數(shù)據(jù)計(jì)算模塊402還可以包括如下子模塊:
時(shí)間差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)生成時(shí)間,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)生成時(shí)間差額,并記錄為時(shí)間差;
成交額差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)成交額,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)成交額差額,并記錄為成交額差;
價(jià)格差額計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)最新價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)最新價(jià)差額,并記錄為價(jià)格差;
成交量差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)成交量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)成交量差額,并記錄為成交量差;
持倉(cāng)量差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)持倉(cāng)量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)持倉(cāng)量差額,并記錄為持倉(cāng)量差;
買一價(jià)差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)買一價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)買一價(jià)差額,并記錄為買一價(jià)差;
買一量差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)買一量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)買一量差額,并記錄為買一量差;
賣一價(jià)差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)賣一價(jià),計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)賣一價(jià)差額,并記錄為賣一價(jià)差;
賣一量差計(jì)算子模塊,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù)中的分筆行情數(shù)據(jù)賣一量,計(jì)算其與其前一次交易的分筆行情數(shù)據(jù)的分筆行情數(shù)據(jù)賣一量差額,并記錄為賣一量差。
在本發(fā)明一種優(yōu)選實(shí)施例中,所述數(shù)量累加模塊404還可以包括如下子模塊:
分筆總量記錄子模塊,用于記錄所述累加的分筆記錄數(shù)量為分筆總量;
儲(chǔ)存區(qū)域大小判斷子模塊,用于判斷當(dāng)前分筆總量是否超出預(yù)設(shè)存儲(chǔ)區(qū)域的大??;若是,則調(diào)用寫入終止子模塊;
寫入終止子模塊,用于中止分筆記錄的寫入。
參照?qǐng)D5,示出了本發(fā)明的一種行情數(shù)據(jù)的讀取系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
請(qǐng)求接受模塊501,用于接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
數(shù)量獲取模塊502,用于獲取已記錄的分筆記錄數(shù)量;
分筆記錄及分筆記錄數(shù)量讀取模塊503,用于采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
差額數(shù)據(jù)讀取模塊504,用于從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
數(shù)據(jù)返回模塊505,用于向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,所述數(shù)據(jù)返回模塊505還可以包括如下子模塊:
壓縮子模塊,用于將所述分筆行情數(shù)據(jù)進(jìn)行變長(zhǎng)壓縮處理生成客戶端傳輸數(shù)據(jù);
發(fā)送子模塊,用于將所述客戶端傳輸數(shù)據(jù)發(fā)送至客戶端。
參照?qǐng)D6,示出了本發(fā)明的一種行情數(shù)據(jù)的讀寫系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖,其中,所述方法涉及讀線程和寫線程,所述讀線程和寫線程同時(shí)進(jìn)行,應(yīng)用本發(fā)明實(shí)施例,所述寫線程具體可以包括如下模塊:
第二數(shù)據(jù)生成模塊601,用于生成分筆行情數(shù)據(jù);
第二差額數(shù)據(jù)計(jì)算模塊602,用于針對(duì)當(dāng)前分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
第二寫入模塊603,用于將當(dāng)前分筆行情數(shù)據(jù)及其對(duì)應(yīng)的差額數(shù)據(jù)作為一筆分筆記錄寫入預(yù)置存儲(chǔ)區(qū)域;
第二數(shù)量累加模塊604,用于在完成分筆記錄的寫入后,累加分筆記錄數(shù)量;所述讀線程具體可以包括如下模塊:
第二請(qǐng)求接受模塊605,用于接收分筆記錄讀取請(qǐng)求,所述請(qǐng)求中包括分筆記錄讀取起始時(shí)間;
第二數(shù)量獲取模塊606,用于獲取已記錄的分筆記錄數(shù)量;
第二分筆記錄及分筆記錄數(shù)量讀取模塊607,用于采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量;所述分筆記錄中包括分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù);
第二差額數(shù)據(jù)讀取模塊608,用于從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù);
第二數(shù)據(jù)返回模塊609,用于向用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù)。
本發(fā)明實(shí)施例,通過在行情數(shù)據(jù)更新時(shí),生成新的一筆分筆行情數(shù)據(jù),計(jì)算其與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù),在預(yù)置存儲(chǔ)區(qū)域中,把這組數(shù)據(jù)各個(gè)字段依次填入,再使用原子操作,累加分筆記錄數(shù)量,當(dāng)下次出現(xiàn)行情更新時(shí),重復(fù)此操作;接收分筆記錄讀取請(qǐng)求,獲取接收分筆記錄讀取請(qǐng)求時(shí)生成的分筆記錄讀取起始時(shí)間,和,已記錄的分筆記錄數(shù)量,采用所述讀取起始時(shí)間和已記錄的分筆記錄數(shù)量,在預(yù)置存儲(chǔ)區(qū)域中定位當(dāng)前讀取的第一筆分筆記錄,以及,需要讀取的分筆記錄數(shù)量,并從分筆記錄中提取分筆行情數(shù)據(jù),以及,當(dāng)前分筆行情數(shù)據(jù)與上一筆分筆行情數(shù)據(jù)的差額數(shù)據(jù),從所述第一筆分筆記錄的分筆行情數(shù)據(jù)開始,讀取后續(xù)相應(yīng)數(shù)量分筆記錄中的差額數(shù)據(jù),最后像用戶展現(xiàn)讀取到的分筆行情數(shù)據(jù)及差額數(shù)據(jù),通過運(yùn)用本發(fā)明實(shí)施例所述的方法,可以實(shí)現(xiàn)寫線程與讀線程可以并發(fā)同時(shí)進(jìn)行,操作系統(tǒng)提供指令級(jí)別的不能重疊的讀取和寫入操作,確保要讀取或?qū)懭氲淖止?jié)在操作過程中不會(huì)被掛起(中斷),使得系統(tǒng)在讀線程中,只能讀取到寫入前的分筆匯總或是寫入后的分筆匯總,從而獲得邏輯完整的分筆行情數(shù)據(jù),這便保證了在并發(fā)訪問時(shí)寫入線程無(wú)需等待,從而提升了對(duì)行情數(shù)據(jù)的讀寫效率。
對(duì)于系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說(shuō)明即可。
本說(shuō)明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明實(shí)施例的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明實(shí)施例可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明實(shí)施例可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明實(shí)施例是參照根據(jù)本發(fā)明實(shí)施例的方法、終端設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的系統(tǒng)。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令系統(tǒng)的制造品,該指令系統(tǒng)實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備上,使得在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明實(shí)施例的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明實(shí)施例范圍的所有變更和修改。
最后,還需要說(shuō)明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設(shè)備所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者終端設(shè)備中還存在另外的相同要素。
以上對(duì)本發(fā)明所提供的一種行情數(shù)據(jù)的讀寫方法和一種行情數(shù)據(jù)的讀寫系統(tǒng),進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。