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

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

ただいまの
回答率

90.35%

  • MySQL

    7414questions

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

  • SQL

    3225questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Hadoop

    59questions

    Apache Hadoopは大規模なデータの分散処理をサポートするJavaソフトウェアフレームワークです。Hadoopを利用すると、数千ノードおよびペタバイト級のアプリケーションデータを処理することができます。

「データベース」と「ファイルシステム」違い

解決済

回答 6

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,217

fermat

score 147

データベース初心者です。
日常的に写真やメールなどをフォルダ・ファイルで管理している者にとって
「データベース」は何が良いのかよく分かりません。

オラクルの記事も読んでみたのですが疑問が却って増えてしまったような…モヤモヤしています。

①「データベース」と「ファイルシステム」が選べるとしたら
「データベース」を選ぶ理由って何なのでしょう。

②ちょっとしたデータの確認・移動・修正・削除などは
マウスでコピペできるフォルダ・ファイルでの管理の方がラクだと思うのですが、
プログラミング言語を打たなければならない「データベース」は面倒だとは思いませんか?

③一方で大掛かりなデータの管理になっても
C++・PHP・VBでもどんな言語でもフォルダ・ファイルにアクセスできるので
「ファイルシステム」が便利だと思うのですが・・・

(上記オラクル社の解説では
「 ファイルを複数のプログラムで共有できないため、プログラムごとにファイルが存在し、
重複するデータが数多く含まれることになってしまいます。」
とありますが、どういった意味なのかよく理解できていません。
.csvファイルや.xlsxファイルを開ける言語もありますし問題無いのでは?
という印象なのですがいかがでしょうか。)

④「データベース」と「ファイルシステム」では
データを管理するメモリの消費やデータを引っぱり出すときのベンチマークなどが違うのでしょうか。
「ファイルシステム」はデータの位置を記録しなければならないが
「データベース」はその必要が無いとも学んだのですが、
データの位置の記録が無いために欲しいデータを参照するのに余計な時間がかかったりしないのでしょうか。

質問が長くなり申し訳ございません。
使用してみての印象や利点など小さなことでもいいので
何かご存知の方がいらっしゃいましたら、よろしくお願いします。


追記
皆さまのおかげでデータベースが使われると良い場面が沿革や具体例も含めよく分かりました。
・データの共有状態を想定している。
・データの書き込みエラー・クラッシュが許されない。
・データベースの検索システムに沿うデータである。
以上の場合ではデータベースでの管理が良さそうですね。
使う場面によっては無くてはならないシステムが備わっていると知れてよかったです。

盆栽の水やりと気温や漬物に使われる乳酸菌の温度管理など農業系のデータ管理を想定して
データベースかファイルシステムかという岐路に立っていたのですが(地味なデータの相談ですみません。)
今回、色々な視点から勉強になりました。感謝です。。。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 6

checkベストアンサー

+5

単独の(孤立した)データを保存するのであれば、DB管理システム(DBMS)の利点は耐障害性の機能があるくらいなので、バックアップをしっかり取っておけば十分です。
高速の検索が必要なら、適宜、索引ファイルを作っておけばいい。

DBMSには、複数のデータがが関連性を持って更新されるときに、中途半端な状態、矛盾した状態にならないように整合性を保証する仕組みがあります。
参考: ACID (コンピュータ科学) - Wikipedia
例えば、サーバーがクラッシュ、ディスク障害、アプリケーション異常終了、などの際にも、それぞれの障害回復後には、銀行の送金処理なら、口座残高が両方の更新されているか、両方とも更新されていないかのどちらかになる事が保証されます。片方の口座残高のみ更新されて銀行が儲かったり、お客さんが儲かったりすることはないです。

あとは、高速にアクセスを行うための様々な仕組みとかですかね。

なお、上記ACIDの四つを保証するとGoogle検索エンジンなど超大規模なデータベースの場合、性能が出ないので、近年、それを弱めたDBMSもあります。
参考:CAP定理 - Wikipedia

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/14 17:22

    「単独の(孤立した)データを保存するのであれば・・・」とのことで、
    自らのプログラミング計画を少し冷静に見直せるようになりました。
    エラーが許されない高度な共有型のデータというわけでなく、凡庸な個人使用目的のデータを想定しているので
    やはり気になるのはマシンクラッシュ時のバックアップという点ぐらいになってきてしまっています。
    データベースの利点(複数ワード検索・同時アクセス・排他制御・リカバリ)を生かせないのであれば、
    ファイルシステムでも良いような気がしてきました。ありがとうございます。

    キャンセル

  • 2018/11/14 22:21

    DBMSを使っても、データベースファイルとログファイルを同じ物理ディスクに格納すると、そのディスク障害でバックアップ取得以降のデータが失われますので、普通のファイルで複数ディスクにコピーを置くことにすれば、ほぼ同じです。
    どの瞬間に障害が起きても大丈夫という厳密なことを言わないのであれば、ファイルでもいいと思います。
    ただ、データベースを使うのもそんなに難しいことではないので、使うことでプログラミングが簡単になるようであれば、あえて避けることもないかと。

    キャンセル

  • 2018/11/15 18:26

    データを扱う上で物理的に切り離されたバックアップを用意するって大事ですね。
    どの瞬間に障害が発生しても大丈夫なのですが、あえて避ける理由もないのでデータベースも良さそうなと揺れ始めています。。。
    ファイルとフォルダが新規作成でポンとできるのに対して、データベースってパソコンという家の中にさらに小屋を建てることから始める印象があって、つまり食わず嫌いをしているのですが(笑)
    そんなに難しいことはないという言葉に背中を押されて、SQLのしっかりした本を実践しながら読んでみようと思います。色々教えて下さってありがとうございます^^

    キャンセル

+4

オラクルなどのデータベースベンダが使う「データベース」には、「データベース管理システム」(DBMS、RDBMS)を含みます。

つまりデータベースは「管理してくれるもの」がいるのです。

ファイルシステムで管理する場合、その管理方法(どんな条件でフォルダ分けしているか)を知らないと、探すことも整理することもできません。
一方でデータベースの場合、管理方法は「管理してくれるもの」、すなわち RDBMS が知っています。ですから調べる時には RDBMS に対して「こんな条件で探して」と問い合わせるだけです。データが実際にどのように保存され整理されているかを知る必要はありません。データを追加・更新する時も、RDBMS が適切に整理し直してくれるのです。

写真の整理であれば確かにデータベースなんて必要ない、と思うかも知れません。ですが例えば写真にタグを付ける(撮影日、撮影時刻、場所、被写体、撮影時の条件etc)と、そのタグで検索する場合にはファイル・フォルダ形式では簡単に破綻するでしょうね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/14 10:59

    浅い考え方で申し訳ないのですが、「ファイルシステム」を選んだ場合、
    例えば、写真ファイルへのパス・写真名・撮影日・場所などを記録した.csvファイルを別途用意して、
    そこから参照すればそれで済んでしまうのではとも思ったのですが・・・。
    参照ファイルは自作なので使い勝手も良いですし。
    データベースが適切に整理し直してくれることはファイルシステムでも補完できそうなのですが
    やはり何か違うのでしょうか。その辺りもモヤモヤしています。

    キャンセル

  • 2018/11/14 11:10

    そのcsvファイルに正しい状態で追加するのも、csvファイルから(excelで読み込んで)フィルタリングするのも、仕分けを変えたのでcsvも合わせて変えるのも、そしてcsvファイルの内容が正しいことを保証するのも、すべて「ご自身で」やることになりますよね。
    それを RDBMS が代わりにやってくれるのだと思ってください。

    キャンセル

  • 2018/11/14 12:05

    データベース+仕分けシステムがRDBMSなんですね。
    手動であるいは自作スクリプトで仕分けする以上に特殊なパフォーマンスを必要とする場合、
    仕分けシステムが代わりにやってくれると便利かもしれませんね。
    ありがとうございます。

    キャンセル

+2

A銀行B支店のCさんの口座からDさんの口座にある金額を口座振替する処理を例に考えてみましょう
Cさんの口座から振替える残高と振替手数料があるかを確認して、振替金額と手数料を差し引き、Dさんの口座に振込み、手数料を銀行の利益として処理します。
この時、途中で何らからのエラーが起きて処理が途中で止まってしまっては困ります。Cさんの口座から振替金額が減ったのにDさんの口座に振込まれていなかったら銀行の信用はズタズタです。Cさんの口座から振替金額が減ったのを取り消して(リカバリ)、もういちど振替処理をやり直すということを自動的にできるのがデータベース。(かなり端折って書いています。) ファイルシステムでこれを実現するのはとっても大変です。

給料振込には会社の口座から各社員の口座へ振り込む処理が行われます。同じタイミングで会社が買った商品の支払い処理が実行されてもそれぞれの処理がきちんと行われなければなりません。1,000万円の銀行残高がCさんの給料50万円、Dさんの給料60万円、商品代金100万円を差し引く処理を[データベースでは排他制御]して実行します。 ファイルシステムでもこれを実現するのはとっても大変です。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/14 17:22

    銀行って言われてみて気づきましたがデータベースのカタマリですね。
    リカバリと排他制御の具体例も示していただけて、データベースの長所にも気づくことができました。
    データベース管理は、ファイルシステムと自作実装による管理では到底不可能な部分まで
    カバーしてくれるんですね。完全に自動化されたデータの出し入れに威力が発揮されそうですね。ありがとうございます。

    キャンセル

+2

個人的にRDBの意義がわかりやすくまとまっていると思っている記事を紹介させていただきます。
データベースについてのそもそも論(漢のコンピュータ道)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/14 17:23

    データベース有利な点が読みやすくまとめられているサイトで為になりました。
    主に①マシンクラッシュと②同時アクセスを想定した状況でデータベースが強さを発揮するとのことで
    流動的な人の暮らしに根差したデータ管理という点ではデータベースに頼る方が良いと分かりました。
    ありがとうございます。

    キャンセル

+2

データベースをどう定義するかによって回答も変わってくると思いますが、ここでは SQL でアクセスするリレーショナルデータベースをイメージされているのではないかと思いますので、その前提で回答します。

①「データベース」と「ファイルシステム」が選べるとしたら
「データベース」を選ぶ理由って何なのでしょう。

リレーショナルデータベースはデータを集合として扱い、集合演算ができるよう設計されています。
一方ファイルシステムは木構造です。
それぞれに活躍する場面は違います。

例えば、teratail は質問を言語による浅い木構造とタグの両方で検索できるようになっていますが、木構造の方は使っていますか? 複数のタグによる積集合やキーワード検索の方をよく使うのではありませんか?
このような検索方法ではリレーショナルデータベースの方が有利です。

②ちょっとしたデータの確認・移動・修正・削除などは
マウスでコピペできるフォルダ・ファイルでの管理の方がラクだと思うのですが、
プログラミング言語を打たなければならない「データベース」は面倒だとは思いませんか?

木構造の方が楽な場合はあります。しかし、すべてではありません。
確認・移動・修正・削除を複数のデータに行う場合、エクスプローラーなら何度も何度もフォルダやファイルを選択しなければならない場面でも、集合として扱えば一度で済む場合があります。

③一方で大掛かりなデータの管理になっても
C++・PHP・VBでもどんな言語でもフォルダ・ファイルにアクセスできるので
「ファイルシステム」が便利だと思うのですが・・・

Google の集めた大規模なデータをファイルとして保存してパスのみで検索しなければならないとすれば、検索は相当に時間がかかるでしょう。
データを事前に分析し、インデックスを付けてアクセスしやすくしなければなりません。データ管理を行うのがデータベース管理システムの役割です。

④「データベース」と「ファイルシステム」では
データを管理するメモリの消費やデータを引っぱり出すときのベンチマークなどが違うのでしょうか。
「ファイルシステム」はデータの位置を記録しなければならないが
「データベース」はその必要が無いとも学んだのですが、
データの位置の記録が無いために欲しいデータを参照するのに余計な時間がかかったりしないのでしょうか。

場合によります。

まとめ

どちらにも得手不得手があるので、両方とも広く使われています。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/14 12:33

    >データを事前に分析し、インデックスを付けてアクセスしやすくしなければなりません。データ管理を行うのがデータベース管理システムの役割です。
    「ファイルシステム」の場合、例えば10ファイルごとにデータがあると「①ファイルを開ける→②データを調べる」という作業を10回繰り返すことになりますが、
    「データベース」の場合、すでに10ファイル分のデータが一つにまとめられていて検索が一度で済むという理解でも大丈夫でしょうか。
    10ファイル分のデータに例えましたが、これがもっと増えたり使わないデータまで一つのデータにまとめられていると読み込みに時間がかかったりしませんか。内部的にはソートが発達していて欲しいデータがすぐ出てくる?みたいな状態なのか「データベース」システムの想像ができていません。。。

    キャンセル

  • 2018/11/14 12:42

    色々な技術が使われています。
    https://postd.cc/how-does-a-rdb-work-1/

    キャンセル

  • 2018/11/14 17:23

    複数のタグによる積集合やキーワード検索はリレーショナルDB有利と言われると
    使用場面によってはデータベースを選択したくなりますね。
    木構造では力技に頼る検索をハッシュ結合などが解決しているんだなと
    リンク先を読むことでよく理解できました。ありがとうございます。

    キャンセル

+2

質問の「データベース」はDBMSの事を指していると解釈しました。

ファイルも広義的にはデータベース(Data Base)に含まれます。
データベース(Data Base)を管理するシステム(Management System)が「データベース管理システム(DBMS)」です。※DBMSも根本的にはファイルを扱っています。

DBMSが生まれる前は、ファイルへ直接I/Oするしかありません。
複数のプロセスが同時に同じファイルにアクセスするような場合の排他制御や、複数の情報を組み合わせて取り出す事などは自前で実装するしかありませんでした。

そのような背景から生まれた、DBMSの歴史を見れば、自ずとメリットが理解できるのではないでしょうか。

データベースの歴史とその最新技術

データベースが登場する前は、データ管理にはファイルが使われていましたが、ファイルはアプリケーションに依存するという問題があり、特にデータ量が大きくなると扱いにくくなります。
そのため、データ管理を独立したソフトウェアとして扱い、アプリケーションから切り離すことにし、そのデータ管理をするソフトウェアはデータベース管理システム (DBMS) 、このシステムに管理されるデータの集まりはデータベースと呼ばれることになり、大規模化した情報の管理手段として登場しました。

データベースの歴史(概要)

※大規模なシステムだとデータ管理は煩雑です。
一方、システムの設定情報などは煩雑な管理を必要としないので、iniファイルのようなものは今でも使用されています。
用途によって使い分けられているというのが、決定的な違いでしょう。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/14 17:24

    言葉の定義もまとまっておらず、すみません。
    特定のデータを洗い出すことが必要とされた経緯からデータベースのシステムが想起されたんですね。
    自前で実装とまではいかないけど共有しているデータの必要な部分のみ欲しいというケースには
    「データベース」が向いていますね。
    リンク先のデータベースの歴史ってかなり興味深かったです。ありがとうございます。

    キャンセル

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

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

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

  • MySQL

    7414questions

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

  • SQL

    3225questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Hadoop

    59questions

    Apache Hadoopは大規模なデータの分散処理をサポートするJavaソフトウェアフレームワークです。Hadoopを利用すると、数千ノードおよびペタバイト級のアプリケーションデータを処理することができます。