3

PHP-MySQL Webアプリケーションを改善する必要があります。これは、REPL操作(および一部の検索機能)にMySQLのみを使用します。私が使用したアプリケーションの99%は、レプリケーション、クロステーブル制約、ロックなどの高度なMySQL機能を使用したことがありません。

私の理解では、代わりにSQLiteを使用する必要があります。

これを行うと、実用的なメリットはありますか?大幅な(> 100ms)速度の向上が見られますか?1,000,000行を超えるテーブルで問題が発生する可能性がありますか?

4

2 に答える 2

8

それに対する包括的な答えはありませんが、考慮すべき主なポイントがあります。非常に良い経験則は、並行性の程度が高いほど、MySQLからより多くの利益を得るということです。逆もまた同様です。

つまり、データベースリクエストが同時に発生することはないシナリオでは、SQliteを使用することで高速化が見られる可能性がありますが、100ミリ秒程度になるとは思えません。

この背後にある理由は(非常に大まかに):

MySQL、PostgreSQL、MS SQL、Oracleなどのデータベースサーバー環境では、専用プロセス(またはプロセスのグループ)がデータベースファイルに排他的にアクセスします。重要な部分は専用です。これは、並行性の問題を処理中に解決できることを意味します。

SQlite、MS Access(Jet Engine)などのファイルベースのデータベースでは、複数のプロセスがお互いを知らなくてもDBファイルにアクセスします。これは、同時実行の問題をDBまたはヘルパーに書き込むことで解決する必要があることを意味します。ファイル。これは通常、はるかに遅く、堅牢性が低くなります。それと引き換えに、データベースクライアント(Webアプリ)とデータベースサーバー(処理中)の間の通信のオーバーヘッドは存在しません。

編集

コメントの後、私は同時読み取りではなく同時書き込みについて話していることをより明確にしたいと思います。変更されていないデータセットの同時読み取りは難しい問題ではありません。ロックはまったく必要ありません。

于 2012-09-03T21:54:05.287 に答える
2

SQLiteの主な利点は、クエリ言語としてSQLを使用するファイルベースのリレーショナルデータベースであるということです。ファイルベースであると、デプロイメントが大幅に簡素化され、アプリケーションに小さなデータベースが必要であるが、データベースサーバーが問題となる環境で実行する必要がある場合に非常に適しています。(たとえば、多くのブラウザはSQLiteを使用してCookieストアを管理します。その問題にデータベースサーバーを使用すると、さまざまな方法で非常識になります。)

MySQLの主な利点(正常なテーブルタイプ)は、クエリ言語としてSQLを使用するデータベースサーバーであるということです。サーバーベースであると、ファイルベースのシステムでは単純に処理できない多くの機能(レプリケーションなど)が可能になりますが、展開がかなり複雑になります。

データベースサーバー(MySQLなど)の追加の複雑さの利点がコストを上回るかどうか(SQLiteのようなファイルベースのデータベースエンジンと比較して)は、特にインストールの数や誰が期待するかなど、非常に多くの要因に依存しますそれらのインストールを実行します。

于 2012-09-03T22:33:15.397 に答える