2011-10-26 38 views
6

我目前正在研究使用MapReduce在SQL Server中維護增量視圖構建的可能性。使用SQL Server作爲數據源的MapReduce

基本上,使用MapReduce來創建物化視圖。

我有點卡住atm。考慮如何分配我的map輸出。現在,我沒有真正的BigData情況,大約50 GB是最大的,但我有很多複雜性和排序 - 隱含的性能問題。我想看看我的這個MapReduce/NoSQL方法是否可以氾濫。

關於MapReduce的事情我目前遇到的問題是分區。由於我使用SQL Server作爲數據源,因此數據局部性並不是我的問題,因此我不需要在整個地方發送數據,相反,每個工作人員都應該能夠檢索數據的一個分區基於map的定義。我打算通過使用LINQ來完全映射數據,也許像Entity Framework這樣的東西,只是爲了提供一個熟悉的界面,這有點不同,但它是我正在探索的當前路線。

現在,我該如何分割我的數據?我有一個主鍵,我有mapreduce在表達式樹(AST,如果你不熟悉LINQ)的定義。

  • 首先,我該如何設計對我來說分裂整個輸入和分區最初的問題(我想我應該能夠利用窗口聚集在SQL Server中,如ROW_NUMBERTILE)的方式。

  • 其次,更重要的是,我該如何確保我逐步完成這項工作?也就是說,如果我添加或更改原始問題,如何有效地確保我最小化需要進行的重新計算量?

我一直在尋找CouchDB的靈感,他們似乎有辦法做到這一點,但我如何利用SQL Server的一些善良?

+0

這個CouchDB是如何關聯的?由於Map-Reduce? –

+0

是的,你可以在這裏閱讀:http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Basics –

回答

1

我面臨着類似的事情。我認爲你應該忘記窗口函數,因爲它使你的進程序列化。換句話說,所有的員工都會等待查詢。

我們測試過的「正在工作」是將數據分區到更多的表(每個月有其x個表),並在這些分區上運行單獨的分析線程。 Reduce後標記已處理/未處理/可能壞/等數據。

測試一個分區表所帶來的鎖定升級問題..

你一定會加一點點複雜到您當前的解決方案。

+0

只要複雜性在某種程度上被管理,我不反對它,聽起來像一個合理的想法。我目前正在調查SQL通知,以此來定義可以異步處理的隊列。 –

+0

我們在我們自己的應用程序中管理異步排隊,但在db中排隊聽起來沒問題。 – pavel242

相關問題