SQL ServerとEntity FrameworkをORMとして使用しています。SQL ServerとEntity Frameworkのパフォーマンスの向上
現在、私は静的データを持つ大きな5つのテーブルを持っています。実際には、これらのテーブルはデータ取得プロセスにのみ使用されます。
私のプロジェクトには良い例があります。
これは旅行関連プロジェクトであり、私は賢い私のホテル静的データAPIを格納する必要があり(実際にAPIを予約ホテルがあります。彼らは私たちのホテル静的データを提供)
私はワールドワイドに対処する必要がホテルのデータ。我々は1軒のホテルを取得する場合には、10万人以上の
を意味し、そのような施設、歴史.....賢明のような画像のURLなど、すべてのホテルの詳細を含んでいます。私は街賢い
を取得しています
これらのデータは、のは、パリのXMLやJSONを言ってみましょう - 私はその単一のファイルにホテル詳細1000以上のものを持っています。これは、10MBまたは20MBのファイルサイズを意味します。
1つのAPIに4万以上の行があります。いくつかの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があります。
これらの静的データ更新は、1年に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アプリケーションサービスに公開された後、このプロセスは遅くなります。
(今私は1つの静的データセットのためにこれをやっている - 都市賢いホテルデータ行50000を含むものAPIは、各行が賢明な500軒の以上のホテルがあります。 EXパリ市内行 - 15メガバイト)あなたに
私の質問は以下のとおりです。
- これは悪いデザインですか?
- 別の方法がありますか?
- Entity Framework側でパフォーマンスを向上させる必要がありますか?
[このシンプルトークの優れた記事](https://www.red-gate.com/simple-talk/dotnet/net-tools/entity-framework-performance-and-what-you-can-このトピックにつきましては –
はい非常に良いarticle.thanks @marc_s – TDM