Delphiでデスクトップアプリを作成しており、組み込みデータベースを使用する予定です。 DISQLite3ライブラリでSQlite3を使用してプロジェクトを開始しました。動作しますが、ドキュメントは少し軽いようです。私は最近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の選択です。つまり、他のすべてのユーザーは言うまでもなく、大きなユーザーベースがあります。
私はいくつかのプロジェクトで [〜#〜] dbisam [〜#〜] を使用しました。外部DLLを必要とせずに完全に埋め込まれています。あなたがリストした他のものとは異なり、それは商業的です。ただし、多くの優れた機能があり、十分に文書化およびサポートされています。 後継者 には、まだ試していません。
見てみましょう、簡単な比較:
SQLite:
Firebird埋め込み:
MySQL埋め込み:
組み込みデータベースにも長所と短所があります。これらの長所と短所を、決定するために行っていることと比較検討する必要があります。
コードを変更することなく、組み込みデータベースを備えたシングルユーザーDelphiアプリを、ハイエンド機能(ストアドプロシージャ、トリガー、ビューなど)を犠牲にすることなく、マルチユーザーサーバーベースのデプロイメントに移行できるため、Firebirdを組み込みます。等。)。そして、それは真の無料データベースであり、その過程であなたのコードを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がおそらく最良の選択です(そして価格は適切です)。反対に、多数の複数ユーザーのサポートが必要な場合は、Embeddedバージョンの代わりに通常のFirebirdを使用することをお勧めします(サーバーは簡単にインストールできるため、ここではそれほど問題は発生しません)。
中間に何かが必要な場合は、中程度のマルチユーザーアプリケーションの場合、フラットデータベースのいずれかが適しています。私は ComponentAce's Absolute Database DBISAM、NexusDB、VistaDBよりも自分のニーズに適した選択であることを発見しました。
それは比較的小さなフットプリント(DLLなし)を残し、それは単一ファイルdb(私にとって必須)であり、Unicode、BLOB圧縮、暗号化をサポートし、フラットなデータベースには技術的な制限が印象的です。さらに、必要なときにサポートが何度か良かった。
短所については、ネストされたトランザクションをサポートしていないことに気づきましたが、それ以外は問題ありませんでした。
サイズに関しては、SQLiteに勝るものはありません。
ドキュメントがないことについて言及するときは、DISQLite3のドキュメントだと思います。 SQLite docs は完全です
NexusDBをご覧ください。過去に非常にうまく使用したことがあります。
この組み込みデータベースの比較を見てください: http://sql-db.cz.cc/ 、それは役に立ちます。上記の製品のほとんどは、Advantage、DBISAM、Firebird、MS SQL Serverなど、Accurcer、Apollo、ElevateDB、NexusDB、TurboDBで提供されています。
NexusDBは、組み込みから完全なクライアント/サーバー/リモートまでの全範囲を提供します。 SQL2003にも準拠していると思います。私はいくつかのプロジェクトでそれを使用していますが、これまでのところ非常に満足しています。このような広範囲の「スケール」で機能できるという事実は大きなプラスです(スケールアップされたアプリ用に別のDBを学ぶ必要がない、等)。
(埋め込まれた)firebirdの問題は、データベースをネットワークドライブに置くことができないことです。また、読み取り専用ドライブ(CD/DVD)にデータベースを配置することは困難です。
これらの制限に関するいくつかのハックについては、Delphi Wikiを参照してください。 http://delphi.wikia.com/wiki/Firebird_tipps
SQL Server ExpressとADOコンポーネントを使用しています。問題なく動作します。SQLServer Expressのインストールをコマンドラインで実行すると、ユーザーから複雑さを隠すことができます。データベースを配布することもできます。ファイル名でロードします。何百万ものSQLサーバーユーザーがいるため、問題の解決策はインターチューブで簡単に見つかります:-)
私はComponent AceのAbsolute DBが好きです。商用製品($)ですが、堅牢で使いやすく、設置面積が小さく、十分に文書化されています。巨大なマルチユーザーアプリケーションを探している場合、これは適切な方法ではありませんが、マルチユーザーのニーズが軽い(または存在しない)場合、これは確かなオプションです。
私はMS Accessが比較的がらくたのデータベースであることを知っています(そして、ここで炎上されると予想されます)が、小さなデータだけが必要な場合は、とにかくms officeが使用されている場合に利点があります。私にとっては、科学的コードの一般的なアプローチであるcsvファイルよりも柔軟にプログラムデータを保存する方法でした。
Ado&odbcドライバーを使用してms officeをインストールしなくても、delphiコードからアクセスデータベースを作成できます(最初の.accdbファイルを、そこからコピーするためのテーブルなしで作成する必要がある場合があります。この詳細を思い出せません。ライセンス状況は不明です)これを行う。
.accdb拡張子は他のものに変更できます。また、ファイルパスワードで保護されており(限られた範囲で)、必要に応じてユーザーのアクセスがすぐにわかりません。私は数人の商用開発者がこの方法を行って自分でコピーしたことを知っています。 sqliteよりも設定が簡単であることがわかりましたが、おそらく過去にado&accessを使用したことがあるからでしょう。
Delphiアプリケーション用の高速データベースパッケージを見つけるために、ウェブ検索を行いました。外部DLLやライブラリを必要とせずに、実行可能ファイルに完全に含まれるようにしたいと思いました。私はもともとエイドエイムによってAccuracerを見つけました。彼らは データベースの速さ、そして比較さえも行った 他の同様のパッケージを使って彼らの要点を「証明」した。
彼らの主張を信じたかったのですが、他のパッケージのタイミングを見つけるために、もう少しウェブを検索すると思いました。私は Delphiディスカッションフォーラムの投稿 を見つけて非常に驚きました。ここで、使用するデータベースを尋ねられ、14の異なる提案がありました。レスポンダーの1人が独自のタイミング比較を行っており、Accurerが(便利なことに)独自の比較ページから除外していた他のいくつかと比較して非常に遅いことがわかりました。
この投稿に加えて、私による追加のフォローアップWeb調査により、 DISQLite - オープンソースSQLiteプログラム に基づく製品に傾倒しましたが、Delphiで非常に機能するように拡張されていますオーバーヘッドが非常に小さく、コマンドベースの呼び出しが迅速に行われます。現在開発中ですが、D2009で動作するようですが、開発中です。
補足:11月17日にリリースされたDISQLite3バージョン2.0.0は、D2009をサポートしています。
私はScimoreDBを使用しました。彼らはそれにロイヤリティフリーを与えるので、それはその癖を持っています、そしてそれはデータタイプといくつかのインストール問題でその癖を持っています。これはC#プロジェクトにありました。
kbMmemTableは良い候補です。メモリ、高速、マルチスレッドで実行されます。以前は無料でした。
Firebird組み込みも私たちの#1の選択肢です。そして、スイートnified Interbase v2.と一緒に。優れた安定したソリューション!
私は10日間20秒ごとに5つのフィールドデータを記録する必要があるデータベースを持っています。3つのフィールドは整数、1つのフィールドは倍(時間)、1つのフィールドはstring [5]です。
私のコンポーネントのため、私はまだDelphi6 srv2を使用しています。新しいDelphiバージョンは、コンポーネントライブラリで再構築するために何千ドルものお金を費やさなければならないコンポーネントではひどいものです。そのため、delphi 6は、delphiのバージョンで多くの問題が発生することのない実際の商用アプリケーションに最適です。 USBやコンポートの読み取り値など、多くの点で、以前のバージョンが市場に出回らないうちに、新しいものがリリースされます。
テスト用のテーブルに43200レコードを追加するコードをDelphi6でセットアップしました。これは、テーブルに43200レコードがあるときにアプリケーションにテーブルをデプロイするためです。 DBChartにすべてのデータを表示します。
テスト結果は、データベースの下にあり、43200レコードの挿入コマンドによってテーブルに入力
Dbisam = 34秒、
ElevateDb = 11秒、
AbsoluteDB = 45秒、
SQLlite = 32分、
Firebird = 12分、
MSSQL12 localDB = 28分、
簡単な表= 8分、
BDE =ブロック、
私はOracle、blackfish、sysbase、nexsusDbなどをテストしていませんが、非常に遅くなるようです。私はDBChartに接続していて、elevateDbとabsoluteDBだけが7〜10秒などの例外的な時間内に43200レコードをDBchartにロードしました。他のすべては分を取った。したがって、遅いデータベースでは、実際の仕事で成功するために常にコーディングトリックが必要です。
残念ながらサーバーベースのデータベースは常に遅くなるlocateコマンドでそれらの検索速度もテストしました。
MSSQLとSQLLite3は、デルファイで管理するのが非常に難しく、非常に疲れました。
これらは私のテスト結果です
最後に、AbsoluteDB、Dbisam、Elevateを使用することにしました。残りはPCから捨てました。
Elevateソフトウェアは、実行時に管理するために追加のコードを必要とするrecno関数をサポートしていません。これにより、データベースが遅くなります。その他のバグは、Elevateソフトウェアがautoincフィールドにあることです。リセットする方法はありません。したがって、最速のデータベースであっても、Elevatソフトウェアを選択していません。彼らは多くの優れた機能を言っていますが、実際にはどれだけの機能を使用しています。彼らはサポートされていない最も重要な機能をそのまま残しましたが、多くの不要な機能を修正しました。そして、8年以来何の利点もないようです。
自分の目で見たい場合は、試してみてください。
現在2つの絶対DBまたはDBisam4の間で考えています
私はさまざまな場面でDBISAMとkbMemTableを使用しています。
DBISAMについて私が気に入っているのは、DBISAMには優れた機能があり、通常は非常に信頼できるということです。大規模なデータベース、フルテキスト検索、読み取り専用モード、CGI、その他の多くの状況で使用しました。
ただし、kbMemTableまたはSQLiteベースのコンポーネントと比べるとかなり大きいです。また、データベース(またはテーブル)ごとに1つのファイルを作成することはできません。状況によっては、これが大きな欠点です。
kbMemTableは小さいため、少量のデータに最適です。それはメモリ内で実行されるため、もちろん少量のデータでなければなりません。
私がいくつかのデスクトップアプリで取ったもう1つのオプションは、TWriter/TReaderを使用してオブジェクト階層との間でデータを直接ダンプすることです。これは群を抜いて最小のオプションであり、データベースを使用する場合に比べて非常に高速です。データファイルも小さいです。
ただし、すべての種類の欠点があります。フィールドを追加または変更したい場合は、バージョン管理をコーディングする必要があります。ただし、メモリ内でない限り、さらに複雑で、マルチユーザーサポートはありません。
埋め込みが絶対に必要な場合は、DBISAMを確認してください。