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


41

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

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

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


4
データベースを持つことは非常に重要です。インプロセスデータベースまたは個別プロセスデータベースを持つことは、実装の選択/詳細です。
9000

2
という事は承知しています。問題は、ローカルアプリケーション用にインプロセスデータベース(SQLiteなど)よりも別のプロセスデータベース(mysqlサーバーなど)を選択する理由です。
9a3eedi

回答:


29

SQLiteは、いつ使用するか、または使用しないかについて、かなり優れた概要を提供します。

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

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

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

記事は、この点について詳しく説明します。また、「クライアント/サーバーRDBMSがより効果的に機能する状況」というタイトルのセクションもあります。一言で言えば、それらは次のとおりです。

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

@ 9a3eedi:実際には、これらの4つのポイントのうち、ローカルストレージと組み合わせたフルデータベースサーバーのシナリオを説明するものはありません(特に最初の2つは正反対です)。これを選んだ理由を教えてください。回答、元の質問に合わない?ちなみに、私はまさにその理由でこの答えに下票を与えました。
ドックブラウン

@DocBrown:クライアント/サーバーRDBMSを使用する必要がある特定のケースは[回答を参照]です。他のすべての場合、SQLiteは正常に動作します。そこに何が不明確なのかわかりませんので、必要と思われる場合はお気軽に答えを編集してください。
デニスドベルナルディ

元の質問は、アプリケーションがローカルでのみ物事を行う場合(タイトルから引用)、またはローカルストレージにサーバーを使用する場合(質問テキストから引用)、ac / sデータベースが意味をなす特定のケースに関するものでした。上記の4つのシナリオは、それとは正反対(最初の2つ)であるか、「ローカル」シナリオとして非常にありそうもない、またはまれです(2つ目)。したがって、あなたが書いたものは間違っていませんが、質問には合いません。
Doc Brown

@DocBrown-簡単な答えは、サイズの大きなデータセットを扱っているか、同時書き込みが必要でない限り、意味がありません。(または、明らかな理由により、SQLiteが提供していないものが必要です。)繰り返しますが、その点が不明な場合は、回答を自由に編集してください。
デニスドベルナルディ

リストが完全だと本当に思う(そして、ローカルシナリオではC / S DBサーバーの使用が意味をなさないという隠しステートメントを与える)場合、私は同意せず、改善できるとは思わないいくつかの明確化を追加することにより、あなたの答え。
Doc Brown

28

単一のユーザーを持つ単一のシステムであっても、「実際の」データベースサーバーは理にかなっています。

  1. 使い慣れた言語(SQL)を使用しますSQLiteはSQLを使用しますが、一部の組み込みデータベース(オブジェクトデータベースNoSQLなど)はSQLを使用しません。これらは一般的ではないため、学習曲線が高くなる傾向があります。
  2. SQLiteなどの製品では提供されない、または少なくとも完全には提供されない参照整合性、制約、トリガーなどを提供します。
  3. 真のマルチユーザー、ACID準拠のネットワークデータベースを対象とすることで、アプリケーションは、単一ユーザー/シングルワークステーションのシナリオで動作するか、同じコードベースを使用するマルチユーザーのホストアプリケーションとして動作するかを選択できます。
  4. ユーザーは、標準ツール(SQL Developer、MySQL Workbench、SQL Server Management Studioなど)を使用してオフラインでデータを調べたり、それらのツールを使用してデータをロードまたはバックアップしたりできます。タイプ、人々はC / Sデータベースの世界からそれらのツールにより精通しているかもしれません。

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


9
実際には、完全なSQLサポート、参照整合性、ACID、ストアドプロシージャを備えたデータベースシステム(Sybase SQL Anywhere)が1つあり、ローカル構成で実行する場合、サーバーのセットアップやサービスとしてのインストール必要ありませ(ただし、マルチユーザー環境のセットアップ)。私は誰かがものを知っていれば、私は興味でなり、これらの性質を持つ他のデータベースシステムを知らない。
ドク・ブラウン

3
@DocBrown IIRC MS SQLServer Compact は、dllとして提供されるため、これを提供しますが、おそらくLocalDBの方が適しています。管理者権限が必要ですが、サービスとしてインストールする必要はありません。
gbjbaanb

5
妥当性の議論に欠点を追加するために-回答で不思議なことに既に言及したSQLiteを除いて、多くの非SQLデータベースおよびデータベースに似たシステム(OrientDB、Solrなど)には専用の埋め込みサポートがあります。
ミコワク

14
SQLiteは、参照整合性(有効にする必要があります)と基本的な制約を提供します。適切に使用すれば、ほとんどのサーバーよりも大幅に高速です。サーバーと比較した場合の主な欠点は、シングルライターであることです。
1月Hudec

2
@DocBrown:Firebirdの組み込みデータベースは、参照整合性、ACID保証、ストアドプロシージャ、トリガーなど、完全なSQLサポートを提供します。組み込みデータベースへの複数の同時接続をサポートするために使用されることはなく、その制限がまだ存在するかどうかはわかりませんが、SQL機能セット全体はそこにあります。
メイソンウィーラー

21

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

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

SQLliteのような優れたローカル組み込みデータベースの今後の人気は、ごく最近のものです。


私が覚えていることから、AmaroK 1(XMMSに基づいている可能性があります)はデータベースサーバーに依存していませんでした。これは、依存関係を導入KDE4でリリースされてしまったのAmarok 2、だった、そして時に私は彼らがINSTALのMySQLに私を必要とし、バックグラウンドで実行されていることを続けるだろう、それは非常に奇妙なことが判明
9a3eedi

10

最も重要な識別機能は並行性です。

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

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


5

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

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

与えられた例がこれを利用するかどうかわからない。


2

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

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

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


通常のユーザー(たとえば、AmaroKなどの音楽プレーヤー)にアプリケーションをデプロイする場合、MySQLサーバーをインストールしてバックグラウンドで実行することは、システム要件が少なすぎるため、ユーザーが使用するものになると思います。好きじゃない。しかし、それはアプリケーションに依存すると思います。これは、SQLiteのようなものを使用することとは対照的です。
9a3eedi

2

それは、データの抽象化と全体的なアプリケーション領域、アクセス管理要件、データ保守に計画している投資、必要なプロトタイプの緊急性、学習曲線のどこにいるかなどに依存します。

他のアプリケーションからのアクセスを必要としないアプリケーションに緊密に統合されたデータベースを確保したい場合、埋め込みデータベースの島を作成します。SQLiteを使用したMozilla Firefox Web Storageの実装を例として挙げることができます。

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

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

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

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

V / r、Umut

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.