STSdb 4.0 說明文檔
介於本人英語水平有限,如果有任何錯誤請留言,謝謝。
簡單實例
- 打開數據庫並且創建一個簡單的表
2.從表中讀取
存儲引擎
STSdb 4.0 的存儲引擎是基於瀑布樹TM 實現的。存儲引擎提供了兩種數據結構—XIndex和XFile。一個存儲引擎可以包含多個 XIndex表和多個XFile文件。
XIndex
XIndex是一個已經排序的鍵值存儲映射(表)。我們可以在一個存儲引擎中利用不同類型的鍵值打開不同屬性的表。並且在每個表的行數上沒有任何限制。
提示:engine.Commit() 提交所有已經刷新的表的更改。在正式發布的每個表,Commit() 方法將會被忽略
-
XIndex<TKey,TRecord> 支持的類型
TKey和TRecord支持的類型有:
1.1. 基本類型—Boolean,Char,SByte,Byte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Single,Double,Decimal,DateTime,String,byte[];
1.2. 擁有默認構造函數的類或結構體,並且特性的類型是公共的,類型是1.1.中指定的
1.3. 擁有默認構造函數的類或結構體,並且特性的類型是公共的,類型是1.1.和1.2.中指定的
如例子,如果我們擁有以下兩種類型:
我們可以打開不同類型的表:
乃至:
至於復合鍵,引擎比較子鍵,在排序已經聲明的特性。
2.XIndex<TKey,TRecord> 方法
XIndex<TKey,TRecord> 實現了 IIndex<TKey,TRecord> 接口。
基本用戶方法:
默認的XIndex枚舉正序遍歷表的行
Forward() 方法正序遍歷表的行
Backward() 方法反序遍歷表的行
FindNext() 返回大於或等於指定行的第一個(如果存在)
FindAfter() 返回大於指定行的第一個(如果存在)
FindPrev() 返回小於或等於指定行的第一個(如果存在)
FindBefore() 返回小於指定行的第一個(如果存在)
FirstRow 返回鍵最小的那一行
LastRow 返回鍵最大的那一行
異步改變XIndex的內容的方法——他們會產生一定的操作在瀑布樹中
- This[TKey key] set;
- Replace(TKey key, TRecord record);
- Delete(TKey key);
- Clear();
3.XIndex<TKey,TRecord> 基礎
正如我們所提到的,每個儲存引擎可以處理不同類型的XIndex<TKey,TRecord> 表.每個TKey和TRecord可以是任何基本類型、結構體或者類。但是在所有的情況下,每個XIndex<TKey,TRecord> 使用一個指定的非通用 XIndex 表來存儲它的數據。
當一個 XIndex<TKey,TRecord> 被創建后,它將利用.NET表達式自動生成並且編譯轉換代碼以便將每個TKey和TRecord 對象轉換成能夠支持 IData 對象。因此,從一個數據庫的觀念來看,XIndex<TKey,TRecord> 經過應用數據層和內置數據層之間的轉換層之后快速的呈現。即使開發者可能使用了自定義類型的應用數據,也保證了內置存儲的獨立性。
4.XIndex 和IData 繼承
XIndex 表和內部繼承的IData一起工作。在STSdb 4.0 中被忽略
當前版本的TKey和TRcord最大可以支持64個位置。每個位置可以是任何基本類型。
以下代碼演示了直接使用非通用的XIndex的情況
數據轉換器將會盡力的將IData類型轉換成應用類型。他們由XIndex<TKey,TRecord>和XIndex表之間的轉換層構成。所有轉換器看起來像:
每個XIndex<TKey,TRecord> 實例自動實現兩種數據轉換 - 一種是keys另一種是records。那么每個輸入的TKey/TRecord對象會被轉換成適當的IData對象。同樣的,每個來自XIndex的IData對象都已經被隱藏的轉換成了TKey/TRecord.
假設我們現在有以下類:
如果我們有XIndex<long,Tick>
然后XIndex表將會被以下兩種類型的,keys和records打開:
我們可以同時打開后台的 XIndex表
最終 table 和 table2 將會得到同樣的數據
如果我們決定擴展Tick類的property,改成非基本類型。
然后后台XIndex將會采用以下類型被打開
如果我們決定排除 Symbol 和 Timestamp 並且采用他們作為復合鍵:
然后后台XIndex將會采用以下類型打開:
XFile
STSdb 4.0 通過使用XFile以支持稀疏的文件。我們可以跟使用.NET流一樣使用XFile。
注:新版中部分方法已經與本教程有一定的出入