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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

5回答

4973閲覧

データベースを使うこととバイナリデータファイルに保存することの違い

starrow1103

総合スコア137

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2017/03/03 11:14

編集2017/03/03 11:34

環境

macOS Sierra
Python3.6.0

わからないこと

初歩的な質問になってしまいますが、「データベースを使うこと」の意味はなんでしょうか?

例えば、userとpasswordを登録し、参照し使えるようなプログラムを書く時、dictionary機能で十分だと思うのです。

以下、簡単なログイン機能をpickleでつくってみました。

# accounts.pickleファイル内に{"user1":"pass1","user2":"pass2"}があるとします。 import pickle def open_file(): with open('accounts.pickle', mode='rb') as f: accounts = pickle.load(f) return accounts def save_file(accounts): with open('accounts.pickle', mode='wb') as f: pickle.dump(accounts,f) def add_account(accounts): while True: new_username = input('Enter a new username:') if new_username not in accounts: new_password = input('Enter a new password:') accounts[new_username] = new_password save_file(accounts) print('NOW YOU HAVE A NEW ACCOUNT.') break else: print('ALREADY EXIST!') continue def login(accounts): username = input('Enter your account name:') if username in accounts.keys(): password = input('Enter your password:') if password == accounts[username]: print('LOGIN SCCEEDED!') else: print('WRONG PASSWORD!') else: print("NO EXIST") accounts = open_file() add_account(accounts) login(accounts)

結局のところ、情報の単純なファイル管理と、データベースでの管理の違いはなんでしょうか?
userに対する情報量が多くなってくるとめんどくさいのでデータベースを・・・という考えなのでしょうか。
それとも、セキュリティ面からの必要性でしょうか(だとすればどう違うのでしょうか)

以上、データ保存についてよくわらない小生にご教授くださいm(_ _)m

追記:
誤解を招く例文で申し訳有りません。自分は必ずしも「ログイン機能」を作りたいわけではありません。

「果物の名前と値段」、「映画の作品名と監督名」などの管理を「データベースで行う」のか「平ファイルで行う」のか、そこらへんの判断基準はどうであろうかというのがこの質問の意図です。

わかりにくくてすみません・・・。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

テキストベースかデータベースか。
よくある話として、「データベース」について過剰に拒否反応を示す「発注者」や「プログラム初心者」がいて、どうもテキストの方が、簡単で、簡単だから安価に発注できると考えてしまう人が多いのも事実です。

いわゆるRDB(リレーショナル・データベース)においては、「データを安全に保存する機能」「データを高速に検索する機能」という2点が最も重要な役割です。

・万が一の時にデータを復元する機能
・外部キー制約によって、論理上矛盾するデータを排除する機能
・排他処理によって一方の更新を許可し、他方の変更を拒否する機能
・インデックスにより高速に検索する機能

これらをテキストベースで実現するのは、相応のコーディングが必要となり、安全なアプリケーションを作成する上では、RDBを使うというのが、現実最も楽な方法です。

投稿2017/03/03 12:12

編集2017/03/03 12:14
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

starrow1103

2017/03/03 12:23

より分かりやすく具体的に解答いただきありがとうございます。 はじめに解答いただいSurferOnWwwさんのリンク先にあるような事例に近いですね。(本当にそんな安易な考えで楽なほうへ進めようとするプロや発注者が存在するのは残念です。) これでなんとなくデータベースの利点や平文との違いのイメージがついたので、ベストアンサーとさせていただきます。 本当は御三方にベストアンサーを差し上げたいところです。 ありがとうございました!
退会済みユーザー

退会済みユーザー

2017/03/03 12:35

??? 「発注者」がそう考えるのは何の問題もないと思いますけど…
guest

0

データベースもファイルシステムも使い分けすればいいのです。
どちらかがどちらかの上位互換ではなく、どちらにも長所と短所があります。

例えば、質問の簡易ログインを例に挙げるなら、これ、複数のアクセスが同時にあって、読み出している最中にファイルが書き換えられたらどうなりますか?
また、読み込みに失敗したファイルをそのまま保存してしまったら?
データベースならその心配はありません。

ファイルシステムを使っても、山ほどコードを書けばデータベースに匹敵する高機能なデータ管理システムは作れるでしょう。しかし人は今度はそれをデータベースと呼ぶでしょう。

データベースの長所は高機能であることです。同時アクセス以外に、検索の速さに関してもセキュリティに関しても、データ構造の変化に柔軟に対応できることに関しても、環境の移行に強いことに関しても。

ファイルシステムを使ったデータ管理の長所は手軽なことです。データベースのインストールは必要ありません。

年賀状を書くのにプロを雇う人は多くありません。でもどんなことでも自分ですればいいじゃんと言うわけにもいきません。
たとえ自分でできたとしても、プロに頼むことのメリットはあります。
データを扱うプロフェッショナルがデータベースです。

投稿2017/03/03 12:20

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

starrow1103

2017/03/03 12:32

なるほど!詳しくご説明いただきありがとうございます。 同時にアクセス、たしかに、ただのファイルでそんなことが起こったらすぐにおかしくなりそうです。 さらに勉強してみようと思います。 ありがとうございました!
guest

0

まあ、データベースと一言でいってもピンキリですからね~

・データがとても大量になると予想される場合
・複数のプロダクトからアクセスする場合
・開発言語の変更が予想される場合

あたりが一般的な話になるのかなあ。
小規模なものやプライベートなものなら
それこそ好きなようにすればいいと思います。
最近では小規模用のデータベースもあるようなので
一概にこうだとは言えませんが、まあ、こんな感じ?

投稿2017/03/03 11:51

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

starrow1103

2017/03/03 12:02

ありがとうございます。 開発言語が変わる場合 これはまったく考えもしませんでした、なるほど、そういうことも起こりえますよね。 ここでさらに質問させていただきたいのですが、 「データがとても大量になると予想される場合」にデータベースを作成するのは、なぜでしょうか。 平文よりもバイナリデータのほうがコンパクトになるのは分かりますが、それ以上にコンパクトになるものなのでしょうか。 また、そういった観点からデータベースについて学べる文献などありましたらご紹介いただけると助かります(^^;;
mike2mike4

2017/03/03 12:08

教科書を読んでいたらDBを使う説明に「最適化されていて」「高速に」「簡易に記述できて」「ロックが自動でかかる」だからだそうです。
starrow1103

2017/03/03 12:12

おぉ、速度の観点から考えていませんでした。なるほどそういう利点もあるのですね。 ロックが自動で、、、という部分はちょっとよくわからないので勉強が必要そうです(^^;;
takasima20

2017/03/03 12:52

そうですね~ データベースには高速にアクセスできるように いろいろ仕掛けが提供されていますので、そういう意味で 適しているってことです。 「ロック」とか「排他制御」てのはデータベースが提供する 機能の一つで、あるところから更新しようとしているものを 別のとこから(処理がおわるまで)更新させないようにする機能ス。
starrow1103

2017/03/03 14:31

なるほど、詳しいご説明ありがとうございます。 やはりそこが決定的な差、強みであると言えそうですね
guest

0

あなたが作った「簡単なログイン機能」というのはセキュリティ的に問題ないのですかね? 多分そうではないと思うのですが。

DB を使うかどうか以前に十分なセキュリティを持つユーザー管理システムを自分で作れるかを考えた方がいいと思うのですが。

本当は怖いパスワードの話 (1/4)
http://www.atmarkit.co.jp/ait/articles/1110/06/news154.html

自分で作れなくて、フレームワークが持つシステム等を利用せざるを得ないなら、好むと好まざるとにかかわらず、使用できるユーザー情報のストアは限られてくると思うのですが。

投稿2017/03/03 11:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

starrow1103

2017/03/03 11:32

あ、いや、 ちょっと例えが悪かったかもしれません。 果物の種類と値段のデータや、本のタイトルと作者のデータ保存でも同じように書けると思うのですが、この場合別に盗まれても良いデータですよね。 管理を「データベースで行う」のか「平ファイルで行う」のか、そこらへんの判断基準はどうであろうかというのがこの質問の意図です。 わかりにくくてすみません・・・。
退会済みユーザー

退会済みユーザー

2017/03/03 12:16 編集

> 管理を「データベースで行う」のか「平ファイルで行う」のか、そこらへんの判断基準はどうであろうかというのがこの質問の意図です。 それもどんなアプリか、使用するフレームワークは何かによると思いますよ。Web アプリなら、LAMP, WISA という言葉があるように DB の使用が前提で、「平ファイルで行う」というのは考えもしない(と言ったら言い過ぎかもしれませんが)と思いますが。 どんなアプリか、どんなフレームワークかという話がまずなければ、質問者さんの質問は漠然としすぎているような気がしますけど。
starrow1103

2017/03/03 15:25

例えば今練習で作ろうとしているのは、Flaskを用いて ・フォームで受け取ったURLを元に ・ユーザーが欲しいHTMLタグを生成 するような簡単なWEBアプリを考えています。 さてそうした時に、早いうちにDBを理解し使えるようにする必要があるとはわかっていながらも、 現時点のアイデアでデータベースまで構築する必要はあるのか? いったいどういう段階でデータベースを構築する「必要性」が出てくるのか? という疑問から質問させていただきました。 話は逸れますが、 本当はユーザー登録やらパスワードやらで縛られるような世界は作りたくないんですよね。 みんなが好きに訪れて、目的のことが達成できて、好きなだけ情報を共有できる場所が多いほど良いことなんじゃないかと思ってます。 これから、いろいろと勉強します!
退会済みユーザー

退会済みユーザー

2017/03/04 12:25

> 簡単なWEBアプリを考えています Web アプリを作りたいと考えているのでしたら、DB の使用を避けて通れないと思います。 > 現時点のアイデアでデータベースまで構築する必要はあるのか? とか考えてないで、データーベースのを使えるように勉強することをお勧めします。 > みんなが好きに訪れて、目的のことが達成できて、好きなだけ情報を共有できる場所が多いほど良いことなんじゃないかと思ってます。 本題とは違うことですが気になったので一言。 ネットには善意の人ばかりではなく、悪意を持っている人もいる・・・ということは私が言うまでもなくご承知だと思いますが、「みんなが好きに訪れて」ということを許すと、2ch のようになったり、ボットがスパムコメントを書き込んだりということがあるので、何らかの制限は必要だと思います。
guest

0

1・堅牢。データが肥大しても壊れにくい。

2・検索が高速。「そんなにたくさんのデータを扱うわけではないよ」という人でも比べて見みればなるほど素晴らしいと思うはず。

3・複雑なクエリを1行で書ける。たとえばゲームの登場キャラのデータベースを作ったとして、「赤属性」の「ガールズ系」で「最近1ヶ月以内に追加されたキャラ」を「最大HPが高い順」に並べるなんてことが簡単にできます。

投稿2017/03/03 15:29

mnnEditor

総合スコア162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

starrow1103

2017/03/03 15:32

回答ありがとうございjます。 やはりDBを使うべきは「属性値(というのでしょうか?)が多ければ多いほど」ということになりますね。 うーん、寝ずに勉強したくなってきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問