我使用 SQL Server 和实体框架作为 ORM。
目前我有 5 个带有静态数据的大型表。实际上这些表只用于数据检索过程。
我会用我的项目举一个很好的例子。
这是与旅行相关的项目,我必须明智地存储我的酒店静态数据 API(实际上有酒店预订 api。他们为我们提供酒店静态数据)
我必须处理世界范围内的酒店数据。这意味着超过 100,000
如果我们得到 1 家酒店,它包括所有酒店详细信息,如设施、历史...... 明智的图像 url。
这些数据我得到了城市明智的
比方说 Paris XML 或 Json - 我在那个文件中有 1000 多个酒店详细信息。这意味着 10MB 或 20MB 文件大小。
在城市方面,一个 API 有超过 40000 行。一些 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;
现在我的问题是这个静态数据检索部分很慢。
当用户键入Paris
并开始搜索时,我的网站在 Azure 应用服务上发布后,此过程会变慢。
(现在我正在为一个静态数据集执行此操作 - 一个 API 包括城市明智的酒店数据行 50000,每行明智包括 500 多家酒店。前巴黎城市行 - 15mb)
我对你的问题是:
- 这是一个糟糕的设计吗?
- 还有另一种方法吗?
- 我需要在实体框架方面进行性能改进吗?