上海銀天下科技有限公司 許文偉
手持設備中股票軟件數據存儲方案的設計
上海銀天下科技有限公司 許文偉
就股票軟件而言,它的歷史數據有著自身的一些特點。文章通過對相關數據的特性,以及線性表與B+樹兩種方案進行分析,發現兩種存儲方案都符合手持設備中股票軟件的相關要求,并從性能和資源方面對二者的優劣進行了比較,希望本研究可以作為廣大研究者的參考。
手持設備;股票軟件;數據存儲;存儲方案;方案設計
在目前的科技影響下,一些手持設備的出現,為人們的工作于生活帶來相當大的便利。比如數據圖片、股市信息的接收方面。對于股票軟件來說,對相關硬件與運行環境的要求通常會比較高。文章通過對線性表、B+樹進行分析,并在相關方面做了比較,可以從中得知,在實際應用過程中,應當結合相關實際情況來對儲存方案進行選擇。
在當前背景下,證券投資行業發展速度較快。對于這方面數據的類型而言,一般分為以下幾種:分時走勢、即時成交、歷史日線、個股F10資料和財務公告等方面的信息。在股票軟件的開發過程中,如果要使軟件更加完整,不但需要把實時的相關交易行情提供給廣大用戶,還要把一些分析歷史成交數據的方法提供給廣大用戶,這樣才能符合用戶的各種需求。
所以,在軟件數據中,大概有兩種信息需要完成儲存處理。一種是當天的分時走勢與實時行情方面的信息,還有一種是歷史日線、F10資料、財務公告方面的信息。就第一種數據的儲存來講,要想合理地節約空間,可以選擇字節流的手段,把它儲存在內存里面當作刷新方面的處理功能,但只能在短時周期里進行。而第二種數據信息則應當存進SD卡里面,它需要進行長時期的存放。[1]對于財務公告信息、F10資料信息而言,對其儲存方面的定義相當明確,就是存為一些小文件。對于歷史日線方面的數據信息則需要在SD里進行儲存,它的內容顯得較長,應當長期存留。
2.1 線性表存儲分析
2.1.1 線性表的結構分析
對于線性表來說,它是一種較為常見的數據結構,其結構比較簡單,順序儲存的結構是在軟件的內存里面,建立起可以聯系儲存的空間。然而,這片空間在大小上有較為嚴格的要求,它不能夠比順序表所具有的長度還小。同時,在連續空間里面,它的第一個位置應當儲存線性表里面的首個元素,第二個位置儲存第二個元素,依此類推,直到線性表的中元素儲存完畢為止。
由此可得,在線性表上面,如果兩元素在邏輯關系方面比較接近,那么他們的物理存儲位置也會比較接近,這是線性表結構中循序儲存比較明顯的特征。如此一來,根據這個特點,在相關的儲存單元里面,對于每一個數據方面的元素而言,要想將它和初始位置的相對位置確定下來,就顯得非常容易了。
假如在線性表上,元素是(a1,a2,…,an,),其中,a1是線性表上的第一個元素,它的內存地址是LOC(a1)。在計算機了面,每一個現行表上的元素都會占有C個儲存單元。而第i個遠的的初始位置LOC(ai)=(i-1)*C+LOC(a1)。在這個公式里面,n≥ i ≥1。由此可見,當采用隨機訪問的時候,可以使用順序表來完成。對于它的順序儲存結構而言,就是進行隨機儲存的一種結構。
2.1.2 線性表結構的純出方案分析
對于日線數據信息的儲存而言,它需要在SD卡中進行合理保存。在對這些數據信息進行讀取的時候,需要通過相關的文件系統,對SD卡進行相應的操作才能完成。[3]同時,這種情況下的讀寫操作,隨機性比較強。在對股票歷史相關的日線數據信息進行儲存時,可以選擇線性表順序儲存結構,這種儲存方式能夠使讀寫方面的操作速度更加完善。
在File header的功能方面,它在線性表中起著重要作用,能夠儲存股票代碼的索引表,初始化的值都是零。在股票代碼的儲存數量方面,如果2048個就是最大限度,那么,每一個代碼就需要4byte。如此一來,它的索引表最終需要的儲存空間就是8Kbyte。
在Code Block的功能方面,主要是用來儲存每個股票儲存日線數據塊的。對于它儲存的數據方面來說,應該嚴格執行相關的順序來進行儲存,即股票代碼的索引表的順序。同時,在股票代碼的數量方面,File header同Code Block也是一樣的。如此一來,每一個數據塊同File header里面的代碼存在著重要聯系,它們在存儲和邏輯順序方面具備一一反應的特點。
在Date Block的功能方面,它是將一支股票特定的某天的日線數據信息進行儲存,而它的順序就是按照年月日方面的時間順序來定的。在時間限制方面,需要根據實際當中的需求和相應的資源條件來確定它的范圍大小。在每一個日線數據塊里面,Date Block都是24byte。
而在同一個股市里面,可能會出現這樣的情況。那就是有些股票的代碼是一樣的,然而股票卻不是一樣的。[4]在這種類型的日行文件里面,股票的最大數量是2048個,且時間方面的最長范圍是19年(不含雙休)從而,就可以就此將每一個文件大小計算出來。其算法就是260×19×24×2048+2048×4,最終結果就約等于247nyte。在這種算法面,股票代碼的索引表是前面的8Kbyte。由此可得,在儲存深市和滬市的日線文件時,大概需要占據的空間是495Mbyte。
2.1.3 標志變量列表方面的分析
根據前文中的內容可以得知,在同一天時間里,日線數據可以進行循環滾動地發送。對于一個股票來說,在同一天時間里面,它的日線數據可以不用刷新。因此,需要每次收到日線數據后,應當先對日線數據進行判斷,分析后覺得有必要再進行寫入。在這個列表里面,File header和Data flag 在儲存順序方面,表現出來的是一樣的。這樣一來,就能夠同Code Block形成一一對應了,并用來標志Code Block有沒有完成當天的寫操作步驟。另外,每一次進入股票軟件時,都需要把列表進行復位,并且全部置零。
2.1.4 讀寫方面的原則
只有在終端界面上,用戶查看股票的K線圖時,才有從SD里面把相關股票全部日線數據讀出來的必要。同時,在這種情況下進行的讀取,可以不用進行周期刷新。由此可知,讀取數據的相關措施就是:對于股票代碼而言,需要現在索引表里面找到與之相匹配的代碼位置,并把Code Block相關的偏移地址給計算出來,然后按照這個地址,就可以把全部日線數據讀出來。
對于寫數據來說,需要現將相關的日線數據解析出來以后,再進行這個步驟。并且把相關數據信息儲存到SD卡里面。對于股票的日線數據而言,凡是支持的數據都要進行保存,這使得數據量非常龐大。應當對這些數據進行一定的優化操作,從而使寫操作不會那么頻繁。其措施主要是,將一個寫循環緩沖定義到內存,如果緩沖區域已經被日線數據占據,并在對另一支股票的日線數據進行接收操作時,就需要依靠該列表的作用,判斷這支股票的日線數據有沒有寫進去。[5]如果沒有完成,就需要進行寫操作,并在列表里面把data fl ag置位,并標注清楚,不然的話,緩沖區就會被新的數據所覆蓋。
2.2 B+樹結構存儲分析
2.2.1 B+樹的原理分析
對于B+樹結構來說,其實就是從B樹變化而來,在查找方面,與B樹有很多相似的地方。在業界店里面,儲存著與記錄相關的數據信息。在查找過程中,如果待查關鍵碼在上層發現,且不停下,可向下將葉節點層關鍵碼找到。除此之外,葉節點能夠組成有序鏈表,能夠根據關鍵碼的次序來遍歷所有的記錄。由此可得,在范圍搜索方面,B+樹顯得較為合適。并且,它的實際應用很多,如隨機和順序檢索等。
2.2.2 存儲方案分析
在SD卡里面,可以分配一個“/stock”的專用目錄,對股票的數據進行儲存。如果是財務相關的公告,或者是F10的資料,可以根據各自的文件名稱,儲存這個目錄下面。但是,在SD卡中,其日線數據就會組織為2個文件了。即數據記錄文件和索引文件,同時,SD卡中的文件系統可以被確認成FAT16。磁盤空間被FAT劃分開來,并將簇當作是單位。[6]對于一個磁盤簇長度而言,它相當于512byte。對于索引文件內容來講,通過B+樹的索引,相應的數據記錄信息儲存到數據文件里面,并且應4byte對齊。
在數據文件里面,相關的組織方式根據定長記錄來決定,每一條記錄和日線數據項都要形成對應關系。針對于日線數據來講,它缺少刪除節點的選項,儲存是依靠一點點積累起來的。但它具備更新與插入選項,這樣,進行也快管理的時候就方便多了。對于管理也快非配的對來說,并不要求去進行維護,只需要把遞增值記錄下來就行了。
在日線數據的相關文件里面,頭部位置空出一個記錄的長度來,以便可以對個數等信息和標志進行記錄。
對于索引指針來說,它的長度一般為4byte。在長度方面,它完全符合相關要求。它可以對4G個單元進行索引。通俗一點的說法為,數據項大致約為數百年,所以從長度方面來看完全不用擔心。
如果葉節點的扇出系數假設成56,不是葉節點的是57,將滬深股市2046支股票進行計算,大約能夠有四層B+樹,差不多可以儲存19年的日線數據占據的空間大概是330Mbyte。就四層樹來說,如果要得到查詢的結果,執行不超過五次的讀操作就能夠實現了。[7]針對于索引文件時,一般都為整個節點快方面的操作。如果是單個操作的話,所涉及到的節點最多不會超過三個。
綜上所述,對于手持設備這種股票軟件的應用要求而言,上述方案均能夠滿足,只是二者相比之下,各有優勢和劣勢,主要表現在各自的性能發揮和資源的損耗方面。首先,在時間方面,經過實踐驗證,將22天日線數據寫入,其大小差不多是528byte,如果使用線性表來進行操作,時間大概為9秒,B+樹則遠遠低于先形變的方案,只要十來毫秒就可以完成。其次,在空間的占用方面,條件一樣的情形下,線性表為495Mbyte,B+樹要少得多,只需要330Mbyte。但是,在實際的應用過程中,應當從股票軟件等方面的具體情況出發,選擇于實際更相吻合的方案來進行操作。
[1]劉井蓮,趙衛績,文海霞.基于關聯規則的股票分析軟件的設計與實現[J].通化師范學院學報,2012,08:30-32.
[2]悠蘭.自信滿滿做一生的贏家——對話漢諾威環球財富有限公司創始人、股票交易算法軟件的研發者易革新[J].中國高新區,2015,05:66-67.
[3]祁建宏,達文姣.線性表成組鏈式存儲結構研究[J].制造業自動化,2017,02:104-105+119.
[4]耿慶田,狄婧,常亮,趙宏偉.基于B+樹的數據索引存儲[J].吉林大學學報(理學版),2013,06:1133-1136.
[5]長孫妮妮,張毅坤,華燈鑫,鄒子夏,陳浩.一種基于B+樹的混合索引結構[J].計算機工程,2012,14:35-37+40.
[6]梁俊杰,肖瑤,余敦輝.MapReduce框架下基于B+樹的高維索引[J].計算機應用研究,2016,03:706-710+715.
[7]楊萬清,戚欣革,欒敬釗,李振威,姜學樸.電力大數據存儲方案設計[J].東北電力技術,2015,12:41-43.