mySQL - Ajax indivdual sorguları vs biri büyük bir sorgu

6 Cevap php

Ben kimsenin bu bir definative cevap olacaktır sanırım ama kabul tahminler appriciated olacaktır.

Ben bir web uygulaması ve benim sveyau için bir MySQL veritabanı geliştirme sürecinde am:

AJAX kullanarak tek bir satır döndüren tek bir sveyagu yapmak için daha verimli

veya

To request 100 - 700 rows when the user will likely only ever use the results of two veya three?

Really I am asking what is heavier fveya the server 2-3 requests with one result veya 1 request with 100 - 700 results?

Teşekkürler,

Markos

6 Cevap

Bunu veritabanından veri almak için ne kadar uzun süre isteyebilirsiniz. Bu çok uzun sürerse, sizin tarafınızdan belirlenecek gerekir, ama ben tahmin ediyorum 10 saniye boyunca, o zaman daha küçük istekleri içine kırmak isteyebilirsiniz, ancak 700 kadar olurdu. Eğer onu almak için ne kadar süre belirlemek olabilir, ancak her istek için en az 1 saniye sürer almak için denemek isteyebilirsiniz, ve alacak kaç isteklerini bakın.

Veritabanı sorun olmayabilir gibi profilleme, önemlidir. Tam render sonra tablo oluşturmak eğer o zaman 1000 satır ile, örneğin, bir büyük bir tablo bina varsa, bu bir süre alacaktır.

Yapabileceğiniz en iyi şey ateş, kundakçı kullanın ve zaten veritabanı bağlantısı ne kadar uzun sürdüğünü profilli var, ve o zaman görüntülemek için almak gibi görünüyor ne kadar görebilirsiniz beri, aslında veri almak için ne kadar sürdüğünü görmek için bilgilerin kez veri sunucusundan döndü.

Kundakçı Eğer, javascript profile gerçekten veritabanı optimize etmek gerekiyorsa görmenizi sağlar gibi profilleme, en iyi bahistir.

Burada da dikkate bazı şeyler vardır

ayrı sorgu birkaç seçer yapma ve sonra php komut sonuçları işleme tabii, veri olarak ağ gecikme yükü yüz istemci ve mysql sunucusu arasında ileri ve geri seyahat etti gidiyor

ama sen 10 kayıtları söylemek ve daha kayıtları getirmesi için bir olay çeşit tetiklemek için sonuç sınırı ise kullanıcı muhtemelen sadece bu yüzden onun daha iyi sonuçlar birkaç görüntülemek istiyorsunuz demek gibi başlangıç. Bunu yapmanın bir yolu, bu yüzden başka bir 10 kayıtları ve kavusacaktı 10 kayıtları sonra bir daha bağlantı var olacaktır.

Sen sadece "tek satır" yollayacak eğer yanıtı önbelleğe mümkün olduğu, daha aşamaları vardır. Veri dakika içinde değiştirmek olası değilse, sonuç da tarihine kadar geçerli belirterek, istemci tarafından önbelleğe alınabilir. Büyük veri olması, hatta size çok fazla bant genişliği kaydedebilirsiniz ne ETAG'ları kullanabilirsiniz.

Bu, dönen veri büyüklüğüne bağlıdır.

If your full result set is larger than um... lets say 100k, your users will likely get a better experience from the ajax version pulling a limited number of rows. Rendering large return sets also takes alot longer in the browser.

Bu birkaç küçük sorguları yapmak için ağır veritabanı yük var, ama bant genişliği önemli ölçüde aşağı gider, bu yüzden kullanıcıya daha hızlı görünür. Veritabanı tarafında 10 700 karşı satırlar için yürütme zamanı muhtemelen oldukça benzer, ancak transferi ve render süreleri önemli ölçüde farklı olacak.

700 istekleri dönen 3 sonuç dönen daha büyük büyüklükte bir sipariş olacaktır. Genellikle ortalama bir kullanıcı sadece 5 veya daha az sonuçlarında ilgi olacağını biliyorsanız, bu kadar ön bu sonuçları döndüren ve kendinize kimsenin umursamadığı bu ekstra 695 sonuçlarından bant genişliği israf sorun kurtarabilir varsaymak güvenli olacaktır.

Bu tam olarak ne istediklerini kullanıcılara sunma konusunda, tüm sonra,. 700 overkill ise, sadece geri kesmek ve kendinize sorun kaydetmek.

Her veri satırı bir abartılmasını olabilir 1kb ise, bu 700KB vs istek başına 5KB (artı başlıklarını) bir farktır. Bu kullanıcıların bir dizi verilen çok hızlı bir şekilde eklersiniz.

Ben hemen hemen herkes söylediklerini ne katılıyorum. Gerçi bu katacak. Bu gerçekten verilere bağlıdır ve bunu ve / veya önbelleği kullanmak niyetinde nasıl. 700-1000 satırlar bir karma tablo önbelleğe alınabilir ve herkes daha sonra iki yaklaşımın bir arada çalışacak, o setten bit çekin olacaktır. Çekin ve (gerektiğinde önbelleği geçersiz) periyodik büyük bir set önbelleğe ama sadece belirli bir istemci Ajax ile ihtiyacı itin. Bu size (genellikle daha verimli) bir tek büyük sorgunun avantaj verir ama sadece veri müşteri ihtiyaçlarını iterek (ağ genellikle büyük darboğaz olduğundan).

Ve her zaman James Black ne diyor ... profilini yapmak. Emin bilmek için tek yoldur.