Delphiアプリケーションで使用する埋め込みデータベースはどれですか?
-
03-07-2019 - |
質問
Delphiでデスクトップアプリを作成していますが、組み込みデータベースを使用する予定です。 SQlite3とDISQLite3ライブラリを使用してプロジェクトを開始しました。動作しますが、ドキュメントは少し軽いようです。最近、Firebirdを見つけました(そう、しばらくWindowsを使っていませんでした)。魅力的な機能とサポートがあるようです。
各組み込みデータベースの長所と短所は何ですか?サポートとリソースだけでなく、サイズも重要です。何を使ったのですか?
解決
FeedDemonで(DISQLite3を介して)SQLiteを数か月使用していますが、非常に高速で安定していることを強くお勧めします。 Javierが言ったように、ライブラリのドキュメントは薄いかもしれませんが、SQLite自体のドキュメントは非常に優れています。
他のヒント
Firebird 2.1 Embeddedを使用していますが、非常に満足しています。データベースサイズが実質的に無制限で(> 4 GBデータベースでテストされ、動作する)、データベースファイルがFirebirdサーバーを使用すると、データベースの管理と検査に標準ツールを使用できます。配布では、exeフォルダーにいくつかのファイルをドロップします。
複数のプログラムからの同時アクセスはサポートされていませんが、複数のスレッドからの同時アクセスはサポートされています(特定の時点で進行中の「接続」操作が1つだけであることを確認する限り)。
SQlite3を多くのプロジェクトに使用しました(ただし、C / C ++およびObjective-Cから)。データベースは非常に小さく、依存関係はまったくありません。データベースは単一のファイルです。
CoreDataおよびiPhoneで直接サポートされているため、Mac開発者に最適なdbです。したがって、大きなユーザーベースがあります(他のすべてのユーザーは言うまでもありません)。
見てみましょう、簡単な比較:
SQLite:
- データベースでの動的な型指定
- クロスプラットフォームファイル
- Windows、Linux、Macなどで実行します
- パブリックドメイン
- トランザクションをサポート
- ファイルシステムのセキュリティに依存し、独自のセキュリティは含まれません
Firebirdの埋め込み:
- データベースへの強い入力
- すべてのSQLデータ型がサポートされているわけではありません
- クロスプラットフォームファイル
- 埋め込まれたFirebirdはWindows上でのみ動作します
- 埋め込まれたFirebirdのファイルは、完全なサーバーバージョンと同じ形式です
- 埋め込まれたFirebirdのファイルは、Windows以外のサーバーにコピーして使用できます
- 修正されたMPLの下で使用可能
- トランザクション、トリガーなどをサポートしています
MySQL埋め込み:
- SQL機能のサポートはファイル形式に依存します
- (IIRC)クロスプラットフォームファイル
- ロイヤリティを支払わない限りGPL
- Windows、Linux、Macで実行
- オープンソースの群衆に信じられないほど人気
組み込みデータベースにも長所と短所があります。これらの長所と短所を、あなたが決めようとしていることと比較検討する必要があります。
組み込みのFirebirdは、コードを変更することなく、組み込みデータベースを備えたシングルユーザーDelphiアプリを、ハイエンドの機能(ストアドプロシージャ、トリガーなど)を犠牲にすることなく、マルチユーザーサーバーベースの展開に移行できるため、最も優れた選択肢です、ビューなど)。そして、これは真の無料データベースであり、プロセスでコードをGPLしません。
データベースとDelphiを使用する場合は、AnyDACを使用することを強くお勧めします-FBまたはSQLiteをシームレスにターゲットに選択できます。
私の好みは、組み込みアプリのFBです。 トム
SybaseのAdvantage Database Serverを使用していますが、私はR& Dマネージャーでもあるため、この投稿は偏っています。 :)
WIN32 VCLとVCL.NETの両方にネイティブなDelphi TTableおよびTQueryコンポーネントがあります。 SQLのサポートに加えてテーブルに直接アクセスできるため、Advantageは他の多くのDelphi製品の中でもユニークです。 Advantageは大きなテーブルをサポートし(レコード数で20億に制限されます)、無料のローカルエンジンを備えています。これは、開発PCやクライアント/サーバー機能を必要としない小規模な顧客サイトに適しています。単一の接続プロパティでクライアント/サーバーに切り替えます。他の変更はありません。
多数のクライアントがあるため、Delphi以外のデータへのアクセスも非常に簡単です(.NETデータプロバイダー、ODBC、OLE DB、PHP、Perl、JDBCなど)。
メイン製品Webサイト: http://www.advantagedatabase.com 開発者のWebサイト: http://devzone.advantagedatabase.com
それは本当に必要なものに依存します。シングルユーザーアプリケーションの場合、Firebird EmbeddedまたはSQLiteがおそらく最良の選択肢です(価格は適切です)。一方、多数の複数ユーザーのサポートが必要な場合は、おそらく埋め込みバージョンの代わりに通常のFirebirdを使用する必要があります(サーバーはインストールが簡単なので、ここではあまり問題はありません)。
中程度のマルチユーザーアプリケーションの場合、中間に何かが必要な場合は、フラットデータベースのいずれかが適しています。 DBISAM、NexusDB、VistaDBよりも、 ComponentAceのAbsolute Database が私のニーズに適していることがわかりました。
比較的小さなフットプリント(DLLなし)を残し、単一ファイルのdb(私にとって必須)であり、Unicode、BLOB圧縮、暗号化をサポートし、フラットデータベースには技術的な制限が印象的です。さらに、サポートが必要なときはほとんどありませんでした。
短所については、ネストされたトランザクションをサポートしていないことに気付きましたが、それ以外は問題ありませんでした。
サイズに関しては、SQLiteに勝るものはありません。
ドキュメントの不足について言及するとき、それはDISQLite3のドキュメントだと思います。 SQLiteドキュメントは完全に完成しています
NexusDBをご覧ください。過去に非常にうまく使用されています。
(埋め込み)firebirdの問題は、データベースがネットワークドライブに常駐できないことです。また、読み取り専用ドライブ(CD / DVD)にデータベースを置くことは困難です。
これらの制限に関するハッキングについては、Delphi Wikiを参照してください。 http://delphi.wikia.com/wiki/Firebird_tipps
NexusDBは、組み込みから完全なクライアント/サーバー/リモートまで、あらゆる範囲を提供します。 SQL2003にも準拠していると思います。私はいくつかのプロジェクトで使用していますが、これまでのところ非常に満足しています。大きなプラスです(スケールアップされたアプリのために別のデータベースを学ぶ必要はありません)。
この埋め込みデータベースの比較をご覧ください: http://sql-db.cz.cc/ 、役立つことがあります。上記の製品のほとんどは、Advantage、DBISAM、Firebird、MS SQL Server、およびその他:Accuracer、Apollo、ElevateDB、NexusDB、TurboDBで提供されています。
Component AceのAbsolute DBには不満です。商用製品($)ですが、堅牢で使いやすく、設置面積が小さく、十分に文書化されています。巨大なマルチユーザーアプリケーションを探している場合、これは進むべき方法ではありませんが、マルチユーザーのニーズが少ない(または存在しない)場合、これは確実なオプションです。
SQL Server ExpressとADOコンポーネントを使用しています。よく働く。 SQL Server Expressインストールをコマンドラインで実行して、ユーザーから複雑さを隠すことができます。ファイル名でロードするデータベースを配布することもできます。 SQLサーバーのユーザーは数百万人いるため、問題の解決策はintertubesで簡単に見つかります:-)
Delphiアプリケーション用の高速データベースパッケージを見つけるためにwebsearchを行いました。外部DLLやライブラリを必要とせずに、実行可能ファイルに完全に含まれるようにしたかったのです。私はもともとAidAimのAccuracerを見つけました。彼らは、データベースがどれほど高速で、比較を行うかを投稿しました “証明”に似た他のパッケージで彼らのポイント。
私は彼らの主張を信じたかったのですが、他のパッケージのタイミングを見つけるためにもう少しウェブを検索すると思いました。 を見つけて非常に驚いたDelphiディスカッションフォーラムへの投稿では、使用するデータベースを尋ねられ、14の異なる提案がありました。応答者の1人は、独自のタイミング比較を行っており、Accurererが他のいくつかのページと比較して非常に遅いことがわかりました。
この投稿に加えて、私による追加のWeb調査により、 DISQLite3 、オープンソースSQLiteプログラムに基づいた製品ですが、 Delphiで非常に迅速に、非常に小さなオーバーヘッドで、コマンドベースの呼び出しで動作します。現在活発に開発されており、間もなくDelphi 2009の公式バージョンがリリースされる予定ですが、明らかに現在のバージョンはD2009で動作するようです。
補足:11月17日にリリースされたDISQLite3バージョン2.0.0はD2009をサポートしています。
MSアクセスは比較的がらくたのdbであることがわかっています(そして、ここで炎上していると思われます)が、小さなデータだけが必要な場合は、ms officeを使用すると利点があります。私にとっては、csvファイルよりも柔軟性の高いプログラムデータを保存する方法であり、これは科学コードの一般的なアプローチです。
MS Officeをインストールせずに、adophi&を使用して、デルファイコードからアクセスデータベースを作成できます。 odbcドライバー(コピーするテーブルのない初期.accdbファイルが必要な場合がありますが、この詳細を思い出せません。これを行うライセンス状況がわからない。
.accdb拡張子は別のものに変更できます&ファイルのパスワードは(限られた程度まで)保護されているため、必要に応じてアクセスがすぐにはユーザーにわかりません。 いくつかの商用開発者がこの方法を実行することを知っています自分でコピーしました。 sqliteよりもセットアップが簡単であることがわかりましたが、おそらくado&過去のアクセス。
埋め込みが絶対必要な場合は、DBISAMをご覧ください。
kbMemTableは良い候補です。メモリ内で高速にマルチスレッドで実行します。以前は無料でした。
DBISAMとkbMemTableを異なる機会に使用しました。
DBISAMが気に入っているのは、優れた機能があり、通常は非常に信頼性が高いことです。大規模なデータベース、全文検索、読み取り専用モード、CGI、その他多くの状況で使用しました。
ただし、kbMemTableやSQLiteベースのコンポーネントと比較するとかなり大きいです。また、データベース(またはテーブル)ごとに単一のファイルを持つことはできません-状況によっては、それが大きな欠点です。
kbMemTableは小さく、少量のデータに最適です。メモリで実行されるため、もちろん少量のデータである必要があります。
いくつかのデスクトップアプリで取ったもう1つのオプションは、TWriter / TReaderを使用してオブジェクト階層から直接データをダンプすることです。これは群を抜く最小のオプションであり、データベースを使用する場合と比較してばかばかしいほど高速です。データファイルも小さいです。
ただし、あらゆる種類の欠点があります-フィールドを追加/変更したい場合は、バージョン管理をコーディングする必要があります。
組み込みのFirebirdも私たちの一番の選択肢です。そして、それとの Unified Interbase v2.0 スイート。優れた安定したソリューション!
ScimoreDBを使用しました。ロイヤリティが無料で提供されるため、その癖があります。また、データ型とインストールの問題があります。これはC#プロジェクトでした。
すべての方法でFirebird。すべてがうまく機能し、これまでのバージョン2.1は非常に安定しています。
FireBirdは、いつかマルチユーザーにスケールアップする機会を提供します。または、並行性が必要な場合(アプリケーションがマルチスレッド化される場合)。
SQLiteは、シングルユーザーアクセスのみが必要な場合、パフォーマンス、利便性、SQLサポート、安定性のいずれの面でも他のデータベースがそれに近づかない場合、他の追随を許しません。
Firebirdは本当にひどく、フットプリントが小さいため、埋め込みを使用できます また、多くのユーザーに合わせてスケールアップできます ユニコードはうまく機能しません Delphi 2009でdevartコンポーネントを使用しています およびdelphi 6/7のFIBプラス(2009年のバージョンとUnicodeはまだ準備ができていません)
うーん、誰もBDEを推奨していない-なぜだろうか;-)
BlackFishSQLは別の可能性ですが、まだ詳細なテストは行っていません。
10日間、20秒ごとに5つのフィールドデータを記録する必要のあるデータベースがあります。3つのフィールドは整数、1つのフィールドはdouble(time)、1つのフィールドはstring [5]です。
コンポーネントのために、Delphi6 srv2をまだ使用しています。新しいデルファイバージョンは、コンポーネントライブラリが再構築されるために数千ドルを費やさなければならないコンポーネントではひどいものです。そのため、delphi 6は、デルファイのバージョンによって多くの問題が発生することのない実際の商用アプリケーションに最適です。 USBやコンポートの読み取りなど、多くの時点で、以前のバージョンが市場に登場する前に新しいバージョンをリリースします。
43200レコードがある間にアプリケーションにテーブルをデプロイするため、テスト用のテーブルに43200レコードを追加するコードをDelphi6で設定しました。 DBChartのすべてのデータを表示します。
テスト結果は、43200レコードの挿入コマンドによってテーブルに入力されたデータベースの下です
Dbisam = 34秒、
ElevateDb = 11秒、
AbsoluteDB = 45秒、
SQLlite = 32分、
火の鳥= 12分、
MSSQL12 localDB = 28分、
簡単なテーブル= 8分、
BDE =ブロック済み、
oracle、blackfish、sysbase、nexsusDbなどはテストしていませんが、非常に遅いようです。私はDBChartに接続しましたが、elevateDbとabsoluteDBだけがDBchartに43200レコードをロードしました(7〜10秒など)。他のすべては数分かかりました。したがって、実際のジョブで成功するには、遅いデータベースでは常にコーディングトリックが必要になります。
サーバーベースのデータベースが常に遅くなるlocateコマンドを使用して、検索速度もテストしました。
MSSQLとSQLLite3をデルファイに取り込むのは非常に困難であり、非常に疲れました。
これらは私のテスト結果です
最後に、AbsoluteDB、Dbisam、およびElevateを使用することにしました。残りをPCから捨てました。
Elevateソフトウェアは、実行時に管理するために余分なコードを必要とするrecno機能をサポートしていません。これにより、データベースの速度が低下します。他のバグは、Elevateソフトウェアがautoincフィールドにあることです。リセットする方法はありません。したがって、最も高速なデータベースであっても、Elevatソフトウェアを選択していません。彼らは多くの良い機能を言っていますが、実際にそれらをいくつ使用していますか。サポートされていない最も重要な機能を残しただけで、多くの不要な機能を修正しました。そして、8年以来、何の利点もないようです。
自分の目で見たい場合は、試してみてください。
現在、絶対DBまたはDBisam4の2つを考えています
組み込みデータベースに関しては、最初の質問はマルチユーザーですか? 実際、複数の接続(読み取りと書き込み)を許可しないデータベースが必要なのは誰ですか? 上記のすべてのデータベースを(集中的に)試しましたが、実際に機能するはずのデータベースが1つだけ見つかりました。そして、それがAccuracerです。 アキュラサーとの唯一の残念は、その3人のバンドと適切なサポートの慢性的な欠如です。また、何年も実際の機能を見ていなかったので、主に開発中は静的です。彼らは古い名声で生きているようです。ユーザーの賞賛はそれを反映しています(通常10歳のコメント)。 単一のユーザーエクスペリエンスの場合は、絶対データベースをお勧めします。 主要なプレーヤーについては、MicrosoftのSQL Serverをお勧めします。 Oracleは肥大化しており、徐々に消滅しつつあります。
ps accuracerの優れている点は、組み込みデータベースが完全なサーバーのように機能することです。残りが正常に機能している間に使用中の場合、現在のレコードのみをロックします。素敵なデータベース。残念なことに、それは停滞しています。