2012-03-30 17 views
0

投稿HTTPリクエストを最適化します。私のシステムはサーバーとクライアントで構成されています。 クライアントはイメージを送信し、サーバーはそれをデータベースに保存します。RoRで投稿HTTPリクエストを高速化するには

この要求されます。

res = Net::HTTP.post_form(uri, :mac => 'String', :value => 'ImageData(stringa di 22k circa)')

サーバーは、データベースと、この操作を行います。私の意見で

Started POST "/events/save_photo" for 192.168.0.113 at 2012-03-30 09:27:27 +0200 
     Processing by EventsController#save_photo as */* 
     Parameters: {"data_type"=>"image", "value"=>"!binary |\n   /9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhE...(very long parameter", "created_at"=>"2012-03-     30 09:26:29 +02:00", "mac"=>"00606E91E5D2"} 
    WARNING: Can't verify CSRF token authenticity 
     `[[ (0.3ms)] [1mSET PROFILING=1] 
     [[Device Load (1.2ms)] SELECT SQL_NO_CACHE `devices`.* FROM `devices` WHERE `devices`.`mac` = '00606E91E5D2' LIMIT 1 
     [[CACHE (0.0ms)] [1mSELECT `devices`.* FROM `devices` WHERE `devices`.`mac` = '00606E91E5D2' LIMIT 1] 
     [[(0.4ms)] BEGIN 
     [[SQL (2.3ms)] [INSERT INTO `multimedia` (`created_at`, `data`) VALUES ('2012-03-30 07:26:29', x'f22b19237b63f1c8c40da49ae5eb68969dd3cf28193ba...',)] 
     [[ (61.9ms)] COMMIT 
     [[ (0.2ms)] [BEGIN] 
     [[SQL (0.6ms)] INSERT INTO `events` (`created_at`, `data_type`, `device_id`, `element_id`, `multimedia_id`, `name`, `status`, `updated_at`, `value`) VALUES ('2012-03-30 07:26:29', 'image', 23, 163785, 1065577, 'photo', NULL, '2012-03-30 07:27:28', '--- 0\n...') 
     [[ (36.6ms)] [COMMIT] 
     [[35m (0.3ms)] BEGIN 
     [[ (0.4ms)] [SET PROFILING=1] 
     [[ (1.1ms)] SELECT SQL_NO_CACHE 1 FROM `devices` WHERE (`devices`.`mac` = BINARY '00606E91E5D2' AND `devices`.`id` != 23) LIMIT 1 
     [[ (0.8ms)] [UPDATE `devices` SET `elem_photo_id` = 163804, `updated_at` = '2012-03-30 07:27:30' WHERE `devices`.`id` = 23] 
     [[ (78.9ms)] COMMIT 
    Rendered events/save_photo.html.erb (0.2ms) 
    Completed 200 OK in 358.4ms (Views: 11.6ms | ActiveRecord: 246.2ms)` 

この時間は受け入れられません。私はこの操作がより速くなるだろう!出来ますか?

は、私は、この方法は、画像の文字列を長くするのBase64を使用していない注意を作り、私はメモリ

+0

なぜ、合計時間は358msですか?表示時間+ ActiveRecord時間は257msですか? – Dabidi

+0

イメージをファイルシステムに保存すると、パフォーマンスが向上します –

答えて

0

あなたは、データベースへの書き込み時間の大半が費やされている見ることができるように保存する必要があります(246.2ms) - どのデータベースを使用していますか?

高速データベースが必要な場合は、redisまたはmongoDBのような非リレーショナルデータベースを使用できます。あなたは 'メモリ'を節約しなければならないと言うと、ディスクスペースまたはRAMを意味しますか?そのような非リレーショナルデータベースはデータをRAMに保存するため(永続的な可能性があることを心配しないでください)。

+0

ディスク容量....サーバマシンはハードディスクに余裕のあるスペースがなく、システムは多くのイメージを保存する必要があります – Dabidi

+0

しかし、私はMySqlを使用しています...今、私はコードを変更し、クライアントは1回のリクエストで10枚の写真を送信します。サーバーはそれを保存するために1,9秒を費やしました...しかし、要求の合計時間は3,8秒です! :-S 私は何ができますか? – Dabidi

+0

なぜ画像データをデータベースに保存していますか?画像データを画像ファイルに書き込むことは、私が推測するように速くなるでしょう。単にデータベースに書き込むには**時間がかかります**。これは私の目ではなく、MySQLのパフォーマンスに関する質問です。実際にデータベースに画像データ文字列を格納する必要がある場合は、[MySQLパフォーマンスのヒント](http://forge.mysql.com/wiki/Top10SQLPerformanceTips)を参照してください。 –

関連する問題