ストレージドライブ
StockSharp のストレージドライブは、市場データの物理的な配置を担当します。配置先はローカルディスクまたはリモートサーバーです。基底インターフェイス IMarketDataDrive は、すべての実装に共通する契約を定義します。
IMarketDataDrive -- 基底インターフェイス
IMarketDataDrive インターフェイスは、次の主要な機能を提供します。
- Path -- データストレージへのパス。
- GetAvailableSecuritiesAsync() -- ストレージ内で利用可能なすべての銘柄リストを取得します。
- GetAvailableDataTypesAsync() -- 特定の銘柄で利用可能なデータ型のリストを取得します。
- GetStorageDrive() -- 特定の銘柄およびデータ型のストレージドライブを取得します。
- VerifyAsync() -- ストレージの整合性を検証します。
- LookupSecuritiesAsync() -- 指定した条件で銘柄を検索します。
LocalMarketDataDrive -- ローカルファイルストレージ
LocalMarketDataDrive クラスは、ファイルシステム内のローカルディスクにデータを保存する主要なドライブ実装です。
主な機能
- ファイルシステム -- データは、銘柄と日付ごとの階層ディレクトリ構造で整理されます。
- インデックスシステム -- 内部の
Indexクラスは、ファイルシステムをスキャンせずに高速なデータアクセスを提供します。インデックスファイルは{instrument_path}{file_name}Dates2.bin形式で保存されます。 - スレッドセーフ -- マルチスレッドアプリケーションで正しく動作するように、データアクセスはロック機構によって保護されます。
- インデックス構築 --
BuildIndexAsync()メソッドにより、大量データ操作後のパフォーマンス向上のためにインデックスを再構築できます。
使用例
// 指定したパスでローカルドライブを作成します
var localDrive = new LocalMarketDataDrive(Path.Combine(
Directory.GetCurrentDirectory(), "Storage"));
// ストレージレジストリで使用します
var storageRegistry = new StorageRegistry
{
DefaultDrive = localDrive,
};
// 利用可能な銘柄のリストを取得します
await foreach (var secId in localDrive.GetAvailableSecuritiesAsync())
{
Console.WriteLine(secId);
}
RemoteMarketDataDrive -- リモートストレージ
RemoteMarketDataDrive クラスでは、ネットワーク経由で市場データにアクセスするために、リモート Hydra サーバーへ接続できます。
接続設定
- アドレス -- リモートサーバーアドレス。既定値は
127.0.0.1:5002です。 - Credentials -- 認証資格情報(Email と Password)。
- TargetCompId -- 対象コンポーネント識別子。既定値は
"StockSharpHydraMD"です。 - SecurityBatchSize -- 銘柄を読み込む際のバッチサイズ。既定値は 1000 です。
- Timeout -- 接続タイムアウト。既定値は 2 分です。
使用例
// リモートドライブを作成します
var remoteDrive = new RemoteMarketDataDrive
{
Address = "192.168.1.100:5002".To<EndPoint>(),
Credentials = { Email = "user", Password = "pass".Secure() }
};
// 銘柄で利用可能なデータ型を取得します
var secId = "AAPL@NASDAQ".ToSecurityId();
await foreach (var dataType in remoteDrive.GetAvailableDataTypesAsync(secId, StorageFormats.Binary))
{
Console.WriteLine(dataType);
}
リモートストレージの操作に関する詳細は、リモートストレージの操作 セクションを参照してください。
DriveCache -- ドライブ管理
DriveCache クラスは、ストレージドライブのコレクションを管理し、再利用のためのキャッシュを提供します。
主なメソッドとプロパティ
- GetDrive(path) -- パスによって既存のドライブを取得するか、新しいドライブを作成します。
- DeleteDrive(drive) -- キャッシュからドライブを削除します。
- TryDefaultDrive -- 最初に利用可能な LocalMarketDataDrive。
- NewDriveCreated -- 新しいドライブ作成のイベント。
- DriveDeleted -- ドライブ削除のイベント。
- Changed -- ドライブコレクション変更のイベント。
このクラスは IPersistable インターフェイスを実装しており、ドライブ設定の保存と読み込みを可能にします。
使用例
// 既定のローカルドライブを持つキャッシュを作成します
var defaultDrive = new LocalMarketDataDrive(Path.Combine(
Directory.GetCurrentDirectory(), "Storage"));
var driveCache = new DriveCache(defaultDrive);
// パスによってドライブを取得または作成します
var anotherDrive = driveCache.GetDrive(@"D:\MarketData");
// イベントを購読します
driveCache.NewDriveCreated += drive =>
Console.WriteLine($"Drive created: {drive.Path}");