内部構造から理解するMySQL」をWeb掲載用に再編集したものです。データの操作がイメージできれば誰でもできる』が2019年8月26日に発売されました。本記事と併せてご活用ください。「NoSQLはRDBMSより高速」は本当か?NoSQLが登場したころ(あるいは,今でも⁠)⁠,「⁠NoSQLはRDBMSに比べて20倍高速」などというホワイトペーパーが出たりすることがあり,「⁠20倍」という表現が独り歩きすることがよくありました。この倍率については,レコード長やページサイズ,その他もろもろのチューニング項目をどうするかで,いかようにも変化しますからほぼ意味がないうえ,実際のシステムでそれほどの差が出ることはありません。Store)として利用できるプラグインのHandlerSocketと,MySQLを,もう少し現実的な実験を通して比較し,処理速度の違いと,NoSQLを選ぶポイントについて解説します。本稿では,HandlerSocketの産みの親である松信嘉範氏のブログ(http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html)を参考にさせていただきます。4ポート搭載のサーバに対して,リスト1(テーブル構造はリスト2)のSQLをmysqlslap注1を用いて1,000万回処理し,1秒間に何件処理できるかを測定しました。注1負荷エミュレーションクライアントで,負荷テストを簡単に実現するツールです。ENGINE=InnoDB;同様の条件で,C/C++で書いたクライアントソフトから,memcached,HandlerSocketのそれぞれで1,000万回処理し,1秒あたりの処理件数を測定しました。結果は図1のようになりました。SQLに対して,memcachedは4倍速く,HandlerSocketは7倍速いという結果になりました。53%速度差を処理を分解して考えてみる松信氏の実験は1,000万回処理したときの差ですが,1回の処理をさらに,リクエスト(ネットワーク処理)SQLのオーバーヘッド(SQLだけにある)データの読み取り処理レスポンス(ネットワーク処理)に分解して,どこの処理に時間がかかっているかを推測してみましょう。HandlerSocketはMySQLのAPIを利用しSQLのオーバーヘッド(第3回で挙げた「DBエンジンがSQL実行前に行う内部処理⁠」⁠)をショートカットしています注2。そのため,データの読み取り処理の部分だけを比べればSQLと同じ処理時間になります。memcachedもほぼ同じと仮定します。そこから,多くのホワイトペーパーなどで報告されているとおり,SQLのオーバーヘッドとデータの読み取り処理の時間が20倍以上になるように調整します。security:セキュリティ機能はない」という制限がつく理由も理解できるでしょう。第3回の「DBエンジンがSQL実行前に行う内部処理」の中の,「⁠DBオブジェクトに対する権限チェック」を行わないため,権限がなくても参照したり,更新したりできてしまうわけです。次に,リクエストとレスポンスを加え,松信氏の実験結果のようにSQLの全体の処理時間がmemcashedの4倍程度,HandlerSocketの7倍程度に調整すると,図2のようになります。SQL,memcached,HandlerSocketの処理の内訳イメージそれぞれの倍率はレコード長やページサイズ,そのほかのパラメータを調節することで簡単に変わりますから,倍率(数値)には意味がありませんが,大きな傾向は変わりません。ここで筆者が言いたいことは,処理時間のほとんどが「ネットワーク処理とSQLのオーバーヘッドで費やされている」ということです。1レコードを取得するだけでも,第3回で挙げた「DBエンジンがSQL実行前に行う内部処理」が行われているということを思い出してもらえると,図2のSQLのオーバーヘッドのサイズは大げさではないと理解できるのではないでしょうか。ネットワークという遅いデバイスを使うことで内部処理を高速化した効果が大幅に打ち消されてしまっていることもわかります。系SQLORMを利用していると,知らず知らずのうちに大量のSQLを発行するということが起こりがちです。「⁠ぐるぐる系」というのは,「⁠N+1問題」とも言われる問題で,何重にもSQL文のループをまわすような処理のことを言います。cityテーブルのCountryCodeに該当する国名をcountryテーブルから取得する際に,まずcityテーブルを全件取得するSQLを1回発行し,その後countryテーブルから国名を取得するSQLをcityテーブルのレコード件数回発行するのが「ぐるぐる系」SQLです。それに対して,同じ結果を得るのにテーブルをJOINするなどして,1つのSQLで全データを取得する方式を本稿では「一発系」SQLと呼びます。Store)を使うと,集計処理などをDBサーバ側で処理できないため,ぐるぐる系にならざるを得ません。NoSQLを使うことでSQLのオーバーヘッドはなくなりますが,ネットワークに関する遅いデバイスを何度も繰り返し利用することになります。松信氏の実験では,1件だけを繰り返し取得する「SQLのぐるぐる系」と「NoSQLのぐるぐる系」の比較になっています。松信氏の仕事では,プライマリーキーを指定して1件のデータを取得する処理が多いそうです。そのケースに当てはまらないシステムやゲームもあるでしょう。筆者は「SQLのぐるぐる系」を「一発系SQL」に直すというチューニングの仕事を何度も行っていますが,数十倍〜数千倍のパフォーマンスになることはまったく珍しくありません。7倍差があっても,「⁠一発系」にできるなら簡単に逆転してしまいます。ユーザアクションに対して1件のレコードしか必要がない要件の場合には,一括で処理することはできませんからNoSQLのほうが速いということが言えます。どの程度の処理をまとめることができるかは,ゲーム(システム)の要件によってまちまちですから,どちらが速いと決めることはできず「個々に判断が必要」ということになります。傾向としては,処理が複雑になるほどSQLのほうが速くなると言えます。残念なことに筆者の経験上,「⁠ぐるぐる系」と「一発系」を比較対象にしている事例は見たことがありません。そのような検証をまったくせずに,「⁠NoSQLは○○倍速い」という独り歩きした謳い文句を信じてNoSQLを選択しているプロジェクトも数多くありました。SQLか,NoSQLかを決めるには,「⁠ユーザアクションに対して1件のレコードだけを処理する」機能がどれぐらいあるかを考えなければいけません。そのような要件が多い場合には,NoSQLに適したゲーム(システム)ということになります。「⁠ユーザアクションに対して複数のレコードを処理する」機能が多いのであればSQLのほうが有利です。多くの場合,「⁠どちらもそれなりにある」ということになり,とくにゲーム系では,「⁠ユーザアクションに対して1件のレコードだけを処理する」ということが業務系に比べて多くなりがちです。APIを併用することが望ましいでしょう注3。RDSではHandlerSocketを利用できません。フリーランスのエンジニアを経て,2003年に株式会社ジーワンシステムを創業する。その後,プレイングマネージャーとして多くのシステム開発に従事し,現在ではデータベースを中心としたコンサルティングを行っている。データの操作がイメージできれば誰でもできる本書は,SQLの文法は学んだもののSQLに苦手意識を持っているITエンジニアのための書籍です。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。