PHPとMySQLを使ったアプリを作成して有償無償に関わらず配布する場合は
ソースを完全に公開するかコマーシャルライセンスを購入する必要があると聞きました。
そこで質問なのですが
MySQLを使用するのはデータベースでの使用が主だと思うのですが
データベースを使用するとやはり通常のテキストファイルなどを検索するより
ずっと早いのでしょうか?
現在はcsv形式のテキストにデータを入れて使っております。
またセキュリティの面でも安全性が向上すると思いますが
劇的に向上するのでしょうか?
検索が早い・セキュリティの向上以外でデータベースを使用する利点などあれば教えて下さい。
ちょっとしたデータを扱うだけでしたら、CSVでも十分でしょう。
複雑なデータを扱う場合、例えば商品の管理をしたいよう場合、
商品リストのデータ、顧客のデータ、会計のデータ、いろんな種類のデータが出てきます。
これらを組み合わせて、データ処理をしたい場合、データベースでしたら、SQLにより様々な処理が出来ますが、CSV などではプログラムにより処理を記述しなければなりません。
大量のデータを関連付け、高速に簡単に処理できるのが、DB(RDBMS)を利用する、最も大きな理由の一つかと思います。
また大規模なシステムを構築する上では、Web サーバとDBサーバを別にし、負荷を分散することも可能です。
MySQL というより RDBMS 一般の質問と受け取ります。
まず、誤解を恐れずに言えばある程度以上の規模であればデータの管理においては CVS 等に比べて圧倒的に優れています。
データベースの持つ特性としてよくあげられるのは ACID 特性と呼ばれる4つの特性です。
http://ja.wikipedia.org/wiki/ACID_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%A7%91%E5%AD%A6)
これにより、単なるファイルを扱う時に比べて圧倒的にデータが破損したりする事がなくなります。
簡単に言えば同時にアクセスがあったとき、ファイルをロックしたりしてファイルが壊れないようにする処理を全部データベースにお任せに出来ます。
また、そのほかにも
・SQL という RDBMS 共通の言語によってアクセスできるので、システムが変わっても共通で使える
・インデックスを使用したりキャッシュを備えたりといった検索性能を高める手段をいくつも提供している
・レプリケーションやクラスタリング等の複数台のサーバーが連携して性能を上げる手段が提供されている
・アクセスされている途中でも安全にバックアップできるなどバックアップにさまざまな手順が用意されている
と、簡単にあげるだけでいくつもあります。
なお、検索は基本的に数十から数千倍は早くなると思っていただいて構いませんが、セキュリティについてはネットワーク上に接続できるようになる為設定ミスがあればむしろセキュリティが低下する事もあります。
データベースを使用すれば必ずしもセキュリティが向上するわけではありません。
回答ありがとうございます。
なるほど、利点が多いですね。
それほどデータ量も項目も多くないのでcsvでもいいかと思っていたのですが
数十から数千倍は早くなるとのことなので
考えてみる価値はありそうです。
ですがそうなるとソースの公開やコマーシャルライセンスの問題が出てきそうですね。
データベースの作成にはコマンドラインで色々と
やるようなので後回しにしていたのですが
こちらの方も学習する必要がありそうです。
参考になりました。
ありがとうございます。
ですがそうなるとソースの公開やコマーシャルライセンスの問題が出てきそうですね。
一般的には Webアプリケーションで使用する分には GPL ライセンスを選択してもユーザーにソース公開の義務はありません。
また、PHP であれば SQLite という RDBMS も使えますのでまずはそちらを使う方がお手軽かもしれません。
http://journal.mycom.co.jp/special/2004/php5/
SQLite はパブリックドメインで公開されていますし、一定規模までであれば MySQL を凌ぐ高性能を誇ります。
なるほど。公開の義務はないわけですね。
ありがとうとざいます。
PHP5であればSQLiteというのもあるようなので
そちらも検討してみます。
ありがとうございます。
御質問に関して回答いたします。
>複数のデータがある場合にDBを利用すると
>プログラムにいちいち記述しなくてもいいということでしょうか?
そういうことです。
先ほどの例で、商品リストと顧客データという二つ CSV から、何人の客が1000円以上の商品を購入しているか探したい場合、
プログラムで処理するとすると、まず1000円以上の商品をリストアップし、それぞれに関して顧客リストから検索しないとなりませんが、DBを利用すれば、
SELECT count(*) FROM customerTable WHERE productID IN ( SELECT productID FROM productTable WHERE price>1000 );
というような短い処理(説明のためなのでテーブル情報等は適当です)で済みます。
>またサーバーとDBを別にすることで負荷分散できるとのことですが
>例えばサーバとcsvのあるデータを別にするということとは意味が違うのでしょうか。データを別にするという意味が今ひとつ不明確ですが、私の意図するところは、
というようなイメージです。
データを別サーバ(ファイルサーバ)に置くようなことをイメージされていたら、これはデータの処理をWebサーバで行うのでは、ファイルへのアクセスの負荷がある分かえって処理が遅くなってしまいます。
大変参考になります。
DBサーバである程度処理されたものがくるので
負荷も軽く処理も早いということですね。
ここまで違うとデータベースの有用性が理解できてきました。
ありがとうございます。
ありがとうございます。
いまいちデータベースの位置づけがわからないのですが
複数のデータがある場合にDBを利用すると
プログラムにいちいち記述しなくてもいいということでしょうか?
またサーバーとDBを別にすることで負荷分散できるとのことですが
例えばサーバとcsvのあるデータを別にするということとは意味が違うのでしょうか。
データベースそのものを理解出来てないところがあるので
検討違いな質問かもしれませんが
回答いただければと思います。