2012-12-10 37 views
0

我有一些我想在MongoDB中建模的股票價格數據。邏輯上,每個股票價格都有一個日期,股票名稱和與之相關的價格。該應用程序的主要目的之一是模擬股票價格的每日變化。如何在MongoDB中建模每日增量

我有兩個問題與這個問題有關。

1)如果在MongoDB中對這類數據進行建模,我將在其上運行這種查詢,最好的方法是什麼?

更新!我做了一些實驗,並決定對數據進行非規範化處理,並確保我有適當的列索引。實際上,我沒有發現嵌套數據的性能差異,這是我正在運行的查詢類型的一部分,它使編寫聚合例程的過程變得複雜。感謝您的建議Raxit!

2)鑑於1)在MongoDB中編寫這些日常更改樣式查詢的最佳方式是什麼?


所以現在我有一個文件每個日期和股票。

{ 
    {"stock":"Bob", 
    "date":"2012-12-01", 
    "price":99.99       
    }, 
    {"stock":"Bob", 
    "date":"2012-12-02", 
    "price":99.99       
    }, 
    {"stock":"Bob", 
    "date":"2012-12-03", 
    "price":99.99       
    }, 
    {"stock":"Ted", 
    "date":"2012-12-01", 
    "price":99.99       
    }, 
    {"stock":"Ted", 
    "date":"2012-12-02", 
    "price":99.99       
    }, 
    {"stock":"Ted", 
    "date":"2012-12-03", 
    "price":99.99       
    }, 
    . 
    . 
    . 


} 

我2想法:

我想要生成顯示股票價格的日變化報告。鑑於文檔大小的限制,我可能需要將其分解爲每股和每年的增量,但這更多的是實現細節。本質上我想輸出文件的形式:

{ 
{"stock":"Bob", 
      "prices": {[{"fromDate":"2012-12-01","toDate":"2012-12-02","delta":-1.0}, 
        {"fromDate":"2012-12-02","toDate":"2012-12-03","delta":-1.0}, 
        . 
        . 
        .]} 
}, 
{"stock":"Ted", 
      "prices": {[{"fromDate":"2012-12-01","toDate":"2012-12-02","delta":1.0}, 
        {"fromDate":"2012-12-02","toDate":"2012-12-03","delta":1.0}, 
        . 
        . 
        .]} 
}, 
. 
. 
. 
} 

理想情況下,我希望能夠在特設的基礎上返回這些數據。我很確定這可以使用map-reduce來完成,但我想知道是否有一種方法可以使用新的聚合框架來實現這一點?在我開始研究mongodb之前,我曾假設用這種方式進行建模改變將是一個很不常見的用例,但到目前爲止,我還沒有遇到任何相似的事情。

你可以給任何建議是非常有用的。隨着我自己的研究進展,我會更新這篇文章。

謝謝,

馬特。

回答

1

它看起來像上面兩種情況下你的嵌入式文檔裏的數據被改變(添加)!

怎麼樣結構簡單 {stockname: '鮑勃',日期:日期1,價格:200} { stockname: '鮑勃',日期:DATE2,價格:220} 等?

甚至

{stockname: '鮑勃',日期:DATE2,價格:200,lastdate:DATE1,pricedelta:(price2-價格1)}

+0

有固有於添加到嵌入的問題在MongoDB中收集?您非常正確的說,每當新數據進入時我都需要更新價格集合。在此應用程序中,寫入性能並不是優先考慮因素,因爲我打算一次性批量插入所有特定日期的庫存數據。主要關注於讀取性能,這就是爲什麼我在考慮嵌入。 – Sigmoidal

+0

與我建議與適當的指數一起去。 –

+0

我會嘗試這兩種方法,看看性能差異。如果嵌入時沒有巨大的性能優勢,我會按照您的建議去做。謝謝。 – Sigmoidal