大規模なデスクトップアプリケーションでSQLがそれほど普及していないのはなぜですか?


28

ソフトウェア開発者として、私は小さな自家製アプリから中規模のエンタープライズアプリケーションに至るまでのプロジェクトに取り組んできました。ほとんどすべてのプロジェクトで、データベースを使用したか、最初から使用しないことを選択したことを後悔しました。

今、私はデータベースと一般的なアプリケーションでのそれらの使用についていくつかのことを疑問に思っています:

  • Windows自体が「中央」のSQLデータベースを使用しないのはなぜですか?例えば:
    • エラー報告データは多数のファイルに保存されますが、
    • Windows Updateはすべてをフラットファイルに保存しますが、
    • アイコンキャッシュは、SQLなどを介してアクセスされていないように見える非常に奇妙な単一のファイルに格納されます。
  • 多くの大規模なアプリケーションがデータベースの使用を避けるのはなぜですか?たとえば、Microsoft Outlookは、.pstファイル用の独自の形式を持ち、レジストリにデータを保存することにより、車輪を再発明する代わりに、実際のデータベースを使用することで得られませんか?

データベースが全体的な複雑さとわずかなパフォーマンス損失の追加レイヤーを追加する場合、ほとんどの場合、特に大きなバイナリではなく小さな組織化されたデータチャンクのストレージに関して、コードを単純化するという大きな利点の代価ですストリーム。では、実際にデータベースを実際に使用している製品が非常に少ないのはなぜですか?おそらく、実際にSqliteデータベースを使用するアプリケーションは、FirefoxとMicrosoft Exchangeだけでしょう(ただし、最後のアプリケーションはデスクトップアプリケーションではありません)。

また、Microsoft OfficeやMicrosoft Expressionなどの一連のアプリケーションは、統合されたSQLデータベースを持ち、アプリケーションの展開、データの更新/アップグレード、それらのアプリケーション間でのデータの共有、バックアップの作成を容易にすることから恩恵を受けませんなど。


4
独自のプラットフォームについて話してください。;)多くのMac / iPhoneアプリはCoreDataを使用します。CoreDataは一般にSQLiteデータベースをストレージに使用します。
ミパディ

8
データベースも「ファイルの集まり」です。あなたが提示したすべての例は、実際にはデータベースであり、SQLクエリ可能なリレーショナルデータベースではないと主張します。
アロングラネク

8
データベースとは、リレーショナルデータベースを意味します。
オリビエジャコット-デスコンベス

回答:


20

1)一般的に、完全なRDBMSを実行するオーバーヘッドは大きすぎるため、システムに不必要な負荷がかかり、複雑になります。

1つインストールすると、開発者としてのあなたの人生は楽になりますが、マシンの動作が遅くなり、問題が増える可能性があるため、マシンの所有者の人生は悪化します。開発者対ユーザーの対立では、ユーザーはほとんど常に勝つべきです。

2)多くのデータストアには、SQL Server Expressのようなものでは満たされない特定のニーズがあります。

たとえば、エラーログは、書き込みが発生してデータが利用できる可能性を最大化するために、可能な限り単純なものに書き込まれる必要があります。SQL Serverがこれほど単純になることは決してありません。

より複雑なアプリケーションの場合、議論は非常に特定のユーザーケースの最適化に関する傾向があります。フラットファイルは非常に高速です。


5
サーバー全体をインストールする必要があるデータベースのようなものを彼が意味したとは思いません。SQLiteはサーバーなしで動作し、オープンソースアプリケーションで広く使用されています。
ローレント

@Laurent-彼がそうしなかった場合、なぜ彼は以下のSQL Liteの答えを受け入れることができたのに、なぜそれを受け入れられた答えとしてマークしたのですか?
ジョンホプキンス

30

多くのアプリケーションにはSQLiteが組み込まれています。彼らのウェブサイトからの引用:

SQLiteは、自己完結型のサーバーなしのゼロ構成のトランザクションSQLデータベースエンジンを実装するソフトウェアライブラリです。SQLiteは、世界で最も広く展開されているSQLデータベースエンジンです。SQLiteのソースコードはパブリックドメインにあります。」

利用可能なAPIの1つを使用して、データベース、テーブルなどを作成するだけで、SQLエンジンはすべてをバイナリファイルに保存し、ユーザーのファイルシステム内のどこにでも配置できます。何より、FLOSSです。


23

Windowsには、Extensible Storage Engine(ESE)という名前のデータベースエンジンが同梱されて使用されます。

ESEは、Active Directory、Exchange Server、Windowsメール、およびデスクトップ検索で、他の多くのWindowsサービスおよびアプリケーションで使用されています。

開発用に、オープンソースのESEラッパーが存在します:

Windowsのすべての最新バージョンに付属するESEを使用すると、データベースの展開に関する懸念はありません。アーキテクチャ的にESEは、SQLiteなどの組み込みデータベースと同様の役割を果たします。


たぶん、この機能を宣伝できなかったせい!! ?? 90年代以降、ほとんどMicrosoftテクノロジのみを使用して開発しており、これを聞いたことがないのはどうしてですか。優れたフロントエンドの欠如が別の理由かもしれません。ウィキペディアから:「長年、Microsoftだけが使用するプライベートAPIでしたが、それ以来、誰でも使用できる公開されたAPIになりました。」また、「JET Blue APIは2005年に公開され、Windows内外を問わず、増え続けるアプリケーションとサービスによる使用を促進しています。」
マイクはモニカをサポートします

8

リレーショナルデータベースは、すべてのドメインにとって最も効率的なデータ構造ではありません。多くのデスクトップアプリケーションは組み込みデータベースを使用していますが、表示されているのがデータファイルが2つしかない場合は、それが実行されていることをすぐにはわかりません。


それがポイントです:埋め込み(SQLではない?)データベースやMicrosoft Outlookのような独自の地球外バイナリ形式の代わりに、Microsoft SQL Server(Express?またはすべてのWindowsプラットフォームにプリインストールされた単一のローカルホストSQL Serverの特別なライセンス?) ?
アルセニムルゼンコ

彼が言ったように、SQLはすべてに最適というわけではありません。多くのアプリケーション固有のデータストアは、1つのタスクに対して高度に最適化され、その結果、フットプリントが小さいSQLよりも高速になります。
ジョンホプキンス

3
@MainMa:追加の依存関係が追加されました。ユーザーはSQL Serverをインストールして実行する必要があります。これは簡単なことではありません。特別なlocalhost SQL ServerがすべてのWindowsコンピューターにプレインストールされている場合、異なる場合がありますが、それは起こりません。
デビッドソーンリー

SQLServer Compactは簡単にインストールできます。いくつかのファイルをコピーするだけです。
-MarkJ

7

Windows自体が「中央」のSQLデータベースを使用しないのはなぜですか?

実際、このアイデアはしばらくの間マイクロソフトで開発されてきました。WinFSと呼ばれます。これは興味深い技術であり、MSDNサブスクライバーが利用できます。近日中に、VMにインストールして、いじくりましょう。


2
WinFSは、Windowsの(当時の)Longhornの「次の大きなもの」であり、PCの使い方をまだ知っていた頃のことを今でも覚えています。:-)
デニスドバーナーディ

6

データベースは柔軟性を提供し、すべての機能と同様に、ほぼ確実にコストがかかります。フラットファイルが機能する場合、アドホックレポートのように予期しない方法でデータを照会する必要のある人はいないと想定できます。

データベースは、複数の接続/入力をうまく処理します。繰り返しますが、これがデスクトップアプリの要件ではない場合、なぜ追加の複雑さを追加するのですか?ユーザーインターフェイス/ Outlook自体の実際のインストール以外に、コンピューター上のOutlookファイルに書き込もうとしている他のアプリケーションまたはユーザーは何人ですか?

「SQLのような単一の言語に適合すると思われる方法ですべてのデータをクエリできるようにする」という観点から、すべてのデータがリレーショナルデータベースにある方が簡単ですが、これは多くのアプリケーションで優先されることはめったにありません。

ほとんどのプログラマーは、以下からそれを見ます:

  • 私はアプリが何をすべきかを知っています、これがそれがするべきであるすべてです

  • 私のアプリは、これらのデータにアクセスおよび/または操作する唯一のエンティティです

  • 自分のデザインの単純なファイル構造が機能します

  • 少なくとも1つのアプリケーションについては、他の人のコードに依存することを避け、完全に制御したいと思います。


1
+1。その通りです(ほとんどの場合)デスクトップアプリに複数の接続はありません。これにより、SQLデータベースの利点が減少します。
アルセニムルゼンコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.