2012-03-29 57 views
0

我是新來的多播數據饋送處理,我的問題是什麼是在數據流上創建一個簡單的過濾器的最佳方法。C++多播數據饋送過濾器

我正在編寫一個應用程序來處理流媒體財務數據,例如在紐約證券交易所交易的所有股票的股票價格。數據流看起來像這樣。

SJYM2 Quote: Bid=91.265000, 4 Ask=91.330000, 4 
6SM2 Quote: Bid=1.105500, 23 Ask=1.105800, 5 
RFM2 Quote: Bid=1.204500, 6 Ask=1.205000, 7 
6SM2 Quote: Bid=1.105500, 24 Ask=1.105800, 5 
6SM2 Quote: Bid=1.105500, 25 Ask=1.105800, 5 
6SM2 Quote: Bid=1.105500, 26 Ask=1.105800, 5 
6SM2 Quote: Bid=1.105500, 27 Ask=1.105800, 5 
6SM2 Quote: Bid=1.105500, 28 Ask=1.105800, 5 
GEH3-GEZ3 Quote: Bid=23.500000, 325 Ask=24.500000, 1501 
GE:BF_M2-H3-Z3 Quote: Bid=-15.500000, 936 Ask=-14.000000, 16 
GEM3-GEU3 Quote: Bid=7.500000, 21823 Ask=8.000000, 79 
GE:DF_H3H4H5H6 Quote: Bid=-21.000000, 6 Ask=-19.000000, 4 
NGG3-NGQ3 Quote: Bid=-0.162000, 2 Ask=-0.081000, 1 
NGH3-NGU3 Quote: Bid=-0.185000, 3 Ask=-0.102000, 1 
BZK2 Quote: Bid=123.970000, 1 Ask=124.120000, 1 
BZ:C1_HO-BZ_K2 Quote: Bid=11.100000, 1 Ask=11.320000, 1 
BZ:C1_RB-BZ_K2 Quote: Bid=17.060000, 1 Ask=17.310000, 1 
BZM2 Quote: Bid=123.250000, 1 Ask=123.460000, 1 
BZN2 Quote: Bid=122.530000, 1 Ask=122.920000, 1 
CLK2-BZK2 Quote: Bid=-18.770000, 1 Ask=-18.610000, 1 
BZK2 Quote: Bid=123.970000, 1 Ask=124.110000, 5 
BZ:C1_HO-BZ_K2 Quote: Bid=11.110000, 1 Ask=11.320000, 1 
BZ:C1_RB-BZ_K2 Quote: Bid=17.070000, 2 Ask=17.310000, 1 
BZM2 Quote: Bid=123.250000, 1 Ask=123.450000, 5 
BZN2 Quote: Bid=122.530000, 1 Ask=122.910000, 1 

如果我只BZN2興趣,BZK26SM2數據,什麼是創建一個簡單的過濾器來拉只有那些數據的最佳方式?

謝謝。

回答

1

由於標記始終位於字符串中的第一位,因此可以將每個傳入字符串拆分空間,將第一個子字符串與使用strcmp()的一組模式進行比較。 你也可以在這裏使用regexp,但這不是必需的。

最好的解決方案(我不知道你的情況是否可能)是從服務器端過濾輸入流,即選擇註冊流時需要的標記。

+0

我想過使用strcmp(),但問題是我可能需要爲20個不同的股票拉數據,所以對於每條新消息,我可能必須經過20 strcmp(),有沒有更快的方法來解決這個問題? – 2607 2012-03-29 02:48:18

+0

如果此前端問題對您的性能至關重要,那麼最好的方法是將'strcmp || strcmp || strcmp || ......用詞法分析器。有一種可能的解決方法 - 您可以收集有關最頻繁標記的統計信息並首先進行比較。 – iehrlich 2012-03-29 02:52:36

+0

你能否提供一個替代strcmp ||的例子strcmp || strcmp || ...用詞法分析器?我在考慮將20個符號放入std :: map,然後調用map.find()方法。謝謝。 – 2607 2012-03-29 03:02:39