3

ソースコードを読んだ後、非同期SQLデータベース操作のトルネードサポートを望んでいました。

http://www.tornadoweb.org/documentation/_modules/tornado/database.html#Connection

ため息、彼らはバージョンをブロックしています。ここにいくつかの選択肢があります。

プランA:コールバックを使用してreuslt.sorryを返すことを除いて、mysqldbモジュールに似たAPIのセットを見つけます。APIが非ブロッキングmysql操作を処理できる例を示すものは見つかりませんでした。

プランB:ブロックバージョンを使用します。tornadoの作成者が開発者にブロックバージョンを使用するよう提案し、SQLクエリを極端に最適化してブロック期間を短縮することを聞きました。

私の場合:サーバーはピーク時に毎秒2kのリクエストを処理する必要があり、それらのほとんどはデータベースからのクエリと更新が必要です。すべての操作に10ms、10ms * 2kがかかることをお勧めします。これは、マルチスレッドプログラミングでは悪夢です。少なくとも、より多くの平均応答時間でより多くの接続を確立できます。

たぶん私はここでいくつかのポイントを逃しました、私はバックエンド開発の経験があまりありません。しかし、フレームワークが非ブロッキングである間、ブロッキングioapiを使用することはまだ悪い考えだと思います。

プランC:MySqlを削除してmongoDBを使用します。mongoDBにはasyncmongoという名前の非同期Python実装APIがあると聞きましたが、mongoDBを学習し、mongoDBをビジネスの選択肢として採用するリスクはわかりません。

4

1 に答える 1

1

もう 1 つのオプションは、マルチプロセッシング ( http://docs.python.org/library/multiprocessing.html?highlight=multiprocessing#multiprocessing ) をセットアップし、プロセスを DB のキュー マネージャーとして使用することです。

マルチプロセッシングを効率的な SQL クエリと組み合わせると、全体的な影響を最小限に抑えることができます。ブロッキング コールは DB Processing Queue Manager プロセスでのみ実行され、残りのアプリケーションはブロックされることなく実行できます。影響を受けるのは、同時に DB クエリを実行しようとしている人だけです。

于 2012-09-02T10:27:58.107 に答える