Sayfalamayı etkili bir şekilde nasıl uygulayabilirim?


9

Ben büyük bir sonuç kümesine neden olabilir bir veritabanı sorgusu var. Verileri görüntüleyen istemci verileri ağ üzerinden alır, bu nedenle fikir, veritabanından yalnızca ilk 50 sonucu alarak ve istemciye göndererek aktarılan veri miktarını en aza indirmekti. Sonra sonraki 50 sonuç vb almak için ikinci sayfaya atlamak için bir olasılık sağlayacaktır. (Örneğin, google'ın sunduğu şeylere benzer bir şey)

Soru, disk belleği uygulamanın etkili bir yoludur. Mssql önbelleği olabildiğince kullandığından ve her disk belleği değiştirdiğinizde bir kez daha aynı yürütülmediğinden emin olmak istiyorum.

Veritabanını aynı anda sorgulayan daha fazla istemci var. İkinci sql motoru: MS SQL 2005

Fikirlerim şunlardı:

  • Yürütme planı paylaşımını sağlamak için hazırlanmış sql istatistiklerini kullanın
  • yalnızca gerekli satırları almak için ROW_COUNT değişkeni kullanın

Ama bu gerçekten en etkili yol mu? Yoksa sonuç kümesinin tamamını almanın ve verileri istemciye gönderen kodda disk belleği uygulamanın daha iyi olacağını mı düşünüyorsunuz?

İpuçlarınız için teşekkürler!

Saygılarımızla, Tomas

Yanıtlar:


7

Sorgu her seferinde yürütülür. SQL Server sonuçları önbelleğe almaz.

SQL Server 2011'e kadar uygun sayfalama uygulanmayacak, ancak o zamana kadar (tanımladığınız gibi) seçenekleriniz:

  • ROW_NUMBER () ve istek üzerine sorgular
  • istemci önbellekleme

Hazırlanan bir SQL ifadesi de her seferinde yürütülecektir.

Şişman bir müşteriniz varsa, önbellekleme istemci için yereldir. Milyonlarca lekeniz olmadığı sürece bu çoğunlukla sorun yaratmaz.

Web istemcimizde tüm sonuçları oluşturuyoruz, ancak yalnızca ilk 100'ü gösteriyoruz ve 101+ satırlı gizli bir DIV'yi genişletmekten daha fazla "Tümünü göster" düğmesine sahibiz. Web sunucusunda önbellek kullanmıyoruz ve disk belleği sunmuyoruz.


Teşekkürler. Kullanıcı bazı sıralama ölçütlerini değiştirirse daha iyi yaklaşım nedir? Sorguyu yeni ölçütlerle bir kez daha yürütmeli miyim veya sonuçları istemcide sıralamalı mıyım?
Tomas Walek

1
Ben müşteri sıralamak istiyorum. Veriler zaten orada. Evet, bir veritabanı sıralamada iyidir ancak veriler aynı ve mevcutsa neden başka bir arama yapmalısınız? Tarayıcıda sıralamayı etkinleştirmek için bir jQuery eklentisi kullanıyoruz :-)
gbn

4

Ortamınıza bağlıdır. Her iki yöntemi kullanarak bir test yapardım ve hangisinin sizin için en uygun olduğunu görüyorum. Şahsen ben sunucuda sayfa. Tel üzerinden daha az veri ve istemcinin RAM'inde daha az veri, daha iyi. İstemci makine özelliklerini kontrol edebiliyorsanız, tüm trafik doymamış bir LAN üzerinden gerçekleşir ve istemciler her zaman birden çok sayfadan hızlı bir şekilde sayfalar geçerse, istemcide sayfa oluşturmak isteyebilirsiniz.


Teşekkürler. Aslında her ikisine de ihtiyacım var: sunucu ve istemci arasındaki iletişim WCF'de uygulanmaktadır, bu nedenle bir mesaj için maksimum boyut vardır ve sonuçta elde edilen küme bu boyutu aşarsa, tüm verileri istemciye aktarmak için daha fazla mesaj göndermeliyim. Müşteriler ayrıca hızlı bir şekilde birden fazla sayfadan
geçmeyi severler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.