質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

258閲覧

RubyでのAPI処理・通信を早くしたい

kzd847686

総合スコア53

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/09/29 16:12

やっていること

Rubyを使いオープンAPIで公開されている為替レートをGETし、その後Rubyで四則演算をし、計算結果を再度APIでPOSTし、為替の合成レートをサーバーへ投げています。
(例えば、USD/JPYとEUR/USDから、EUR/JPYのレートを算出)

発生している問題

処理にかかる時間を早くたいです。
現在のAPIのGETとPOSTがそれぞれ0.1~0.3秒ほどかかりますが、これらを0.01~0.1秒に抑えたいです。為替のレートをリアルタイムで処理するためより速いAPI通信やその処理が必要です。

使用しているソースコード

Ruby

1require 'net/http' 2 3 Net::HTTP::Get 45 Net::HTTP::Post

教えてもらいたいこと

RubyやPC環境の変化できる解決策を教えて頂きたいです。

例えば、
・'net/http'ではない速いライブラリを使う
・RubyMineはない別のIDEを使う (IDEは遅い?)
・OSを変える

補足情報(FW/ツールのバージョンなど)

現在VPSでWindows2016Serverサーバーをレンタルしていて、そこにRubyMineとRubyInstolerをインストールし使っています。
利用しているVPSは変更できませんがOSは変えることができます。
VPSのスペックCPUやメモリは最大のものを利用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回答依頼を頂いたので回答しますが、そこまで深く理解しているわけではないので
質問者様の得たい回答にならないかもしれませんが、ご了承ください。
また、勘違いされているような気がするので、通信処理に関する説明も書きましたが、
実質**「プログラム部分の改善」**が一番速度向上につながるはずです。

現在のAPIのGETとPOSTがそれぞれ0.1~0.3秒ほどかかりますが、これらを0.01~0.1秒に抑えたいです。

通信処理は基本的にAPI提供側(サーバ側)の処理や、送受信するデータの量に応じて変わるので、
取得側で極端に早めることはできないはずです。

クライアント「これとこれに合う条件ののデータください」 ↓ サーバ「ほらよ」

という単純なものではなく、

クライアント「これとこれに合う条件のデータください」 ↓ サーバ「うっす」 サーバ「元データ加工して送れるようにするで」 サーバ「データ量多いから分割して送るで」 ... サーバ「これが最後のデータや受け取れ」

というようにサーバ側でもいろいろ処理したり、データ量の応じて分割したりなどで
サーバ側で時間がかかる場合があります。
アクセス集中してるときなんかは病院の待ち時間みたいに待たされることもあります。

そういう理由でデータの取得に関する通信部分では大幅な改善はあまり見込めないでしょう。
(データ取得できるところがいくつかあるなら変わるかもしれません。)
他に改善できる点としては大きく分けてプログラム部分の処理とPC環境に分けられます。

プログラム部分の改善

通信中の処理を大幅改善する方法は上記理由から難しいですが、
通信前および通信後の処理を改善することで全体の処理速度を上げることは可能です。
※限界はあります

たとえば通信時になにかデータを渡すのであれば、なるべく渡すデータの加工をしないとか、
取得するデータの期間や量を必要最低限にするなどが考えられます。
通信後、取得したデータを加工する場合もアルゴリズムを見直して無駄な処理を省くなど
そういう点で改善できる点はあるかと思います。
取得したデータは膨大なことが予想されるので、特に無駄なループや再帰処理は省くとか
そもそも取得時に処理するものとアクション時(クリックして詳細出すとか)に処理するもので
最低限の処理だけを行うように分割するとかで改善できるかと思います。

・'net/http'ではない速いライブラリを使う

ご提示いただいた一アイディアのこちらはプログラム部分の改善になりますね。
が、これが標準のライブラリなので、特殊な通信処理をしないのであればこれが一番良いと思います。
ただ、これ系統のライブラリを使用したことがないので推測ですが、せいぜいデータ通信の際の
いろいろな項目の指定をやりやすくしたものだと思うので、大幅な改善にはならないと思います。

PC環境

PC環境というかネットワーク部分も含めてですが、そもそもの機器の性能の改善によって
速度を早める方法があります。
(個人で使用する場合の想定なので、無特定多数の方に使用してもらうものを開発しているのであれば
こちらの対策は個々の環境に寄るものなので全くの無意味なものになります。)

CPUやメモリなど、簡単に言えばハードウェア部分の性能が高いほど処理速度が早くなります。
また、ご利用のネットワーク速度によっても速度は向上します。
極端に言えば最大100Mbpsのネットワークと最大1Mbpsのネットワークでは100Mbpsの方が
理論上は早いということになります。
また、使用しているLANケーブルや無線規格がその速度に対応しているかかとかにもよります。

その他

・OSを変える

提供されているサービスによって異なるのでなんとも言えませんが、
OSを変えることでハードウェア部分の性能が変わるなら改善の見込みはあります。
(あっても微々たるものな気がしますが。)
あとは他のプロセスが動いてるかとかによって変わります。


最初にも書きましたが、おそらく質問者様が改善できるところがあるとすれば
プログラム部分の改善しかないように思います。

投稿2018/10/01 03:24

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kzd847686

2018/10/03 05:18

ありがとうございます。一つ一つ大変勉強になります。 具体的にできることはプログラミング部分の改善でPostするデータは変えようがないので、その後の処理受け取った後のアルゴリズムの見直しをしたいと思います。 丁寧にご説明頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問