多くのグーグル検索の後、mysql と sqlite3 の利点/違いは何なのか疑問に思っていました。開発データベースを本番データベースに移動するときのスピード バンプを主に望んでいますが、これは主に私のコードで発生すると思います。パフォーマンスの主な違いを知っている人はいますか? ある?または、この 2 つを比較した文献の方向性を教えていただけますか?
6 に答える
あなたの質問から、開発と本番で異なるデータベース システムを使用することについて話しているのではないことを願っています。
開発と本番で別の DB を使用している場合は、しないでください。データベース エンジンが異なれば動作も異なり、予期しないバグが発生する原因となります。開発システムをできる限り本番環境に近づけるようにしてください (ヒント: VM で実行してください)。
SQLite と MySQL はどちらも、適切なコンテキストでは優れた製品です。彼らの能力が何であるかを理解してください。
SQLite:
- クライアント アプリケーションとインプロセスで実行
- ネットワーク機能なし
- これにより、クエリのオーバーヘッドが非常に低くなります
- IPC、システムコール、およびデータコピーが少ないため、簡単なクエリではかなり高速になる可能性があります。
- 非常に限られた同時実行性 (データベース ファイルごとに 1 つのライターまたは複数のリーダーのいずれかであると思います)
MySQL:
- はるかに多くの機能
- エンジンの選択 (InnoDB は多くのワークロードに優れた機能を提供します)
- ストレージ、バックアップ、復元などをより詳細に制御
- ネットワーク対応 - 大規模なアプリケーションでの使用を可能にします
- 並行性の向上 - InnoDB エンジンには MVCC があります。つまり、リーダーがライターをブロックしたり、ライターがリーダーをブロックしたりしません。古い MyISAM エンジンでさえ、データベース全体を sqlite としてロックするのではなく、テーブル レベルのロックを備えています。
- おそらく複雑なクエリのより良いオプティマイザー
要するに、それらを同じように比較することはできません。SQLite は組み込みデータベースとして非常に人気があり、Firefox 3 には組み込みデータベースが組み込まれています。
SQLite では、データベースをローカル ディスク (または、ネットワーク ディスクが利用可能な場合はもちろん) に保存することに行き詰まっています。Web アプリケーションをスケーリングする場合は、おそらく MySQL などのサーバー ベースのデータベースを使用する必要があります。
SQLite は組み込みデータベース エンジンですが、アプリケーションと同じプロセスで実行されます。MySQL は、独自のプロセスで実行されるデータベース サーバーです。
SQLite は、アプリケーション サーバー プロセスとデータベース サーバー プロセスの間で要求をまとめて、処理と帯域幅を無駄にしません。単純に要求を解析し、何をすべきか (クエリ プラン) を判断し、SQLite データベース ファイルで fopen() を呼び出してクエリを実行します。
サイトが多数の同時リクエストで打撃を受けている場合、MySQL の方が優れており、すべてのリクエストを適切に処理するために追加のスレッド化とキューイングが必要です。
サイトが 1 日あたり 100000 ヒットを超えない場合、またはデータベース サイズが約 25 GB を超えない場合は、おそらく SQLite を使用するのが最適なデータベースです。SQLite のもう 1 つの利点は、余分なプロセスやデータベース サーバーが不足している状況で簡単に使用できることです。http://www.sqlite.org/whentouse.htmlをチェックしてください。
SQLite を使用して他のことを行うこともできます。SQLite に関するその他の洞察については、http: //www.squidoo.com/sqlitehammer をご覧ください。
これを見る簡単な方法は次のとおりです。Sqliteはメモ帳で、MySQLはMSWordです。どちらも基本的に同じことをしますが、コアが非常に異なり、さまざまな目的で使用されます。
Sqliteは優れたデータベースであり、多くの場合十分に優れていますが、MySQLははるかに複雑なシステムですが、その複雑さには力が伴います。
また、開発と本番環境で異なるデータベースを使用しないことをお勧めします。顧客が使用しているものとは異なるものを使用するのはばかげています。開発中にスピードアップが必要な場合、顧客はプログラムの使用中に同じスピードアップを使用できます。
SQLiteは最速です
SQLiteは1つの接続でのみアクセスでき、ファイルシステムを使用してすべてを保存し、サーバーを使用しません。
高速で軽量です。実際には、MySQLの2倍の速度であると想定されています。
SQLiteとMySQLは同じタスクには使用されません
5 Goを超えるデータを保存する必要がない単純なアプリには、SQLiteを使用します。EG:ローカルアジェンダ、音楽プレーヤー、モック、またはUSBキーに埋め込むWebサイトのデモ。
Mysqlは、膨大なデータセットを処理し、同時にアクセスできるため、より大きなプロジェクトにはMysqlを選択する必要があります。ユーザーアクセスやイントラネットなどのあるWebサイトに使用します。
これは言語によって異なる場合がありますが、PHPでは、データベースを散発的に変更するだけの場合はSQLiteが適しています。これは、整合性を確保するために、データベースを変更するときはいつでもSQLiteファイルがロックされ、変更が加えられてファイルに書き込まれ、ファイルのロックが解除されるためです。この間、他のプロセスからデータベースにアクセスすることはできません。その間、他のプロセスからの要求が失敗またはブロックされるかどうかは、実装によって異なります。
実際、比較的大量のデータと操作に直面しているときにSQliteのバグが原因で、プログラムのデータベースロジックを再投影する必要があることに気付きました(すでに本番環境)。データベースのロックダウンに失敗し、そのままにしておくだけです。プログラムがシャットダウンします。つまり、すべてのプログラム データの進行は一時的であり、すべての追加は失われます。可愛いでしょ?
MySqlに移行し、ポイントに到達し、速度の違いをテストするために何かを試したところ、280'500レコードのテーブルで「UPDATE table SET column1 = column1」として安全なクエリのようなものが出てきました.SQliteは約13を必要としました秒ですが、MySql はわずか 1 秒でした。
私はまだデータベースの第一人者ではありませんが、単純な考慮事項を選択するだけで十分です。限られた量のデータ、複雑さ、および同時実行性 (重要でないデータで動作する小さなユーティリティやプログラムなど) に対して単純なメモリ ストレージが必要な場合は、それ以外の場合は、安定性、同時実行性、大量のデータ、クエリの複雑さが必要な場合は、DB が MySql になります。
開発中と実稼働中の異なるデータベースについては同意しませんが、そうした場合は、確かに正当な理由があります。