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

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

ただいまの
回答率

90.04%

データベースにmysqlをつかうメリットは何ですか

解決済

回答 6

投稿

  • 評価
  • クリップ 3
  • VIEW 1,264

YoSa

score 39

mysqlを学習してるのですが
mysqlを使う利点って何でしょうか?調べている内に
書き方によってセキュリテイーが突破されるとか
クエリの書き方によって遅くなるとか聞いたのですが
じゃあなんのメリットがあるのかと思いました。
テキストファイルじゃ都合が悪いのでしょうか?
mysqlの文法を覚えなくて済むならそうしたいし
またc言語のように木構造やソートのアルゴリズムを
phpで構築できないものでしょうか?
よろしくお願いします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

checkベストアンサー

+4

MySQLに限らず、DBと呼ばれるものが使われるのには理由があります。

 処理速度がテキストファイルを読むより圧倒的に速い

小規模なら別に気にならないかもしれませんが、データ数が多くなれば多くなるほどその差は如実に現れます。
100万件の中から該当の1件を探すのも、テキストファイルを頭から読み込んで探すのに比べると数分かかる作業がDBを使えば0.1秒未満程度で終わります。

 データのつながりを表すのが得意

人物、所有している書籍、住所等をテキストファイルで管理しようとすると、すごく煩雑になります。あとから得意料理、学歴などのデータを追加しようとするとよりカオスになるでしょう。
しかし、DBはそういったデータ管理や追加等が得意です。1つのデータに複数のデータを結びつけることが簡単にできます。

 集計等を出す機能が備わっている

DBにはSUM、COUNTといった集計機能があります。人物の総合計、東京在住の平均年齢、カレーを得意料理とする人物の人数をデータから一瞬で求めることができます。テキストファイルで管理していた場合、それら全てを自分で実装しなければなりません。

とまああげたらキリがないほど利点があります。

またc言語のように木構造やソートのアルゴリズムを 
phpで構築できないものでしょうか? 

検索したらポンポン出てきますよ。
http://qiita.com/kiimiiis/items/ae931c9b5ff67085e7d2
http://php.net/manual/ja/array.sorting.php

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/17 09:54

    100万件のデータから1件取るのに
    1分もかかるんですね。そこまでのデータ量で調べたことが無かったもので・・・
    phpの木構造もあるんですね。参考になりました。これについても調べてみます。
    あちがとうございました

    キャンセル

+2

テキストファイルじゃ都合が悪いのでしょうか? 

数百件程度のデータなら、自前で扱うコードを書いてもどうということはないのですが、数十万件、数千万件、数億件とデータが増えていくと、一致するデータを探すだけで大変なデータ量を処理しないといけなくなってしまいます。

データベースサーバでは、データ構造を工夫したり、インデックスをつけたりすることで、膨大な量のデータに対しても現実的な速度で操作できるようにしています。

またc言語のように木構造やソートのアルゴリズムをphpで構築できないものでしょうか?

もちろん、PHPでできなくはないのですが、C言語と比較すると相当に速度が遅いので、大きなデータは実用的な時間では扱えなくなってしまいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

恐らく質問者様はデータベースというものを理解していないと思われます。
テキストファイルとは全くの別物です。
少量のデータではあれば、テキストファイルで扱って、自力で処理しても恐らく何の問題もないでしょう。
しかし何百万件というデータをいくつも連結させて検索したり、更新したりしようとするのには無理があります。
試しに自作してみるとわかると思いますが、100万行あるテキストファイルから1行のデータを取得するのにどれだけ時間がかかるか。
データベースはそういった処理を高速に行えるように高度な技術で作成されています。

そしてなぜMySQLを使うのかという理由ですが、
・前述通りデータの扱いが容易
・無料
・PHPとの親和性が高い

こんな感じではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

テキストファイルで不都合なければテキストファイルでよろしいかと。
ユーザーの入力を受け取り、構文木を組み立て、それをシリアライズしてテキストファイルに書き、必要な時には読み取る、これで十分です。

しかし、構文木を使わなければならないということは、ある程度大きなデータですよね?
例えばそれを保存している最中に他のユーザーから読み取り要請や書き込み要請があったらどうしますか?
排他的ロックをかけて短時間に多数の問い合わせ(不正なものも含めて)に耐えるプログラムを書かなければなりません。
ユーザーはデータを取得してから加工し、出力するのに時間をかけます。
ユーザーは一人ではないのに、その間ずっとロックしておくわけにもいかないでしょう?

そして、それらにバグがあったら、データはすべて消え失せます。
データベースはそのようなユーザーが配慮しなければならない多くの機能を代わりに実装して楽をさせてくれます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

じゃあなんのメリットがあるのかと思いました。 
テキストファイルじゃ都合が悪いのでしょうか?

最初はテキストファイルで管理すれば十分です。
ところが、使っている内に満足出来なくなってくるのが人間という欲深いいきものです。

  • 毎秒何十人もの人間が同じファイルを同時に書き込もうとした時、どうするの?
  • 超大量になったファイルの読み書き遅くなりすぎ、なんとか速度を保て
  • 数値のInt型は4バイトなんだが、文字で管理すると12億は10〜11文字になっちゃうから効率悪い
  • よく読み書きするデータだけ高速なメモリ使って早く読み書きできない?
  • PHPでこれらの処理書くと遅いから、その部分だけC言語で書こう

これを実装する開発者としてはこんなこと気軽に注文されたら「ふざけんな!」と言いたくなるくらい身勝手な要望ですね。
…で、長い時間を掛けてこれらの問題を全て解決しました。
今度はそんな肥大化したシステム、どうやって管理してどうやって使うんだという問題が出てきました。

これらの機能全部オプショナルだよね?こんな馬鹿でかいシステム使い方わからんぞ。
分厚いドキュメントも必要だし、こんなシステム本当に他人が使えるのか?開発者の自分ですら1ヶ月したら忘れる自信あるぞ。

そこで、簡単な英文を流し込むと自動的に必要な機能を必要なだけ使ってファイルの読み書きしてくれる言語を作りました。
その名もSQL言語です!
つまり、テキストファイルでいいんじゃね?の終着点の一つがMySQLだったというお話です。


MySQLは世界一速い高級言語と呼ばれるCやC++で書かれているので超高速です。
MySQLはSQLという簡単な英文を使って、読み書きに必要な機能を必要なだけ使えます。
MySQLは100人が同時に読み書きしても、妥当な結果が得られます。
MySQLはファイル管理を頑張っているので、ファイルが何百MBに肥大化しても速度の低下を抑えられます。
MySQLはメモリ空間をうまく使っているので、よく使うデータはハードディスクにアクセスせずに瞬時に結果が返ります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/17 14:10

    mysqlってc++で書かれてたんですね
    確かに上の用件を書くとなるとかなり時間がかかりますね。
    c言語畑で育ったのでphpの遅さに驚いてsqlが原因ではと思っていました
    ここはおとなしくsqlの文法覚えるようにします・・・

    キャンセル

0

質問の趣旨がRDBとは何か・・・になっているので
参考書を読んでもらうのが一番ですがphpなどプログラムと絡める場合の
大きな役割は3点

(1)データを抽出する
(2)データを集計する
(3)複数のデータを連携する

これらのことを高速で堅牢に一定の書式で実行するがRDBです
プログラム自体がこれらの機能を持つことは可能ですが
実装することは無駄がおおくパフォーマンスも期待できません
ましてやテキストファイルでは効率が悪すぎる

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる