0

我使用的是SQL Server和實體框架的ORM。SQL Server和實體框架性能改進

目前,我有5代大表與靜態數據。實際上這些表僅用於數據檢索過程。

我會給出我的項目很好的例子。

  • 這是旅遊相關的項目,我必須來存儲我的家靜態數據API明智的(實際上也有經濟型酒店預訂API,他們爲我們提供了酒店的靜態數據)

  • 我不得不面對世界各地酒店數據。這意味着超過100000

  • 如果我們得到1家酒店,它包括所有酒店的詳細信息,如設施,歷史..... image url like wise。

  • 這些數據我越來越聰明市

    比方說,巴黎XML或JSON - 我有超過1000的酒店詳情只有一個簡單的文件。這意味着10MB或20MB的文件大小。

    市英明有超過40000行的一個API。一些API超過70000.

  • 始終最終用戶搜索城市明智,所以現在我將這些數據城市明智地存儲在我的SQL Server中。因爲酒店明智地保存這些數據實際上減慢了我們的速度

現在我將提供我的技術支持細節。

  • 我使用Azure的SQL Server和ASP.Net MVC 4項目
  • 網站在Azure的應用服務託管
  • 我使用數據庫第一種方法在EF

我會告訴你我的數據庫結構。這很簡單。

CREATE TABLE [dbo].[SD_HotelsMNS] 
(
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [DestinationCode] [varchar](20) NOT NULL, 
    [DestinationXML] [xml] NULL, 
CONSTRAINT [PK_SD_HotelsMNS] PRIMARY KEY NONCLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 

我的主鍵是ID(身份&非羣集),我的指數是DestinationCode因爲我總是在代碼目的地(市)搜索酒店。

這些靜態數據更新應該每年進行10次或更少。

在我的項目方面,如果我想要一些目標靜態數據我應該怎麼做?正在寫LINQ查詢

string citycode = "paris"; 
    ExampleEntities entities = new ExampleEntities(); 
    var cityData = entities.SD_HotelsMNS.FirstOrDefault(i => i.DestinationCode.Equals(citycode)); 

    string xml = cityData.DestinationXML; 

現在我的問題是這樣的靜態數據檢索部分是緩慢的。

當我的網站在Azure應用服務上發佈時,當用戶鍵入Paris並開始搜索時,此過程變得越來越慢。 (現在我正在做一個靜態數據集 - 一個包含城市智能酒店數據行50000的API,每行包括500多家酒店。 前巴黎城市行 - 15MB)

我的問題,你是:

  • 這是一個不好的設計?
  • 有沒有另一種方法呢?
  • 我是否需要在實體框架方面改進性能?
+0

退房[上淺談這個優秀的文章(https://www.red-gate.com/simple-talk/dotnet/net-tools/entity-framework-performance-and-what-you-can-做-有關,它在這個題目 –

+0

/)是其很好的article.thanks @marc_s – TDM

回答

0

是的,這是非常糟糕的設計。您基本上使用SQL Server作爲XML文檔的文件存儲。您可以使用Entity Framework進行優化,以加快速度。

我建議您將XML中的數據標準化爲常規列,以便您可以根據需要創建索引和關係。然後你可以只選擇你需要的列,而不是500行的15MB數據,你可能會看幾千字節。

+0

感謝您的reply.Actually當我們要求提供酒店城市wise-從API一邊,他們就會給我們更多的200個多家酒店阿比明智的。 實際上,我的設計在設計中很糟糕,我只使用一個請求。 然後實際上我必須通過200列明智地通過做你的情況檢索數據? – TDM

+1

您需要設計一個數據庫模式(包含關係的多個表)來保存您的數據。你只是存儲非常緩慢的XML。你不妨使用NoSQL –

+0

其實後來我做了修改,我把這些大小減少到了800kb(15mb文件),我只用了我需要的那個scema.and創建簡單的jason文件並存儲它。我可以在microsft azure中不使用sql嗎? – TDM