• ベストアンサー

DBファイルの中身を直接見れない理由は?

SQLiteの中身を見たいと思って、ファイルを開いたら、文字化けしてるような感じでした。 しょうがないので、PHPで動くGUIツールをインストールして、 中身を確認することはできたのですが、 どうしてDBファイルの中身を、直接見ることはできないのでしょうか? DBを作成するってことは、コンパイルか何かをしているのでしょうか? また、GUIツールを経由すれば、なんで見れるのでしょうか? そこでは、どんな処理が行なわれているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

>どうしてDBファイルの中身を、直接見ることはできないのでしょうか? DBファイルは、バイナリファイルだからです。 (データベースに限った話ではないですが) では、何故、ご質問で書かれているように、テキストエディタで見れるプレーンテキストではダメなのか? 私見ですが、天文学的に高性能なCPUとメモリとディスクがあれば、バイナリにする必要はないと思います。 テキストファイルに対して、検索・挿入・削除・変更・マージ・ソートするようなスクリプトがあったとして、要件が満たせるなら、それで十分です。 しかし現在のPCでは(サーバークラスであっても)、上記のような方法では企業のデータを取り回す事はまず無理でしょう。 数100万、数1000万件以上はもちろん無理です。 それどころか、数100~数千件のマスタが何個か、と数千~数万件のトランザクションが何個か程度の(SQLiteでも扱えるレベルの)データですら扱えないと思います。仕事にならない。 データベースのファイルは(RDBMSベンダによって、その組成はまったく違いますが)、DBエンジンが最も扱い易いように最適化されたバイナリです。 「人間がテキストファイルを開いて目で検索、もしくは文字を入力して検索」 するところを、遥かに高速に処理するためにはプレーンなテキストファイルではダメなんです。 いずれにせよ、もし、エディタで開けるとなると、企業のセキュリティ要件は満たせないので、その時点で商品としてはアウトですけどね。

re999
質問者

お礼

回答ありがとうございました。 >私見ですが、天文学的に高性能なCPUとメモリとディスクがあれば、バイナリにする必要はないと思います。 説明、大変分かりやすかったです。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

若干誤解があると思うので http://dev.mysql.com/doc/refman/5.1/ja/csv-storage-engine.html 別にみるのを前提とするならデータベースエンジンにそれ用のものを使えば見られます。 見えることより、検索性、高速性、堅牢性などを重視するため最適化されたデータの 持ち方をすると人が読めないものになるということです。

re999
質問者

お礼

>見えることより、検索性、高速性、堅牢性などを重視するため最適化されたデータの 持ち方をすると人が読めないものになるということです。 ありがとうございました。 確かにそうですね。 そもそもDBが、何の目的で存在しているか、全然考えてませんでした。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

この辺がNo1で回答されていないようで。 >DBを作成するってことは、コンパイルか何かをしているのでしょうか? その通りです。ただし、バイナリーで書き込みしているだけなので、あなたが思っているコンパイルとはちょっと違います。今のプログラム言語には、バイナリーとして書き込む仕組みがあり、単に文字列を書き込んでいるだけです。 よく、「コンパイル」はバイナリー変換することだと思っている方が多いようですが、実は違います。コンパイラーがないと、コンパイルできないと思っているのも間違いです。翻訳という日本語の単語がありますが、その単語に近いことをコンパイルで行います。その結果として、バイナリー(マシン語)として変換されます。 映画での英語の日本語訳と同じです。翻訳とは、文書として活字になっている物を指していることが含まれます。同じ作業ですが、「通訳」と言うのも翻訳しているわけです。どこが違うかと言うと、活字になっているかどうかと、誰に対してと言うことになります。どちらも同じ作業ですが、言葉として口から人に直接伝えることを特に「通訳」と言う単語を使いますね。これを、ノートに書くと「翻訳した」と言うことになります。 通常のコンパイル操作には、最適化やリンカーが同時に働きますが、その様なことはありません。なので、最適化するための仕組みが後から、プログラマーにより追加が必要です。 高級なDBエンジンでは、自動で最適化されています。例えば、アクロバット(PDF)や、画像ファイルなんかも、後から最適化するオプションがソフトに付いていますね。 >GUIツールを経由すれば、なんで見れるのでしょうか? これは、ちょっと誤解している部分があります。 コンピューターは文字列を、文字として扱っているわけではありません。文字コードとして扱っています。もともと、今あなたが見ている、この文字もコンピューターからすると、ただの数字の羅列です。 映画の「マトリックス」で、画面が上から下へ数字の羅列が緑色で流れていくシーンが数多くあったと思います。その数字の羅列をみて、「これで何が起きているのかわかるのか?」と言う主人公の会話があります。 まさに、あのシーンが表してくれています。その数字を文字として表示するための仕組みがOSと、日本語エンドプロセッサーと言うソフトで、文字として表示しているだけです。 コンピューター側からすると、単に数字の羅列を並べているだけなんだけど、表示するまでに、いくつものソフトを通ると、それが人間が分かる文字として、アウトプットされる事になっているだけです。

re999
質問者

お礼

大変、詳しい説明ありがとうござました。 単純に、「コンパイル」= 「バイナリー変換」だと思ってたのですが、 「コンパイル」> 「バイナリー変換」 みたいな感じでしょうか? この辺り、もう少し自分で調べてみたいと思います。 >コンピューターは文字列を、文字として扱っているわけではありません。文字コードとして扱っています。もともと、今あなたが見ている、この文字もコンピューターからすると、ただの数字の羅列です。 >コンピューター側からすると、単に数字の羅列を並べているだけなんだけど、表示するまでに、いくつものソフトを通ると、それが人間が分かる文字として、アウトプットされる事になっているだけです。 この辺りの話も、大変興味深かったです。 言われてみれば、確かにその通りだと思うのですが、 実際に回答いただくまでは、そんなこと全然気が付きませんでした。 色々、勉強になりました。ありがとうございました。

関連するQ&A