2011-04-24 164 views
1

我正在開發一個將在Windows Azure中託管並使用表數據存儲(TDS)的c#web應用程序。生產非Azure IIS服務器上的Windows Azure TDS仿真

我想構建我的應用程序,以便我還可以(作爲選項)將應用程序與其他NoSql後端部署到傳統IIS服務器。基本上,我想讓我的客戶選擇以軟件作爲服務模式向我付款,或者購買我的應用程序的許可證,以便他們可以安裝在他們自己的(非天藍色)生產服務器上。

如何最好地構建我的數據層和中間層來實現這兩個目標?

我可能需要Windows Azure工作者角色和Azure隊列。複製這些有多複雜?我可以用自定義的Windows服務和其他排隊技術替代嗎?

我該如何編寫數據模型中的實體,以便在不部署到Azure時將其部署到Azure TDS或其他存儲? MongoDB或類似的會對此有用嗎?

當然,有一種方法可以爲Azure構建而不必與之結合。

回答

0

我發現了一個可行的解決方案。我發現如果我使用與Azure表存儲需要的RowKey複合鍵結構相同的PartitionKey設計我的實體,則可以將EF Code First用於SQL Server或SQL CE。

通過Lokad Cloud(http://code.google.com/p/lokad-cloud /)的一些幫助來執行與Azure表存儲的交互,我能夠製作一個通用的DataContext,它可以針對EF的DbContext或Lokad的TableStorageProvider提供crud操作。

我甚至找到了一種很好的方法來管理實體之間的關係,並正確地加載它們。

該解決方案有點複雜,需要更多測試。我會寫博客,並在準備好時發佈鏈接。

+1

忘記它。經過一個月的反覆試驗,歸根結底,表格存儲僅僅是針對關係型數據而設計的。我正在切換到SQL Azure。 – 2011-05-25 21:04:24

2

我可能需要Windows Azure工作者角色和Azure隊列。複製這些有多複雜?我可以用自定義的Windows服務和其他排隊技術替代嗎?

是的 - 具有其他一些排隊技術的Windows服務可以很好地適應這種情況 - 而且工作角色具有主/運行循環,這在Windows服務中很容易使用。

如何編寫數據模型中的實體,以便在不部署到Azure時將其部署到Azure TDS或其他存儲? MongoDB或類似的會對此有用嗎?

NoSql是一個通用術語,封裝了許多不同的技術。我認爲Azure TDS目前屬於NoSql的Key-Value存儲系列,而MongoDB更像是一個提供比TDS更豐富的功能的文檔數據庫 - 請參閱http://en.wikipedia.org/wiki/NoSQL_(concept)。對於模仿Azure TDS,我認爲也許Redis之類的變體可能會起作用(儘管我相信Redis本身目前具有更廣泛的功能,然後TDS目前)

一般來說,它取決於您的數據的形狀,但我懷疑如果可以適合Azure TDS,那麼您也可以將它適用於您選擇的其他存儲。

當然,有一種方法可以爲Azure構建而不必與之結合。

是的 - 正如您在您的問題中提出的建議,您可以構建您的應用程序,以便它可以在其他技術上工作。實際上,這對於傳統的SQL數據抽象方法來說是一個相當類似的挑戰。然而,我認爲有幾個地方你會發現TDS會在某些 的方向上推動你,這些方向與其他商店不太吻合。 Azure將更多地推動數據複製;對密鑰有特別的規定;使用非常具體的機制提供高性能;並在非常特殊的情況下提供有限的交易完整性這些因素可能意味着您必須確實更改一些中間層以及一些數據層,以便在Azure和非Azure變體中充分利用您的應用。

另一個想法 - 在Azure上爲您的客戶提供多租戶SaaS版本和在Azure上託管單一版本可能更容易 - 但這取決於客戶端!

+0

感謝您的詳細信息。關於您的最後一點,我針對非Azure版本的客戶主要是I​​ntranet方案,其中對最終用戶的訪問受限或無法訪問。所以,好主意 - 但不行。我會看看Redis。謝謝。 – 2011-04-24 16:43:36