全て。私は DBExpress と C++ Builder(Delphi) 2007 と MySQL、firebird を使用しています... データベース (Web サーバーにある) を使用する win 32 アプリケーションを作成したいと思います。DBExpress (TSQLConnection for MySQL) を使用してみましたが、とても遅いです...そして、ローカルデータベースを試してから、Indyを使用してアップロード/ダウンロードを試みました..しかし、それは良くなく、少し複雑でした. では、win 32 アプリケーションに Web ベースのデータベースを使用する基本的な方法は何ですか? 経験はありますか?または任意のドキュメントまたは任意のコメントは非常に優雅になります..どうもありがとう..
4 に答える
インターネット リンク (VPN を使用するかどうかに関係なく) を介したデータベース接続は低速です。その通りです。私見の主な理由は、すべてのリクエストの「ping」遅延です。これは、ローカル ネットワークでは非常に低く、インターネット経由でははるかに高くなります。したがって、直接接続はお勧めできません。
Delphi の最新バージョンには、リモート アクセス(Web アクセスを含む)を行うための新しい「標準」(またはエンバカデロ推奨)の方法であるDataSnapコンポーネントがあります。最初は少し制限がありましたが、最新バージョンは完全に使用可能であり、Delphi を使用したクロスプラットフォーム アプリケーション構築の主要製品になりつつあります。ただし、Delphi 2007 では使用できません。
非常に成熟した製品の 1 つ (Delphi 2007 で利用可能) は、Data Abstractです。
Data Abstract は、さまざまなプラットフォーム向けの多層データ アクセス モデルを使用して、データベース駆動型アプリケーションを構築するためのフレームワークです。
もちろん、これは無料ではありませんが、実績のある効率的なソリューションです。
また、任意の DBに接続でき、ORM 部分を使用しなくても、Delphi 2007 で RESTful SOA アーキテクチャを実装できるClient-Server ORMもご覧ください。つまり、既存の DBExpress を使用できます。ソースコードに基づいており、一部の Web インターフェイスをデータに簡単に公開できます。これはオープン ソースであり、安全な認証メカニズムを介した通信形式として JSON を使用します。多くのドキュメント(700 ページ以上の PDF) が含まれており、 SOA の世界への導入も試みています。
次の機能を提供するデータアクセスライブラリが必要です。
- スレッドセーフ。一般に、スレッドごとに専用の接続を使用する必要があります。
- 接続プール。接続の作成((1)に必要なもの)を高速にするには、接続プールが必要です。
- SQLコマンドの高速実行、結果セットのオープン、機能のフェッチ。
- トレース。いずれかのライブラリを使用すると、パフォーマンスの問題が発生する可能性があります。何が間違っているのかを確認するためのツールが必要です。そのためには、クライアントとサーバーの通信を確認して分析する必要があります。
- 結果セットのキャッシュと、異なるスレッドから同時に読み取る機能。読み取り専用テーブルがほとんどない場合があります。これらのテーブルを一度フェッチして、アプリケーションにキャッシュします。ただし、スレッドからこのデータを読み取るには、メカニズムが必要になります。InMemTableのクローンの種類。
私の答えは偏っていますが、AnyDACを検討してください。これらすべてと他の多くの機能があります。
PS:dbExpressも機能するはずです。別のライブラリではなく、パフォーマンスの問題の理由を最初に見つけてください。同じことが他のライブラリでも発生する可能性があるため...
Datasnap を見てみましょう:情報
低速リンクを介した DB アプリケーションには、高速リンクを使用する場合とは異なるアプローチが必要です。移動するデータの量と、アプリケーションが実行するラウンドトリップの回数に注意する必要があります。
通常、必要なサブセットがクライアントにキャッシュされ、変更され、データベースに適用される場合のアプローチが推奨されます (もちろん、変更をすぐに確認する必要がなく、競合の可能性が低い場合)。
アプリケーションが低速リンクの処理を考慮して設計されていない場合、ミドルウェアは役に立ちません。