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