2009-05-04 11 views
5

質問:どのようなキャッシングフレームワークがDelphiで利用でき、どの程度開発されていますか?何もない場合は、同じ目的を達成するために広く受け入れられている方法がありますか? Win32ターゲットバージョンのDelphiに適用されます。Delphi用のキャッシングフレームワークはありますか?

質問の詳細:

  • 取得以前に格納されたデータ/オブジェクトのキャッシュをチェック

    • :私は問い合わせるてるフレームワークの種類は、主にユーザーを許可するWeb開発フレームワークに存在するデータ/オブジェクト
    • 新しいデータ/オブジェクトを格納します。
    • オプションで、データ/オブジェクトにタグを付け、ラベルを付けます。
    • 期限切れデータ/オブジェクトは、いくつかの基準(ラベル、タグ、時間制限など)に基づいています。

    RTTIのないDelphiオブジェクトのリフレクションサービスがないということは、まったく同じ方法では存在しない可能性が高いことを意味しますが、少なくとも同じ結果を達成する同様の方法が、デルファイの方法?

    代替アプローチ:ネイティブのDelphiライブラリの代わりに、たとえば、memcachedなどのバインディングがありますか?

  • 答えて

    4

    私はLinux上でmemcachedを使用しています(WindowsとMacOSのバージョン、その他ほとんどのOSがあります)。これは非常に簡単です。

    私はを削除し、を取得し、プロトコルのdocumentationを読むことによって、私は唯一のを設定する使用、インディのTIDTelnetを使用して、直接それに対処し、を終了します。

    私は(14が格納されるバイト数である、私は設定して、「名前」を取得)コマンドのこの種を使用:

    [email protected]:~$ telnet 127.0.0.1 11211 
    Trying 127.0.0.1... 
    Connected to 127.0.0.1. 
    Escape character is '^]'. 
    set name 0 0 14 
    Osama Alassiry 
    STORED 
    get name 
    VALUE name 0 14 
    Osama Alassiry 
    END 
    quit 
    

    memcachedのは、私は、あなたがキャッシュキーあたり1メガバイトまで保存することができます'Person | 17 | picture'、 'Employee | 7 | Salary | Basic'のようなコンポジット・キーを使用しています(これらは私が実際に行ったことのない架空の名前です)...私はいくつかのバイナリ・ファイル最大768kのバイナリデータを使用することを可能にするbase64としてキャッシュに格納します。

    memcachedは、キーをハッシュし、ハッシュに基づいていくつかのサーバーの1つを選択することによって、複数のサーバーに分散することもできます。

    +1

    +1、これは良いアドバイスだと思います。 memcachedは安定した最適化されたソリューションです。これはLinuxだけでなくWindowsやMac OS Xでも利用できます。プロトコルレベルでそれを行うのが難しい場合、DelphiプログラムでDLLとして使用できるクライアントライブラリ(libmemcachedなど)があります。 – mghie

    +1

    それは非常に簡単です、私は例を追加しました。私はsetを使用し、get、delete、およびquitを使用しました。私はそれを行うために自分自身の機能を持っていました。私はdllを追加したくない。 –

    +0

    これまでのところmghieのアドバイスには同意していますが、プロトコルを見ても、既存のラッパーをDLLとして使用したり、素早くDelphiラッパーを作成したりすることはあまりありません。 – jamiei

    1

    キャッシング機構は手巻きが必要です。

    Splay Treesは、キャッシュされたオブジェクトを格納し、それらの古い状態を検出するための便利で直接的なメカニズムです。

    1

    これらのフレームワークは、キャッシングの一部方法はDevExpress Persistent Objects

    あなたの正確な要件に応じて、これらは、トップの上にあるかもしれないRemObjects

  • Enterprise Core Objects
    • オブジェクト を提供しています。独自のソリューションを実装しようとすると、Jedi VCLのさまざまなコンテナを出発点として検討することをお勧めします。

  • +0

    一番上のほんの少し。 – jamiei

    +1

    - kbmw、midware、リストは無限です。 –

    1

    自分でビルドしたい場合は、おそらくFreepascalで実行したいと思っています。これは、64ビットをサポートしているためです。バイナリスプレイツリーの代わりに、k-aryを提案したいと思います。

    1

    おそらくこれについて愚かな気持ちになるでしょうが、TStringListの問題は何ですか?私は文字列IDに基づいて要素を見つけるために、TStringListでかなり構造化されたデータの動的配列を使用していました。最近、TStringListをTHashedStringListに更新しました。少し速いかもしれませんが、実際にはまだ目立ったものはありません。 StringList/Array配列はこれまでのところ私のアプリケーションで優れたパフォーマンスを提供しています。

    これまでのところ、100から150のレコードしかキャッシュしていませんが、おそらく数千分の1にもなると思います。私が入っているビジネスでは、それはかなり大きな作業です。

    MemcachedのためのA DelphiのクライアントがGoogleのコード上で見つけることができます
    +3

    縮尺は変わりません。あなたはあなたの(32ビット)マシンに2GBのRAMを持っています。それは数百万の記録を作ります。 100万レコードのソートされた文字列リストでは、挿入とは、平均500000個のポインタ(2 MByte)のブロック移動を意味します。文字列をハッシュするのはO(長さ)です。 –

    +0

    正確な要件とパターンとコードの拡大に応じて、約40000〜200000のtstringlistキックの実際的な制限があります。 –

    +0

    コメントありがとうございます。私が言ったように、私は給与計算プログラムで約150の従業員記録をキャッシングしています。私が4万人の従業員を雇った場合、その代替案を検討しなければならないかもしれませんが、StringListは、私が見る可能性が高いレコード数のための素晴らしいキャッシュ機構を作ります。 – jrodenhi

    4

    :これらのフレームワークは、すでに上記のいずれかを使用して、アプリケーションに役立つかもしれないが、あなたが正しく指摘したようにそうでない場合であってもよい

    http://code.google.com/p/delphimemcache/

    関連する問題