Как ускорить пост HTTP-запрос в RoR - PullRequest
0 голосов
/ 30 марта 2012

Я хочу оптимизировать запрос 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, этот метод делает строку изображения длиннее, и я должен сохранить память

1 Ответ

0 голосов
/ 30 марта 2012

Как вы можете видеть, большая часть времени уходит на запись в базу данных (246,2 мс) - какую базу данных вы используете?

Если вам нужна быстрая база данных, вы можете использовать нереляционную базу данных, например redis или mongoDB .Когда вы говорите, что должны сохранить «память», это означает, что дисковое пространство или оперативная память?Поскольку такие нереляционные базы данных хранят данные в ОЗУ (не волнуйтесь, есть постоянные возможности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...