我使用的是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