Php ile hızları gibi Google almak nasıl?

9 Cevap php

Ben Zend Framework ile PHP kullanıyorum ve Veritabanı Google bir sorgu yapmak için gereken 0,02 saniyeden daha uzun sürer gibi görünüyor yalnız bağlanır. Tuhaf şey, bugün Google bir tek sorgu için 1000 sunucularına bağlanan dedi bir video izledim. Gecikme ile her sorgu için bir sunucu şeyler handeling farklı veri merkezlerinde birden çok sunucuya sahip daha verimli olması beklenir.

Nasıl PHP, MySQL ve Zend Framework birlikte çalışmak ve eşit büyük hızlara ulaşmak için alabilirim?

Tek yolu önbelleğe? Nasıl "render" için daha az zaman ayırın kodunuzu optimize edebilirim.

9 Cevap

Google, sunduğu verim miktarını elde etmek için kullandığı birçok teknik vardır. MapReduce, Google File System, BigTable bunlardan birkaçıdır.

Birkaç çok iyi Free & vardır Bu Açık Kaynak alternatifler, yani Apache Hadoop, Apache HBase ve Hypertable. Yahoo! kullanan ve Hadoop projeleri oldukça çok teşvik ve bu nedenle oldukça aktif tutulur edilmektedir.

I am using PHP with the Zend Framework and Database connects alone seem to take longer than the 0,02 seconds Google takes to do a query.

Eğer her istek için kaynak başlatmak zorunda kalmamak için bir bağlantı havuzu kullanmak: Veritabanı işlemleri olursa olsun kim ağır vardır bağlayın.

Performans mimarisi değil dili hakkında.

Bir süre önce Google RAM içine her şeyi koymak için karar verdi.

http://googlesystem.blogspot.com/2009/02/machines-search-results-google-query.html

Eğer sabit disk sorgulamak zorunda asla varsa, sonuçları önemli ölçüde artıracaktır. (Eğer sadece kaynak modifiye edildiğinde PHP programı derlemek anlamına PHP ile önbelleğe alma demek sürece) sizin kadar sabit disk sorgulamak yok çünkü önbelleğe alma yardımcı olur, ama bir önbellek özledim olduğunda hala yapılacak.

Gerçekten yapmak çalıştığınız ne bağlıdır, ama burada bazı örnekler şunlardır:

  • Açıklamak sorguları ile analiz. Sizin dev ortamında sayfanın alt çıkış sorgular ve yürütme zamanı olabilir - sorguların sayısını azaltmak ve / veya yavaş olanları optimize.

  • Bir önbellek katmanı kullanın. Zend memcache etkin olabilir gibi görünüyor. Bu potansiyel büyük ölçüde yerine db ultra hızlı önbelleğe tabakasına istekleri göndererek başvurunuzu hızlandırabilir.

  • Ön-uç zaman yükleniyor bak. Yahoo'nun YSlow kullanın eklenti Firebug. Sınır http istekleri, önbellek JS, CSS ve görüntülere uzak gelecekte başlıkları ayarlayabilirsiniz. Vb

Eğer, her uygulama katmanı optimize varsa, muhtemelen hızlı google gibi, web uygulaması yıldırım hızı alabilirsiniz. Db kez muhtemelen app yavaş parçası değildir bağlayın.

Memcached Linux bellek depolama / geri alma optimize etmek için önerilen bir çözümdür.

PHP scripts by default are interpreted every time they are called by the http server, so every call initiates script parsing and probably compilation by the Zend Engine. You can get rid of this bottleneck by using script caching, like APC. It keeps the once compiled PHP script in memory/on disk and uses it for all subsequent requests. Gains are often significant, especially in PHP apps created with sophisticated frameworks like ZF.

Varsayılan olarak her istek veritabanına bir bağlantı açılır, böylece veritabanı bağlantı havuzu veya kalıcı bağlantılar çeşit (her zaman http sunucu / php yapılandırmasına bağlı olarak, işe yaramaz olan) kullanmalısınız. Ben denedim hiç, ama belki veritabanı bağlantı kolları tutmak için memcache kullanmak için bir yolu var.

Onlar her istek üzerine kullanılan konum varsa da, oturum verileri tutmak için memcache kullanabilirsiniz. Onların kalıcılık önemli değildir ve memcache çok hızlı yapmanıza yardımcı olur.

Her isteği http sunucu tarafından işlenir ve bir PHP komut dosyası çalıştıran gerektiriyorsa, onun tercüman başlatıldı - asıl "sorun", bir SSI (sunucu tarafı içerir) yolu çalışır çünkü PHP, diğer çerçeveler biraz daha farklı çalışıyor olmasıdır ve komut dosyaları, yüklenen ayrıştırılır, derlenmiş ve çalıştırın. Bu arabaya biniyorlar motoru başlayan ve 10 metre oluyor mukayese edilebilir.

Diğer yol en web uygulama kendisini her zaman veritabanı bağlantıları paylaşımı ve tekrar çalışma zamanı başlatılıyor değil, kendi döngüsünde istekleri işleme olduğu, bir uygulama sunucusu yolu diyelim, olduğunu. Bu çözelti, daha düşük bir gecikme sağlar. Öte yandan bu zaten çalışan bir arabanın içinde olmak ve aynı 10 metre sürmek için kullanıyor mukayese edilebilir. ;)

Yukarıdaki önbelleğe / önderlemeyi ve havuzlama çözümler init yükünü azaltarak en iyisidir. PHP / MySQL rağmen hala bir RDBMS tabanlı bir çözümdür, ve BigTable neden iyi bir nedeni var, iyi, sadece büyük, kanatlı bir, kitlesel dağıtılan Hashtable (biraz basite indirgemek, biliyorum) - üzerinde okumak {[(0) }].

Bir arama motoru için ise, darboğaz boyutuna bağlı olarak, veritabanı.

Büyük bir sette tam metni hız-up arama için kullanabileceğiniz Sphinx. Bu 1 veya birden fazla sunucu ya yapılandırılabilir. Sfenks (libs çoğu dil için mevcuttur) bir arama daemon olarak çalışır gibi Ancak, mevcut sorgulama kodu adapte olacak

Google (kendi donanım ve işletme, dosya ve veritabanı sistemleri dahil) patentli teknoloji bir sürü içeren bir büyük, yüksek derecede dağıtılmış sistemi var.

Soru soran gibi: "Nasıl benim araba bir kamyon olmak yapabilir?" ve esasen anlamsız.

@ Coltin tarafından sağlanan bağlantıya göre, yanıt süresi 0,2 saniye değil, .02 saniye bölgede bulunmaktadır google. Sürece uygulama etkin bir tasarıma sahip olarak, ben birçok platform üzerinde başarmak gerekir inanıyoruz. Ben PHP bilmiyorum rağmen 0,2 saniyede bir sorun olup olmadığını bana surpise olacaktır.