1

最初にEFコードを使用してasp.net * MVC *アプリケーションを作成しています。私はデータベースとしてSQLazureを使用していました。しかし、SqlAzureは信頼できないことがわかりました。だから私はデータベースにMySql/PostgreSQLを使うことを考えています。

パフォーマンスに関して、最初にMySql/PostgreSQLでEFコードを使用することの影響/影響を知りたいと思いました。誰かがこのコンボを本番環境で使用したことがありますか、またはそれを使用したことがある人を知っていますか?

編集
私はSqlAzureで次の例外を取得し続けます。

SqlException: "*A transport-level error has occurred when receiving results from the server.* 
(provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"

    SqlException: *"Database 'XXXXXXXXXXXXXXXX' on server 'XXXXXXXXXXXXXXXX' is not
 currently available. Please retry the connection later.* If the problem persists, contact
 customer support, and provide them the session tracing ID of '4acac87a-bfbe-4ab1-bbb6c-4b81fb315da'.
 Login failed for user 'XXXXXXXXXXXXXXXX'."
4

1 に答える 1

1

まず、問題はおそらくISPのネットワークの問題のようです。リモートのPostgreSQLまたはMySQLデータベースを取得することを検討することをお勧めします。同じ問題が発生すると思います。

次に、MySQLとPostgreSQLのパフォーマンスを比較するのは比較的難しいです。一般に、MySQLはpkeyルックアップ用に最適化されており、PostgreSQLはより一般的に複雑なユースケース用に最適化されています。これは少し低レベルかもしれませんが....

MySQL InnoDBテーブルは、基本的に、リーフノートにテーブルデータが含まれるbtreeインデックスです。主キーはインデックスのキーです。主キーが指定されていない場合は、主キーが作成されます。これは2つのことを意味します:

  1. select * from my_large_table物理的な注文スキャンがサポートされていないため、速度が低下します。

  2. Select * from my_large_table where secondary_index_value = 22つのインデックストラバーサルが必要です。2次インデックスは主キー値のみを参照します。

対照的に、インデックスにはデータが含まれているため、主キー値の選択はPostgreSQLよりも高速になります。

比較すると、PostgreSQLは情報を順序付けられていない方法で一連のヒープページに格納します。インデックスはデータとは別のものです。主キーでプルする場合は、インデックスをスキャンし、データが見つかったデータページを読み取ってから、データをプルします。それに比べて、セカンダリインデックスからプルする場合、これはそれほど遅くはありません。さらに、テーブルは、長時間実行するときにシーケンシャルディスクアクセスが可能になるように構成select * from my_large_tableされているため、オペレーティングシステムの先読みキャッシュでパフォーマンスを大幅に向上させることができます。

要するに、クエリが主キーによる単純な結合なしの選択である場合、MySQLはより良いパフォーマンスを提供します。結合などがある場合は、PostgreSQLの方が適しています。

于 2013-04-23T04:30:39.887 に答える