0

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側でパフォーマンスを向上させる必要がありますか?
+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サーバーをXML文書のファイルストレージとして使用しています。エンジニアリングフレームワークでこれをスピードアップする最適化はありません。

XMLのデータを通常の列に正規化して、必要に応じて索引や関係を作成できるようにすることをお勧めします。次に、必要な列だけを選択して、数キロバイトを見ているかもしれない500行に対して15MBのデータを選択することができます。

+0

返信いただきありがとうございます。実際に私たちは利用可能なホテルをリクエストしたときに、api側から200以上のホテルApi wiseを提供します。 私のデザインは実際には1つのリクエストしか使用していません。 実際には、私はあなたのシナリオを実行してデータを取得するために200カラムを賢明に調べなければなりませんか? – TDM

+1

データを保持するためにデータベースベースのスキーマ(リレーションシップを持つ複数のテーブル)を設計する必要があります。非常に遅いXMLを保存しているだけです。あなたはNoSQL –

+0

を実際に使用することもできます。後で修正しました。これらのサイズを800kb(15mbファイル)に減らしました。私はscema.andで必要なものだけを取り出し、簡単なjasonファイルを作成し、it.canをmicrosft azureで使用しませんでした。 – TDM

関連する問題