2016-06-27 8 views
0

私はウェブサイトの記事をたくさん保存し、ユーザがシステムを通してこれらの記事を変更できるようにするウェブサイトのコンテンツ管理システムを作成しています。私は典型的なSQL Serverの開発者ですが、おそらくこのシステムをDocumentDBで実行できると思っています。

私たちはC#とWebAPIを使って読み書きを行います。私は、異なるデータアクセス技術をテストして、どちらが優れているかを確認しています。私はLing、Linq Lambda、SQL、Stored Procedureを試しています。私がPostman経由でテストすると、これらのクエリメソッドはすべて600ms〜700msの間に実行されているようです。たとえば、私のテストの1つは、簡単なGet http://localhost:xxxxxx/multilanguage/resources/1です。これには600ms以上かかるでしょう。これはわずか1kbの文書で、これまでのところ私のコレクションには5つの文書しか保存されていません。

私は尋ねたいことは、これよりもDocumentDBをより迅速に照会する方法があるかどうかということです。私が尋ねる理由は、前にSQL Serverで何か似たようなことをしているからです(リレーショナルテーブル用のクエリドキュメントではありません)。複数の結合されたテーブルのストアドプロシージャではるかに複雑なクエリは約300msかかるだけです。だから私はこれを行うためのより速い方法があるはずだと思います。

ご意見ありがとうございます!DocumentDBにはどのデータアクセス技術が優れているのですか

+0

ようこそ。それが立っているように、質問には本当に多くの情報がありませんし、意味のある答えを提供できるほど具体的でもありません。 "より速い/より良い"のような質問は、[良い質問とはみなされません](http://stackoverflow.com/help/dont-ask)です。 [*私はどのように良い質問をしますか](http://stackoverflow.com/help/how-to-ask)を見て、それに応じてあなたの質問を再構成してください。 – ardila

+0

私は、DocumentDBに対するHTTP呼び出しの待ち時間を長くするネットワーク境界に関連する問題があると考えていました。私はnode.jsをHTTP上でしか話しません。私は私の家から走るとき、最低250msの往復を見ます。しかし、AzureはDocumentDBと同じデータセンターでnode.jsをホストしており、これらの呼び出しからの待ち時間は10ms未満です。私の生産node.js環境がAzureデータセンターにあるので、あまり心配していません。私たちのライブテストとアドホックな探索的な作業にのみ影響します。 –

+0

しかし、.NET側では、直接TCP接続のレイテンシがはるかに短いことを理解しています。 –

答えて

0

実装をスタブに変更すると、実際にはサーバーとクライアント(郵便配達員)間の接続時間をテストしているため、同じパフォーマンスが得られます。

0

できることはいくつかありますが、DocumentDBや他のNoSQLソリューションは標準のSQL Serverとは大きく異なる動作をすることに注意してください。たとえば、DocumentDBに使用可能なノードとRAMが多いほど、全体的にパフォーマンスが向上します。 Azure上のDocumentDBの開発インスタンスは、当然、本番インスタンスより少ないリソースを使用する予定です。 Azureはスケーリングを処理するので、それについて考える方法の1つは、実行するデータの量が増えれば増えるほどです。

つまり、あなたのアプリケーション全体で接続オブジェクトを共有しているとは思わないでしょう。これにより、データを取得するたびにスタートアップのペナルティを回避できます。 Performance Tipsを要約:

  • 使用TCPコネクションの代わりに、HTTPSあなたは
  • 使用await client.OpenAsync()同じ地域内DocumentDBに最初の要求
  • 接続のレイテンシを起動時に一時停止を回避するために(場合心に留めておくことができますあなたはSelfLinksはチューンに
  • 迅速なアクセスのためにキャッシュ
  • あなたのページサイズをthaのように、地域全体でホスト)
  • DocumentDB(それのスレッドセーフにアクセスするためにシングルトンを使用)
  • 使用するデータのみを取得する

などの表索引ポリシーなど、より高度な文書データベースとNoSQLデータベースは、SQLデータベースとは動作が異なります。つまり、APIの仕組みについてのあなたの前提が間違っている可能性もあります。同様の概念をテストしていることを確認してください。 SQL Serverデータベース接続オブジェクトでは、トランザクションごとにオブジェクトを作成または破棄して、それらの接続を接続プールに戻すことができます。同じ方法でDocumentDBを処理すると、接続プールを使用しなかった場合と同じようなパフォーマンス上の問題が発生します。

+0

DocumentDBが初めて出たとき、私たちはセルフリンクをキャッシュしていましたが、IDベースのルーティングを導入して以来、私たちはクライアントサイドを生成したりローカルに保持するIDからそれらを構築します。私たちは、IDベースのルーティングの使用によるパフォーマンスの低下は見ていません。 –

+0

@LarryMaccherone、私はElasticSearchでより多くの時間を過ごしたので、私は自己リンクであなたの言葉を取っていきます。基本的なポイントは、NoSQLをテストして対話する方法がSQLデータベースを使用する方法と大きく異なることです。私は地域内のバックボーンが非常に高い帯域幅を持っていると確信しています。そのため、接続速度の問題はそれほど問題になりません。 –

関連する問題