2013-01-20 78 views
3

我正在開發基於雲的業務應用程序。用戶可以將文檔和其他類型的對象上傳到應用程序。用戶上傳相當多的文檔,並共同存儲數百萬個文檔。我使用SQL Server。OData適用於多租戶LOB應用程序嗎?

今天我有一個有點平靜的API,它允許用戶傳遞一個DocumentSearchQuery實體,在那裏它們提供關鍵字以及請求排序順序和分頁信息。他們得到一個DocumentSearchResult,它實質上是一個對實際文檔的引用的排序集合。

我現在想將搜索API擴展到除文檔以外的其他實體類型,我正在研究如何使用OData。但我得到的印象是,如果我使用OData的,我會面臨幾個問題:

  • 有哪些領域的用戶可以查詢這意味着,無論是PERF將取決於他們是否查詢索引字段沒有內置限制或者不必,或者我將不得不實施我自己的傳入OData請求解析,以確保它們只查詢索引字段。 (由於這是一個多租戶應用程序,它們共享物理硬件,所以慢速查詢並不是真正可以接受的,因爲這會影響到其他客戶)
  • 無論我用於訪問後端數據都需要支持IQueryable。我目前正在使用實體框架來做到這一點,但我將來可能會使用其他的東西。這意味着我很可能需要再次對傳入查詢進行解析。
  • 沒有內置的支持來限制用戶可以訪問的數據。我需要驗證傳入的Odata查詢以確保他們訪問他們實際有權訪問的數據。

我不認爲我想沿着手動解析傳入表達式樹的路來確保它們只嘗試訪問他們有權訪問的數據。這看起來很麻煩。

我的問題是:考慮到上述情況,OData在多租戶環境中使用合適的協議,其中客戶編寫他們自己的訪問實體的客戶端?

回答

1

我認爲這裏很適合。讓我給你,你認爲你會面臨的問題提出了看法:

有哪些領域的用戶可以查詢,這意味着 ,要麼在PERF將取決於他們是否查詢索引的字段或沒有內置限制 不,或者我將不得不實施我自己的解析傳入的OData 請求,以確保它們只查詢索引字段。 (因爲它是一個 多租戶應用程序,它們共享物理硬件,慢 查詢是不是真的可以接受的,因爲這些會影響其他客戶)

真。但是,您可以檢查過濾器中允許的字段以允許操作或拒絕它。

無論我用什麼來訪問後端數據,都需要支持 IQueryable。我目前正在使用實體框架這樣做,但我可能會在未來使用其他東西。這意味着它可能是 ,我需要再次對傳入查詢進行自己的解析。

是的,有一個EF的提供者。這意味着如果你將來使用其他東西,你將需要編寫自己的提供者。如果您更換EF,您可能會提前做出決定。在這種情況下,我不推薦WCF DS。

沒有內置支持來限制用戶可以訪問的數據。我 需要驗證傳入Odata查詢,以確保他們訪問他們實際上有權訪問的數據 。

對WCF數據服務沒有任何支持。但是,這是授權機制的一部分,無論如何您都需要實施。但是我對你有好消息:用QueryInterceptors做這件事很簡單。只需截取查詢,並基於用戶權限。這是你必須獨立使用你所使用的技術來實現的。

我的回答:考慮到以上情況,WCF數據服務是一個適合多租戶環境的協議,客戶編寫自己的客戶端訪問實體,至少您更改了EF。你應該記住它爲你節省的巨大努力。

+0

我已經更新了我的答案。 – lontivero