SQLiteは少し過小評価されていませんか?[閉まっている]


15

質問をする前に、まずSQLiteについての私の考えを説明しましょう。

私は、小さくて高速で、さらに重要なことに、本当に必要な機能のみを備えたツールが好きです。だから私はSQLiteが好きで、MS-SQLが少し好きではありません。

たとえば、MS-SQLにはさらに多くの機能、拡張性などがありますが、運が悪い場合はインストールするのが面倒な場合もあります。もちろん、難しいインストールが特定のデータベースを選択しない理由であると言っているわけではありません。

誤解しないでください。MS-SQLは高品質の製品です。私はMS-SQLの経験が豊富です。私はプロとして製品を非常によく理解しています。本当に必要ない(= 10-15未満のユーザーが少ない)状況では、あまり好まない。

データベースのどのくらいの機能を実際に使用していますか?私の経験では、多くの場合、通常のSQL(SELECT、INSERT、およびUPDATE)だけです。

SQLiteが好きです。速くて魅力的です。「インストール」は非常に簡単です。SQLiteは、主張できる以上のことができると思います。なぜ単一プロセス/シングルユーザーアプリケーションにのみ使用するのですか?結局のところ、データベースに常にアクセスしているアプリケーションは多くありません。

たとえば、15人のユーザーがいるERPアプリケーションを考えてみましょう。なぜSQLiteを使用できないのですか?私のプロフェッショナルな経験では、この種のアプリケーションのユーザーはほとんどの場合、アプリケーションを使用している合計時間の約5〜10%でデータベースにアクセスします。他の90〜95%では、画面上の情報を見ているだけで、グリッド/フォームにデータを入力しており、データベース時間の1秒以内の入力を保存しています。Fe:入力時間の1.5分と保存時間の1秒。

「保存時間」中にSQLiteデータベースファイルがロックされている場合、データベースにアクセスする必要のある他のユーザーは待機するだけですが、待機時間が非常に短い(気付かない)ので気が付きません。コードでは、例外を回避するために、データベースの可能性のある「ビジー」時間を処理する必要がありますが、それは難しくありません。

私と同じように考えなければならない人が、SQLiteのクライアント/サーバーソリューションであるSQLiteningを構築しさえしています。これにより、自分がだまされていないのではないかと確信しました。

もちろん、SQLiteが適合しないデータベース集約型のアプリケーションがあります。しかし、今私が考えているように、多くのマルチユーザーアプリケーションは、15ユーザー程度を超えなければ、SQLiteで問題なく動作するはずです。

多くのお客様はハードウェアにあまりお金をかけません。そのため、すべてのもの(Exchange、SQL(s)、クライアントなど)を備えた唯一のサーバーに遭遇することがよくあります。高いシステム要件を持たない製品を提供できれば、顧客は満足するでしょう。SQLiteは(少なくとも多くは)重みを追加しませんが、MS-SQLは追加します。SQLiteは無料、安価、または簡単にインストールできるため、SQLiteは選択しません。実用的/技術的な理由で選択します。

参考:私の職業では、平均して5-6人しか製品を使用しない顧客に製品(カスタムおよび標準、ほとんどはERP関連)を販売しています。いくつかの例外がありますが、10〜15ユーザーを超えません。

質問:私が説明した例のようないくつかのマルチユーザーアプリケーションにSQLiteを使用できると考えるのは正しいですか?知っておくべき技術的な欠点はありますか?正しい選択をするのに役立つ経験(ネガティブまたはポジティブ)は何ですか?

更新:これを他のデータベースの否定的な判断と見なさないでください。それらはほとんどすべてが素晴らしい製品です。ここで私の考えを共有し、これについてのあなたの意見に興味を持っています。


9
申し訳ありませんが、「私は正しいですか?」を追加します 暴言を質問に変えません。
-pdr

1
@pdr:なぜこれを暴言だと思いますか?MS-SQLやその他のデータベースを否定的に判断しているわけではありません。それらはほとんどすべてが素晴らしい製品です。私は自分の考えを共有しているだけで、他のプログラマーの意見を聞くことに興味があります。これ以上でもそれ以下でもありません。

3
そこには疑問はなく、検証のための検索のみです。FAQから:「あなたが直面する実際の問題に基づいて、実用的で回答可能な質問のみを行う必要があります。Programmers.stackexchange.com/faq
pdr

1
@pdr:私はそれを理解していますが、正直にここで質問するつもりでした。たぶん私は明確ではなかったので、質問を言い換えました。

4
データベースの選択、コードの最適化、クライアント、サーバー、またはWebベースのアプリケーション、これらはすべて考慮すべき分野であり、長所と短所はこのようなプラットフォームで議論する必要があります。誰かが特定の技術で償還の質を見つけることを断固として拒否するとき、私にとって暴言はより多くなります。
ジェフ

回答:


8

SQLiteが豊富なインスタンスはたくさんあります。ユーザー、部門、または会社がそれを超えることはめったにありません(アプリケーションが正常に動作している場合、誰もプログラマーを呼び出さないため、それについてはあまり耳にしません。)MS Accessファイル(Windows)またはSQL Server Compact Edition(インストールが必要です)。ファイルのセキュリティについて心配する必要はないので、ローカルアプリケーションには十分です。

ローカルネットワーク上のマルチユーザーシーンリオでは、ファイルはすべてのユーザーによるアクセスが必要な共有フォルダーに保存されます-呼び出しセキュリティ。単純なメンテナンスや、バックアップや列の追加などのテーブル構造の変更により、他のユーザーがアクセスできなくなります。昨夜、誰かがアプリケーションを終了するのを忘れたため、バックアップは機能しませんでした。昼間にバックアップを取りたい場合はどうなりますか?誰もが、データベースの技術的な制限のために、日中はバックアップを必要としないと考えています。ある時点で、サーバーにSQL Server Express /その他の同等物をインストールすると、初期セットアップとセキュリティの設定が必要になり、事前にさらに複雑になりますが、メンテナンスはほとんど必要ありません。

スケーラビリティ/オーバーエンジニアリングには常に懸念があります。ユーザーの数やデータの量が依然として管理可能であっても、誰かがイントラネットや他のWebサイト/ブラウザインターフェイスでライブデータを利用するという考えを常に持っています。ファイルデータベースには問題があります。VPN経由でデータファイルにアクセスしたい人(アプリはラップトップにインストールされている)を1人必要とするだけで、「スケーリング」の問題が発生します。アプリを作成して、接続していないユーザーが戻ってきたときに同期できるようにすることができます。たまに不在のユーザーにとっては価値がないようです。


SQL Server Compact Editionでも同じ引数を使用できますが、MS Accessデータベースでは使用できません。Accessデータベースは実際のデータベースのように扱われますが、共有ファイルのように機能します。それらは脆弱なソリューションです。SQL Server Compactは実際には、Accessフロントエンドで引き続き機能する、より優れた、高速で、信頼性の高い代替手段です。技術的には共有ファイルソリューションであるにもかかわらず、SQLiteはAccessデータベースよりもはるかに耐久性があると思います。
ロバートハーヴェイ

@RobertHarvey-私たちは、MS Accessが10年にわたって十分に優れた(つまりExcelよりも優れた)ソリューションであるというビジネス上の要求があります。大規模な取引が行われる場合、何かを実行する必要があります。Accessスキルのあるパワーユーザーは、検索と活用がはるかに簡単です。機能は特定の日付までに存在する必要がありますが、スケーラビリティ、パフォーマンス、データの増加、セキュリティが要因になったことはありませんでした。Accessのアップグレード。これは別の話です。
ジェフ

誤解しないでください。アクセスは素晴らしいと思います。ただし、SQL Server Compactは、ユーザーがデータを共有する新しいAccessアプリケーションの最小バックエンド要件です。
ロバートハーヴェイ

@RobertHarvey-調べなければなりません。ありがとう
-JeffO

12

「内部」データベースが必要なときに使うのは素晴らしいと思います。つまり、アプリケーション/コードがやり取りするデータベースですが、アプリケーションが存在する主な理由に直接関係するものではありません。巨大なインメモリマッピングまたはキャッシュマネージャを使用する代わりに、たとえばそのようなデータベースを使用することもできます。これには非常に具体的な例があります。最近、データベースに接続し、作業を実行し、データを読み取り、最後にすべてを消去する必要があるJUnit / DBunitテストケースで使用しました。データベース作成するために空のファイルを作成する必要があるだけなので、それはかなり簡単でした。

私が見る別の使用法:ユーザーが1人だけの場合。はい、それは可能です、例えば「Firefox」または「Opera」を考えてください:-)

また、SQLite Webサイトで、彼らはそれについて非常に正直であり、ITを使用ない場合の理由を示しています(「別のRDBMSがより適切に機能する状況」を参照)。

ps:Sql Server Expressのコメントに関連します。はい、「インストール」する必要があります。また、個人的に更新するのに苦労しました(2008 R2をインストールするには、以前のバージョンに関連するいくつかのレジストリキーを手動で削除する必要がありました)。ただし、Microsoftが開発したデータベースとSQLiteを比較する場合は、インストールする必要のないSql Server Compact Editionを確認してください(「プライベートファイルベースの展開」を参照)。


私はCEを見ましたが、どういうわけかSQLiteの方が優れている/速い/簡単だと思われます。確かにわからない、私は確信するのに十分なCEを使用/テストしなかった。

5

たとえば、15人のユーザーがいるERPアプリケーションを考えてみましょう。なぜSQLiteを使用できないのですか?

非常に少数のアプリケーションが、その少数のユーザーを永久に所有しています。そして、より多くのユーザー、およびより複雑なデータ操作が見られる場合、SQLiteの使用は、単純な「一度に1つの書き込みトランザクション」ロックモデルのため、パフォーマンス上の理由から完全に問題外です。

100人のユーザーがいて、それぞれ60秒かけてフォームに入力してから送信するとします。したがって、1秒あたり約1.6トランザクションを処理する必要があります。データモデルは複雑で、フォームの保存には多くの大きなテーブルの読み取りと書き込みが含まれ、おそらく異なるシステムとの通信も含まれるため、各「送信フォーム」は2秒かかるトランザクションになります。ただし、SQLiteはトランザクションを同時に処理できないため、scondあたり0.5トランザクションしか処理できません。おっとっと。

「インストールするのが面倒な場合があります」は、インフラストラクチャの重要な部分に対して決定する正当な理由ではありません。その上、選択できる他のDBエンジンがあり、そのうち少なくとも2つ(MySQLとPostgres)は無料であり、SQLiteの同時実行制限はありません。MS-SQLよりも簡単にインストールできます。


私は理解し、同意します。しかし、私の職業では、私たちの製品(標準およびカスタム、主にERP関連)を10人以上使用する顧客は本当にいません。平均で5〜6人のユーザーです。質問を言い換えます。

4
@Marcus V:質問は次のとおりです。顧客が大きく成長し、作成したアプリの使用が信じられないほど遅くなった場合、DBMSはその数のユーザーを処理できないため、「なぜより優れたDBMSを使用しなかったのか」、「インストールが難しい」という答えはどのように受け取られると思いますか?私の反応を教えてください:「これはアマチュアだと思います。私のソフトウェアを書くために他の誰かを見つける必要があります」。
マイケルボルグワード

あなたが正しい。あなたがそのように言ったとは思いませんが、私はアマチュアではないことを保証できます。状況に応じて、「実際の」DBMSシステムを使用することは間違いありません。当社の製品は多くのユーザーにライセンスされています。ユーザー数が比較的少ない(<10-15)ことを知っている場合にのみ、SQLiteを使用して開発します。顧客が制限を超えた場合、顧客ベースではすぐには発生しませんが、他のデータベースに比較的迅速/簡単に変換できます。それはロケット科学ではありません;)。あなたの発言に基づいて、私は質問をより明確にするために言い換えました。

アプリケーションの成長について反論したユーザーは、おそらくユーザーの制限について知らされていましたが、より安価なルートを選択しました。初期セットアップではすべて問題ありませんが、ファイルをコピーしただけで、新しいサーバーにインストールするために別の料金を請求しなければならないとき、彼らはどれほど幸せでしょうか?
ジェフ

1
@ジェフO:あなたは私の意図を誤解したと思います。私はしていない、それは自由、安価かつ/またはインストールするのは簡単ですので、SQLiteのを選びます。私はそれが小さくて、速くて、リソースに優しいので、それを選ぶでしょう。だから、それは主に実用的/技術的な理由のためです。多くのお客様はハードウェアにあまりお金をかけないので、私はしばしばすべてのサーバー(Exchange、SQLなど)を備えた唯一のサーバーに遭遇します。高いシステム要件を持たない製品を提供できれば、顧客は満足するでしょう。SQLiteは重みを追加しませんが、MSSQLは追加します。

4

SQLLiteはアプリケーション開発に優れていると思います。最大の強みは、クライアントにインストールする必要がないことです。

ただし、SQL Server Expressも過小評価しないでください。通常の優れたツールを使用する機能とともに、データベースサイズの制限(これを超えることは困難です)のみを備えた通常のsqlサーバーのほとんどの機能を備えた無料の優れたデータベースですSQLサーバー。

最大の欠点は、インストールする必要があることです。ただし、その部分については少し確信がありませんが、今はそれを回避する方法かもしれません


2
あなたが正しい。MS-SQL Expressは高品質の製品です。私はそれが少し肥大化しており、リソースを使いすぎていることに気付いただけです。最近のPC /サーバーでは問題ありません。私は、まだ強力なハードウェアがそれを避けることができるならば、私がリソースを無視する/浪費することを意味しないとまだ考えている昔ながらの人です。少ないほうが良い...;)。

2
DBエンジンを備えたデータベースは、ディスクからの読み取り/書き込みではなく、メモリをキャッシュすることでアクセスを最適化できます。しかし、SQL LiteのようなインプロセスDBのパフォーマンスについては
わかりません-sarat

1
@sarat:Afaik SQLiteはメモリキャッシュを集中的に使用します。

2

1時間ごとに数GBのデータを処理する場合、SQLiteを深刻なデータベースとは見なしません。非常に遅くなり、アプリケーション全体のパフォーマンスが低下します。申し訳ありませんが、SQLiteに対するあなたの魅力に同意しません:-)


1
あなたの意見を尊重します。私はただの実用的な男です。ツールを選択するとき、私はそれを選択します。なぜなら、それが最も現実的で実用的な決定だと思うからです。私はSQLiteに魅了されていませんが、このように小さく、効率的で高速なパッケージに多くのものを入れたことに感心します。私の質問で述べたように、MS-SQLが特定の仕事に適したツールであれば、それを選択するだけです。しかし、私が説明したように、多くの場合、SQLiteはうまく合うと本当に信じています。

データの使用量が多いのは大きなことです。
ジェフ

@ジェフO:そう。ユーザーの数が比較的少なく(10〜15未満)、データの総量が多くない場合にのみ、SQLiteを選択します。私たちの経験では、データベースの合計サイズは多くの場合300〜400MBで、1GBを超えることはほとんどありません。

1

データベースの問題は、データベースがますます多くのデータを蓄積する傾向があることです。軽量DBを選択すると、ツールが適切にスケーリングされないというリスクが生じます。

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