Sayfalandırmaya sahip olmak sunucu yükünü azaltır mı? (Teori)


11

Sayfalandırmanın ardındaki nedenin ne olduğunu merak ediyordum. Teknik olarak sayfa başına döndürülen satır miktarını sınırlayacağımız için sunucular üzerindeki yükü azalttığı için mi kullanılıyor?

Ben sayfalandırma olmadan bir şey yapmak istedim ama bu yeni olduğumu göz önüne alındığında (ben bir amatörüm) onun teknik olup olmadığını merak etmeye başladı.


Gerçekten, bu sitede "Sorular" ı tıkladığınızda umursamadığınız binlerce soruyu tarayıcınızın indirmesini ve oluşturmasını beklemek istiyor musunuz?
Jeremy

3
sayfalama insanlar için DB'lerden daha fazladır.
Malfist

Yanıtlar:


10

Sayfalandırmanın olmasının birkaç nedeni vardır, sunucu yükünü azaltmak sadece bir tanesidir. Ancak, Stephen Orr geçerli bir noktaya işaret ediyor - yine de önce veri miktarını bulmanız gerekiyor. Sen emin olmak zorunda olduğu sorgu hızlı ve haksız yere sunucu yüklemez.

Diğer nedenler:

  • Tek seferde istemciye döndürülen veri miktarını azaltmak. Çok fazla veriniz varsa, bu biraz zaman alabilir ve çok fazla bellek alabilir.
  • Kullanıcı genellikle tüm verilerle ilgilenmez , sadece en son verilerle (örneğin) ilgilenir . Yalnızca birkaç sayfa veri döndürerek, kullanıcının hiç bir zaman göremeyeceği veriler elde edemezsiniz.

Her iki durumda da kullanıcıyı bekletmek istemezsiniz - ya görüntüleyemeyecekleri veriler için ya da bir kısmını işlemek için bir veri alabilecekleri tüm veriler için.


2
+1 Benzer bir şey yazıyordum, ama çok hızlıydın. Sadece sayfalandırma içeriğinin de (ab) daha fazla eklenti göstermenin bir yolu olarak kullanıldığını eklememe izin verin.
yannis

Ayrıca, geçerli sayfaya sığacak kadar fazla veri olduğunu bilerek, kaç sayfa olduğunu bulmak zorunda kalmadan sayfalar oluşturabilirsiniz.
Carlo Kuip

3

Uygulamaya bağlı olarak değişir.

Bir sayfanın oluşturulmasını hızlandıracaktır, ancak mutlaka sunucudaki yükü azaltmayacaktır. Çoğu naif sayfalama algoritması, kaç sayfa olması gerektiğine karar vermek için önce bir sorgu gerçekleştirmeli, sonra "sayfalanmış" sonuç kümesini almak için tekrar sorgulamalıdır.


En saf sayfalama algoritmalarının kaç sayfa olması gerektiğine karar vermek için önce bir sorgu gerçekleştirmesi gerekir : Ancak sayım sorgusunun db'sindeki birikmiş stres ve sayfalandırılmış sonuç sorgusu hemen hemen her zaman ortak bir senaryoda her şeyi sorgusu almaktan çok daha azdır (güzel yapılandırılmış ilişkisel bir veritabanı ile)
yannis

@YannisRizos, kesinlikle. Ben inanılmaz derecede kötü yapılandırılmış ilişkisel veritabanı (bunun birçoğu sonuç almak için 7 veya 8 farklı tabloları katılın) ile, bunun karanlık tarafını gördüm.
Steve Hill

@YannisRizos: "db üzerindeki stres" i tanımlayın. Hâlâ hat boyunca iki sorgu itiyorsunuz. Sorguda sayfalama mı yapıyorsunuz (bir rowcount süper seçimi) veya sonuçları başka bir katmanda önbelleğe alıyor musunuz? Çok fazla db stresi olduğunu söylemek için çok fazla değişken var. İşlemsel anlamda düzgün bir şekilde yapıldığını (sayfalarda kirli bir okuma / tutarsız saymaya izin veriyor musunuz?) Db "stresini" / yükünü artırdığını ancak programlamayı basitleştirdiğini iddia ediyorum.
Jé Queue

@Xepoch Çok fazla stres söylemedim, sadece herhangi bir sayı artı sınırlı bir seçim <tam seçim. Ve bu sadece iyi yapılandırılmış ilişkisel dbs ile ilgili yaygın senaryolar içindir.
yannis

1

Sayfalandırmadan elde ettiğiniz en yüksek değer, uygulamanızın hızını şu yollarla arttırmaktır:

1 - İstemci ve sunucu arasında iletilen verileri sınırlama. Kullanıcı 10 tanesini arıyorsa 1000000 müşteriyi okumanın bir anlamı yoktur.

2- Yalnızca kullanıcının görünümüne sığabilecek satırları alarak sorgu performansını önemli ölçüde hızlandırmak. Kullanıcı ilk 10 müşteriye bakacaksa 1000000 müşteriyi okumanın anlamı yoktur.

3 - Sayfalandırma, daha yeni veriler sağlayarak yardımcı olur. Uygulamanız birçok veri satırı gösteriyorsa ve uygulama alan adınız görüntülenen tablodaki veri satırlarında çok fazla güncelleme gerektiriyorsa, sayfa listesinin 20. sayfasına gittiğinizde, bazı satırlardaki verilerin değişti. Bir otelde hisse senedi fiyatlarını veya mevcut odaları okuyan bir uygulamayı düşünün. Eski verileri almak ve istemciye yerleştirmek işe yaramaz.

Sayfalandırma, filtreleme ve son kullanıcının belirli senaryodan (bu ihtiyacı karşılamak için iyi bir tasarıma yol açması beklenen) nasıl ihtiyaç duyduğuna ilişkin anlayışınızla birlikte, birkaç kullanıcı veritabanına vurduğunda uygulamayı büyük ölçüde artıracak bir stratejidir. eşzamanlı.

Sayfalandırma her zaman program için önemsiz değildir. Bazı durumlarda basittir, ancak SQL sorgusunun tam tablo taraması yapmadan yürütülmesi bazen yazmak çok karmaşıktır. Bu elbette dizinlerinize, filtre durumunuza ve Where ifadenize bağlıdır.


-4

Sayfalandırma, bence, tüm erken optimizasyonların anasıdır. Sitenizi sayfalandırma olmadan yazmak kesinlikle iyidir.

Sürümden sonra, bir çağrıda çok fazla veri yüklediğinizi veya kullanıcılarınızın istemedikleri verileri yüklemekle meşgul olduğu için istedikleri bilgileri beklemek zorunda olduğunu fark ederseniz, devam edin ve bir Ajax çözümü yazın yalnızca sayfayı aşağı kaydırdıklarında sayfayı yükler (bkz. Twitter, Tumblr, Google görsel arama).

Düzenleme: Yukarıdaki ikinci paragraf ortak bir yanıt olacağını varsayarak yazılmıştır "ama bir noktada sayfalandırma yapacağınızı biliyorsanız, atmak için bir şey geliştirmek için zaman kaybetmek yerine, erken de yapabilirsiniz uzakta."

Tüm erken optimizasyonların annesi olmanın yanı sıra, sayfalandırmanın bir UX kabusu olduğunu ve tüm sayfanın üstünde fazladan geliştirme gerektirmeyecek daha iyi çözümler olduğunu düşünüyorum .

Downvotes sayısına rağmen, bu cevabı burada bırakıyorum çünkü en iyi yazım olmasa da, duyguların yanındayım.


5
Bu ifadeye kesinlikle katılmıyorum, sayfalama DB'yi optimize etmek için değil, insanlara yönetilebilir parçalar halinde veri sağlamakla ilgili. Hepsi bir sayfada olsaydı Harry Potter'ı okuyabilir misin? Vergi Kodu tek bir sayfada olsaydı vergi beyan edebilir misiniz?
Malfist

@Malfist: Bunları tek bir sayfada ele alamamanın tek nedeni, sayfanın kendisinin çok büyük olması. Bu, web sayfalarında bir sorun değildir. Bu nedenle alıntı yaptığım siteler sayfalandırma için daha iyi çözümler bulurken, Lolcats'ın şu anda yaklaşık 2000 sayfası var ve bu sayfalar herhangi bir mantıklı şekilde sayfalandırılması imkansız. Ama, bu senin aldatmacan, istediğin gibi kullan.
pdr

1
@Malfist: Ayrıca, bu parçalar değişmezse işleri yönetilebilir parçalara bölmek yeterince adil. Eğer 1-4. Sayfaları okursam, bir dahaki sefere geri dönüp 5. sayfayı okumak istiyorum. Daha sonra 5. sayfaya geri döndüğümde, aslında son geldiğimden 3. sayfanın yarısını ve 4. sayfanın yarısını gösteriyor çünkü listede tamamen yeni bir 1.5 sayfa var.
pdr

2
-1 Ben de buna katılmıyorum. Nedenini açıklamaya nereden başlayacağımdan bile emin değilim.
Craige

@Craige: Tamam, tamam o zaman. Kesinlikle bununla ilgili bir argüman ortaya koyamıyorum.
pdr
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.