2009-05-04 29 views
5

Soru: Delphi için kullanılabilir ve ne kadar iyi gelişmiştir Ne önbelleğe alma Çerçeveleri bunlar? Öyleyse, aynı hedefe ulaşmanın yaygın kabul gören bir yolu var mı? Delphi'nin Win32 hedefleme sürümleri için geçerlidir.Delphi için herhangi bir Önbellek Çerçevesi var mı?

Soru Detay:

  • Al önceden depolanan veriler/Nesne için Cache Kontrol

    • : Ben soruyorum çerçevenin tipi büyük ölçüde izlenmesine olanak tanıyan Web Geliştirme çerçeveler var Veri/Nesne
    • Yeni Verileri/Nesneleri Kaydetme
    • İsteğe bağlı olarak Veri/Nesne etiketleyin ve etiketleyin.
    • , bazı kriterlere (etiketler, etiket, zaman sınırları vs.) göre veri/Nesneler sona erer.

    Ben RTTI olmadan Delphi Nesneler için yansıma hizmetlerinin eksikliği muhtemelen oldukça aynı şekilde var anlamına gelir ama daha sonuç aynıdır: en azından bir kısmını elde etme benzer bir yol olduğunu anlamaya Delphi yolu?

    Alternatif Yaklaşım: Yerel bir Delphi kitaplığına alternatif olarak: Örneğin, memcached veya benzeri bir şey için iyi bir bağlama dizisi var mı?

  • cevap

    4

    , Çok basit (yanı sıra hemen hemen tüm diğer işletim sistemi, Windows ve MacOS üzerinde versiyonları vardır).

    Ben protokol en documentation okuyarak, Indy TIDTelnet kullanarak, doğrudan onunla ele, sadece set kullanılan , silmek olsun ve çıkın.

    [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 önbellek anahtar başına en fazla 1 MB saklamasına izin verir I:

    Ben komutları bu tür (I kurmak ve "ad" olsun, 14 saklanmasına bayt sayısıdır) kullanılan 'Person | 17 | name', 'Person | 17 | picture', 'Employee | 7 | Maaş | Basic' (bunlar gerçekten yaptığım şeyle alakasız isimler) gibi birleşik anahtarlar kullanmıştı ... Bazı ikili dosyaları sakladım önbellekte, 768k ikili veriye kadar kullanılmasına izin veren base64 olarak.

    memcached, anahtarları karmaşayla birkaç sunucuya dağıtılabilir ve bunlara göre çeşitli sunuculardan birini seçebilir.

    +1

    +1, bence bu iyi bir fikir. Memcached, sadece Linux için değil, Windows ve Mac OS X için de kullanılabilen, kararlı ve optimize edilmiş bir çözümdür. Protokol düzeyinde bunu yapmak çok zor olurdu, Delphi programları tarafından DLL olarak kullanılabilir istemci kütüphaneleri (libmemcached gibi) vardır. – mghie

    +1

    çok kolay, bir örnek ekledim. Ben sadece set kullan ve al, sil ve bırak. Bunu yapmak için kendi işlevim vardı. Dlls eklemek istemiyorum. –

    +0

    Mghie'ye katılıyorum - şimdiye kadarki en iyi tavsiyeye, protokole bakarak var olan bir sarıcıyı DLL olarak kullanmak için çok fazla işe yaramadı ya da kendimi hızlı bir Delphi sarıcısı oluşturmam. – jamiei

    1

    önbelleğe alma mekanizması elle haddeleme gerekmektedir.

    Splay Trees

    önbelleğe nesneleri depolamak ve aynı zamanda ne kadar eski tespit etmek için kullanışlı ve kolay bir mekanizmadır.

    1

    Bu çerçeveler önbelleğe bazı yolu DevExpress Persistent Objects

    tam gereksinimleri bağlı olarak, bu üst üzerinde olabilir RemObjects

  • Enterprise Core Objects
    • nesneleri sağlarlar. Kendi çözümünüzü uygulamaya çalışırsanız, Jedi VCL'daki çeşitli kaplara bir başlangıç ​​noktası olarak bakmanızı öneririz. Ben Linux üzerinde memcached kullandık

  • +0

    Bu çerçeveler doğru belirttiği gibi, bir olabilir zaten yukarıda birini ama aksi kullanarak bir uygulama için yararlı olabilir tepenin biraz üstünde. – jamiei

    +1

    - kbmw, ara yazılım, liste sonsuzdur. –

    1

    Kendi yapınızı oluşturmak istiyorsanız, muhtemelen 64 bit desteği olan Freepascal'da yapmak isteyebilirsiniz. İkili ağaçların yerine bir k-ary öneririm.

    1

    Tamam. Muhtemelen bu konuda aptalca hissedeceğim ama TStringList ile ilgili problem nedir? Dize kimliğine dayalı bir öğe bulmak için bir TStringList ile dinamik olarak yapılandırılmış bir dizi veri kullanıyordum. Son zamanlarda, TStringList'i bir THashedStringList'e güncelledim. Biraz daha hızlı olabilir, ama henüz gerçekten olağanüstü bir şey yok. StringList/Array düzenlemesi, şimdiye kadar başvurumda mükemmel performans sağladı.

    Sadece şu ana kadar 100 ila 150 kayıt önbelleğe aldım, ancak bunun birkaç bin kadar işe yaramasını bekliyorum. İçinde olduğum işte, bu oldukça büyük bir işlem.

    Memcached için
    +3

    Ölçeklendirilmez. (32 bit) makinenizde 2 GB'lik bir ram var. Bu birkaç milyon kayıt yapar. Bir milyon kayıtla sıralanmış bir dizi içinde, bir insert ortalama 500000 işaretçinin (2 MByte) bir blok hareketini ifade eder. Bir dizgiyi birbirine bağlamak O (uzunluk (lar)). –

    +0

    Tam ihtiyaçlara ve büyüme modeline ve koduna bağlı olarak, tstringlist'in pratik sınırları yaklaşık 40000-200000 arasında tekme atıyor. –

    +0

    Yorum yazdığınız için teşekkür ederiz. Dediğim gibi, bordro programında 150 çalışan kayıtlarını önbelleğe alıyorum. 40.000 çalışanı bulursam, alternatifleri düşünmek zorunda kalabilirim, ancak bir StringList, muhtemelen göreceğimi düşündüğüm kayıtların sayısı için büyük bir önbellek mekanizması oluşturuyor. – jrodenhi

    İlgili konular