web-dev-qa-db-ja.com

SQLiteはMySQLよりも高速ですか?

私は、teamspeak 3サーバーをセットアップしたいです。データベースとしてSQLiteとMySQLを選択できます。まあ、私は通常「本番環境でSQLiteを使用しない」傾向があります。しかし、一方で、それはteamspeakサーバーです。さて、これをググってみましょう...私はこれを見つけました:

  1. 速度
    SQLite3はMySQLデータベースよりもはるかに高速です。これは、ファイルデータベースが常にUNIXソケットよりも高速であるためです。チャンネルの編集をリクエストしたとき、MySQLデータベース(127.0.0.1)では約0.5〜1秒かかり、SQLite 3ではほぼ瞬時(0.1秒)でした。[...]

http://forum.teamspeak.com/showthread.php/77126-SQLite-vs-MySQL-Answer-is-here

SQLiteとMySQLの議論を始めたくありません。 彼の議論は有効ですか?彼の言うことは真実だとは想像できません。しかし残念ながら、私はこの質問に自分で答えるのに十分な専門家ではありません。

TeamSpeak開発者は、SQLiteとMySQLのdbアーキテクチャにいくつかの大きな違いがあるかもしれません。これは速度の大きな違いを説明します(これは想像できません)。

12
boop

最初のアクセス時はSQLiteでより速く表示されます

SQLiteのアクセス時間は、最初はより速く表示されますが、これは少数のユーザーがオンラインの場合です。 SQLiteは非常に単純なアクセスアルゴリズムを使用します。高速ですが、同時実行性は処理しません。

データベースが大きくなり始めると、同時アクセスの量が減り始めます。サーバーが複数のリクエストを処理する方法は完全に異なっており、より並行性が高くなるようにより複雑で最適化されています。たとえば、SQLiteは、更新が行われている場合、テーブル全体をロックし、注文をキューに入れます。

RDBMSは拡張性を高める多くの追加作業を行います

たとえば、MySQLは、1人のユーザーでもアクセスQUEUEを作成し、1回のユーザーごとの実行のみを許可するのではなく、テーブルを部分的にロックします。

これにより、1人のユーザーの接続が遅くなりますが、将来的には何百人ものユーザーがオンラインになり、この場合、SQLiteの単純な「全テーブルをロックして単一のクエリを実行する」プロシージャがサーバーを占有します。

SQLiteは、シンプルさと自己完結型データベースアプリケーションのために作られています。

SQLiteがデータベースに同時に10の同時アクセス書き込みを行うことを期待している場合、SQLiteを使用してデータベースへのデータの書き込みと読み取りを常に行う100ユーザーアプリケーションは必要ありません。このようなシナリオ用に設計されたものではなく、リソースを無駄にします。

TeamSpeakのシナリオを考えると、SQLiteで大丈夫です。一部のビジネスでも大丈夫です。一部のWebサイトでは、新しいコンテンツを追加しない限り読み取り専用のデータベースが必要です。

この種の用途では、SQLiteは安価で実装しやすく、自己完結型の完璧なソリューションであり、仕事を成し遂げます。

12
José Algarra

SQLiteとMySQLを個人的にテストしたことはありませんが、逆の例( たとえば )をWebで見つけるのは簡単です。あなたはそれほどそれほど宗教的ではない質問をします:その議論は有効ですか?

第一に、議論の本質はいくぶん奇妙です。 Unixソケットは、データベースサーバーとの通信に使用されます。 「ファイルデータベース」は、通信がコンパイルされたインターフェイスを介しているという事実を指しているようです。 SQLiteの用語では、 サーバーレス です。ほとんどのデータベースはデータをファイルに保存するため、「ファイルデータベース」という用語は少し誤解を招きます。

データベースのパフォーマンスには、次のような複数の要因が関係します。

  • データベースへのクエリの通信。
  • コンパイルの速度(プリコンパイルされたクエリを保存する機能はここでプラスです)。
  • 処理の速度。
  • 複雑な処理を処理する機能。
  • コンパイラーの最適化と実行エンジンのアルゴリズム。
  • アプリケーションへの結果の通信。

インターフェースをコンパイルすることは、これらの最初と最後に影響します。サーバーなしのデータベースが他のデータベースより優れていることを妨げるものは何もありません。ただし、データベースサーバーは通常、数百万行のコードであり、SQLiteよりもはるかに大きくなっています。この多くは追加の機能をサポートしています。その一部は、最適化の改善とアルゴリズムの改善をサポートしています。

ほとんどのパフォーマンスの質問と同様に、答えは環境内のデータでシステムを自分でテストすることです。サーバーレスであることは、自動パフォーマンスの向上ではありません。サーバーが存在しても、データベースは「より良い」ものにはなりません。これらは、異なる最適化ポイント用に設計された異なるアプリケーションです。

4
Gordon Linoff

関連する違いは、SQLiteがはるかに単純なロックアルゴリズム(単純なグローバルデータベースロック)を使用することです。

詳細なロックの使用(MySQLや他のほとんどのDBサーバーと同様)はmuchより複雑で、データベースユーザーが1人だけの場合は遅くなりますが、より多くの同時実行を許可する場合は必要です。

2
CL.