web-dev-qa-db-ja.com

アプリケーションがローカルでのみ行う場合は、データベースサーバーを使用しても意味がありますか?

基本的にシステムのローカルで実行されるアプリケーションソフトウェアであるいくつかのアプリケーションを見ました(そのため、ネットワーク経由であまり通信しません)。これらのアプリケーションは、データを格納するためにデータベースサーバーに依存しているようです。

アプリケーションの例は、Amarok(Linuxで人気の音楽プレーヤー)です。彼らがまだこれを行うかどうかはわかりませんが、Amarokをインストールすると、MySQLサーバーをインストールし、常にバックグラウンドで実行する必要があったことを覚えていました。

Sqliteのような小さな埋め込みSQLソリューションを使用する場合と比較して、ローカルストレージにサーバーを使用する利点は何ですか?私は一般にアプリケーションソフトウェアについて話していますが、必ずしもamarokではありません(これは単なる例です)。組み込みデータベースと比較してデータベースサーバーを使用することが理にかなっている状況はありますか?

41
9a3eedi

SQLiteは、いつ使用するか、または代替案を使用するかについて、かなり良い概要を提供します。

https://www.sqlite.org/whentouse.html

この要約行は、私の経験ではSQLiteのユースケースを非常によく捉えています。

SQLiteはクライアント/サーバーデータベースと競合しません。 SQLiteはfopen()と競合します。

記事はこの点でかなり拡大します。また、「クライアント/サーバーRDBMSが適切に機能する状況」というタイトルのセクションもあります。一言で言えば、それらは次のとおりです。

  • クライアント/サーバーアプリケーション:ネットワーク上の複数のユーザー。
  • 大量のWebサイト:シャーディングを必要とするのに十分な量の書き込みまたは読み取り集中。
  • 非常に大きなデータセット:1つのディスクに合理的に格納できるよりも大きい。
  • 高い同時実行性:特に同時書き込み。
29

ユーザーが1人だけのシステムでも、「実際の」データベースサーバーは理にかなっています。

  1. 使い慣れた言語( [〜#〜] sql [〜#〜] )を使用しています。 SQLite はSQLを使用しますが、一部の埋め込みデータベース(例 object databaseNoSQL )はSQLを使用しません。それらは一般的ではないため、学習曲線が高くなる傾向があります。
  2. SQLiteなどの製品では提供できない、または少なくとも完全ではない参照整合性、制約、トリガーなどを提供します。
  3. [〜#〜] acid [〜#〜] に準拠した真のマルチユーザーを対象とすることにより、アプリケーションはシングルユーザー/シングルワークステーションシナリオで作業するか、マルチユーザーとして作業するかを選択できます。 -user、同じコードベースを使用するホスト型アプリケーション。
  4. ユーザーは、標準ツール(SQL Developer、MySQL Workbench、SQL Server Management Studioなど)を使用してオフラインでデータを検査したり、これらのツールを使用してデータをロードまたはバックアップしたりすることができます。タイプ、人々はおそらくC/Sデータベースの世界からのそれらのツールにもっと慣れているでしょう。

主な欠点は、データベースサーバーソフトウェアをインストールして保守する必要があることです。これは、非技術ユーザー(および多くの技術ユーザー)にとっても少し複雑です。 Linuxなどのオペレーティングシステムを使用すると、これが簡単になります。LinuxシステムでPostgreSQLとMySQLを実行しています。私は、自分の側でほとんどまたはまったく対話せずにそれらにフックするアプリケーションをインストールしました。

28
user22815

慣性が関係していると思います。

Amarokは1997年からのXMMSに基づいています。goodデータベース機能を使用するには、サーバーを使用する必要がありました。これは、サーバーがファイルベースのソリューションよりもはるかに強力であるため、決して優れていなかったためです。データベース機能。

SQLliteのようなローカル埋め込みデータベースgoodの今後の人気の高まりは、かなり最近のものです。

21
Pieter B

最も重要な識別機能はconcurrencyです。

ユーザーの1つのインスタンスで実行されるアプリケーションが1つしかない場合は、通常、埋め込みソリューション(sqliteでもオブジェクトストレージでも)で問題ありません。

ただし、データベースを同時に操作する必要のある複数のインスタンスがある場合は、データベースを同期するためのサーバーが必要です。 SQLiteは、データベース全体で一度に1つの書き込みしか許可しないため、他のほとんどの組み込みソリューションでも許可されます。また、複数のアプリケーションを使用している場合でも、組み込みソリューションでは一般にどちらも許可されていない、より詳細な制約仕様が必要になる可能性があります。

10
Jan Hudec

他の多くの回答は同時実行性を利点として説明していますが、dbがサーバーとして実行されているため、データベースはアプリケーションを実行せずにタスクを実行できます。これは、メンテナンス、バックアップ、別のサーバーとの同期、またはスケジュールされたタスクのいずれかです。

アプリがクライアント/サーバーアプリに変わる可能性がある場合は、後で移植するのではなく、最初からRDBMSを使用することをお勧めします。

与えられた例がこれを利用するかどうかはわかりません。

5
JeffO

メモリとCPUが少ない組み込みシステムを実行しているのでない限り、サーバーをバックグラウンドで実行しても害はないと思います。

データベースサーバーをローカルで実行しても問題ありません。データベースは、データにアクセスして操作するためのものです。ネットワークアクセスはプラスであり、必要かどうかは不明です。これを行うエンジニアリングおよび科学ツールがいくつかあります。

ローカルアプリケーションでデータを使用しているとします。なぜデータベースを使用すべきではないのですか?何ではなく?

2
cauchy

これは、データの抽象化と全体的なアプリケーションスペース、アクセス管理の要件、データメンテナンスに計画している投資、必要なプロトタイプの緊急性、学習曲線のどこにいるかなどによって異なります。

他のアプリケーションからのアクセスを必要としないアプリケーションにデータベースを緊密に統合したい場合は、組み込みデータベースのアイランドを作成します。 SQLiteを使用したMozilla Firefox Web Storageの実装が例として挙げられます。

限られたデータでさらに効率を上げる必要がある場合は、インメモリデータベースの設計を選択することをお勧めします。

一方、同じデータに対して複数のクエリを実行する多くのアプリケーションがあり、パフォーマンスを最適化するためにデータストレージのより良い構造化が必要な場合は、集中化されたDBMSが必要です。大量のデータが必要で、クエリの応答時間が全体的なユーザーエクスペリエンスに大きく影響する科学研究には、この方法を絶対に選びます。

Amarokの場合、組み込みデータベースのパスを選択する前に、それは当時のオープンソースDBMSの選択だったと思います。

手元に特定のシステム定義がある場合、短所と長所を重み付けするのが簡単になります。

V/r、Umut

2