我使用的是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)
我的問題,你是:
- 這是一個不好的設計?
- 有沒有另一種方法呢?
- 我是否需要在實體框架方面改進性能?
退房[上淺談這個優秀的文章(https://www.red-gate.com/simple-talk/dotnet/net-tools/entity-framework-performance-and-what-you-can-做-有關,它在這個題目 –
/)是其很好的article.thanks @marc_s – TDM