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

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

新規登録して質問してみよう
ただいま回答率
85.50%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1188閲覧

RDBMSで提供されている関数は場合によりアプリサーバで全データ取得して処理した方が早いって本当ですか?

hojo

総合スコア195

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2015/11/05 04:24

編集2015/11/05 05:44

タイトルの話を耳にして、とても驚いているのですが、スケールアウトの話は抜きにしてRDBMSで提供されている関数を実行するより、RDBMSから全データ取得してアプリケーションサーバのプログラム(PHPとかRubyとかPythonとか)で処理した方がパフォーマンスが上がることがあるって本当ですか?

今までRDBMSで提供されている関数は高速だから、アプリケーションサーバで処理しない方がパフォーマンスが上がると思っていました。

ぜひ意見をお聞かせください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ケースバイケースだと思いますが、
例えば殆ど更新されない(更新頻度が決まっている)ようなマスターデータがあったとして
アプリケーション側で全レコード高速なメモリ上にキャッシュして、高速に一意に取得できるような仕組みがローカルに用意出来て(例えばローカルのmemcachedやNoSQLDB)、かつ一意のキーでしかデータを取得しないような場合はDBから取得するより早く処理できますね。

途中にネットワークが存在したり、メモリとHDDの様な保存場所が違う場合、処理系の差による実行速度の差とは数桁違うオーダーでオーバーヘッド発生することが多いので、こういった場合はキャッシュによって、総合的な処理速度がローカル側で行った方が早いはずです。

また、「RDBMSの関数」が例えばRANDみたいな関数といった意味なのであれば、
スクリプト側で用意するのに比べて高速になるということは無いと思います。
そのRDBMSがCで書かれてるとしたら、ローカル側もCで書かれたライブラリを叩けばいいでしょうし。

あとは、DB設計が残念な場合やRDBMSで扱うのに向いていない構造だったりして、RDBMSとしてそもそもパフォーマンスが出せないような状態だとアプリケーションで頑張った方がマシというケースもあると思います。

アプリケーション側にどこまで仕事をさせるかは難しいところではありますが、
RDBMSが不得意なところやキャッシュ回りは積極的にフロントエンドで実装して問題無いと思います。

投稿2015/11/05 05:29

tanat

総合スコア18709

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

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

hojo

2015/11/05 05:44 編集

なるほど、普段MySQLを使うことが多く、MySQLがCで作られているのだとしたら単純な関数の場合、RDBMSで作られたものを利用した方が高速になりますよね。memcachedの話も、とても参考になりました。
guest

0

全体の処理にかかる時間は、「DBサーバの処理時間」+「データの転送時間」+「呼び出した側での処理時間」となります。

取ってきたデータに対して、三角関数を使う複雑な演算をかけるとかだったら、SQLでは書きにくいし、科学技術計算向けのシステムではないので、フロントエンド側で処理した方がいいでしょう。一方、5万件のレコードから3件に絞り込むような場合には、DBサーバで絞り込みまでを済ませるべきです。

ともかく、「推測より計測」です。詳細もわからない噂程度の話に右往左往するより、自分で実際に使う条件に合わせて測定した上で判断しましょう。

投稿2015/11/05 04:38

maisumakun

総合スコア145121

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

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

hojo

2015/11/05 05:45 編集

なるほど、複雑な計算ではなく、sumやcountのようなシンプルな演算の場合でアプリサーバで処理した方がパフォーマンスが上がるというようなことはやはりありませんよね。安心しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問