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

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

ただいまの
回答率

90.47%

  • MySQL

    7134questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • データベース

    856questions

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

  • プログラミング言語

    765questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

  • NoSQL

    74questions

    NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

データベースの実装について

解決済

回答 8

投稿

  • 評価
  • クリップ 1
  • VIEW 1,685

kkkmokotan

score 37

データベースの実装について疑問点がうまれたので質問いたします.
例えばMySQLServerでは保存データをファイルとして保存していると思います.しかしこの場合高速な読み書きを繰り返し行おうとする場合、ファイル入出力部分がかなりのボトルネックになると思います。

この部分の実行時間がロスとなることについては許容しているのでしょうか?それとも何らかの工夫が凝らされているのでしょうか?初歩的な質問ですいません。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 8

checkベストアンサー

+9

DBMS では当然工夫がされています。実装技法として教科書に載ってます。ディスクI/Oに関係するものでしたら、キャッシュ、グループコミット、チェックポイント、メモリマップドI/Oくらいでしょうか。DBMSはディスク I/O だけでなく、いろいろな技法のデパートです。本屋さんでデータベースの教科書を立ち読みして、読みやすいと思われるものを探されることをおすすめします。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

質問の回答としては少しズレますが、私の知っている情報だけ書き残します。

I/Oのオーバーヘッドのボトルネックを解決するため、
メモリ上にデータを保存する方法があります。

CREATE TABLE テーブル名(カラム名 型) ENGINE=MEMORY;

MySQL :: MySQL 5.6 リファレンスマニュアル :: 15.3 MEMORY ストレージエンジン
https://dev.mysql.com/doc/refman/5.6/ja/memory-storage-engine.html

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

データの入出力部分ではデータ検索およびデータの送受信処理が行われて
いるので当然、ボトルネックになる可能性があります。

MYSQL側でなんらかの配慮が行われているわけではなく、全体のシステム設計の
上で状況に応じて対策を打つ必要があります。

アプリケーションロジック, クエリ, MySQL, OS, CPU, Memory, Disk, Network
などボトルネックになる可能性のある箇所は色々とございます。
ご参考まで

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

ファイル入出力部分がかなりのボトルネックになると思います。

ファイルの読み書き自体の速度は意外にも速いものです。
Apacheではアクセス履歴を常にログファイルとして書き出していますが、よほど高性能なサーバーでない限り気にする必要なく使えます。

この部分の実行時間がロスとなることについては許容しているのでしょうか?

どのようなデータベースに保存するにしても、基本的にはファイルの入出力がボトルネックです。
キャッシュとしてメモリを利用する機能や、ファイルの代わりにインメモリで全て動かすというテクニックはありますが、
実運用では大量のデータをバックアップする必要があり、必ずファイル入出力の問題にぶつかります。

キャッシュにメモリを使う:「memcached mysql 連携」等でぐぐってみてください。
インメモリで動かす:「sqlite inmemory」等でぐぐってみてください。

それとも何らかの工夫が凝らされているのでしょうか?

その通り。
結局はファイルで管理していますが、必要最小限な読み書きを行う実装が至る所にあります。
なので素人がテキストファイル等を作って管理することと比較すると、信じられない程キビキビと動作します。
興味がある場合、私もそんなに詳しくは解説出来ないので個々の実装を読み進めてみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

ファイル入出力部分がかなりのボトルネックになると思います。

なります。一般的にIOが処理速度のボトルネックになります。
(科学計算や機械学習など、純粋に計算量が多いジャンルでは違いますが)

ロスとなることについては許容しているのでしょうか?
それとも何らかの工夫が凝らされているのでしょうか?

小規模ならたんに許容するかもしれませんが、
大規模なサービスでは工夫されています。

データベースエンジニア(インフラエンジニアという区分も多い)
というDB関連の専門職がありますから、それだけ工夫の余地が大きいです。

大きい会社だと「DB一筋20年、インフラの源さん」みたいな人がいて、
職人的なDBのチューニングをするわけです。これはたとえ話ですが。

そこまでいかなくても、単純にIOの回数を減らすとか、
初歩的な工夫でも速度が劇的に違ってくる場合があります。


そもそも、なぜデータベースを使うのかといえば、たんに高性能だからです。

DBは検索などが最適化されているので、一定以上データ量が多ければ、
テキストファイルやCSVファイルより、DBの方が処理速度が圧倒的に速いです。

もし、そんなに高性能には思えないとしたら、共用レンタルサーバのイメージでしょう。
「DBが遅いせいで、ワードプレスが重くて重くて……」とか年中言われてますよね。

これは価格を安くするためサーバにアカウントを詰め込んいて、
たとえば100人で使ってたら、本来の性能を発揮できないわけです。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

わたしはOracleのパフォーマンスチューニングを担当する^n^n^n^n押し付けられることが多いです。笑い
ハードウェアは進化しているのに,なぜパフォーマンスチューニングを続けるのか 5年前の資料
MySQLパフォーマンスチューニング
など、パフォーマンスチューニング をキーワードにググると興味深い情報が得られますよ。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

一昔前まではrawデバイスと言って、ファイルシステムを介さずにディスクI/OをするDBが多かったように思います。
DB側の性能向上や様々な進化があっても、直接ディスクのI/Oを制御する速度的優位や遅延書き込みが発生しないという利点はまだあると思うのですが。
ハードウェア全体の性能が上がってその辺のメリットが小さくなったのでしょうか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

保存データをファイルとして保存していると思います

中にはパーティションまるごとをDBMS専用とする場合もありますね。
その際、ファイルにする場合とどれくらいの性能差があるかは
知りませんが、そっちが主流になっていないところをみると
労力のわりに大差ないのかもしれません。

黎明期には「リレーショナルデータベースは遅い」などと
いわれていましたが、それを克服するための工夫が
ファイルI/Oくらいは問題にならないくらいに
こらされているのかもしれません。

あと、ハードウェアがいろんな面で高性能になってきて
多少のソフトウェア的な性能は関係ない(というとアレですが)
くらいなのかなあ、って気もしてます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

同じタグがついた質問を見る

  • MySQL

    7134questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • データベース

    856questions

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

  • プログラミング言語

    765questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

  • NoSQL

    74questions

    NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。