Her şeyden önce, verimli optimize edebilmek için, bunu zaman ayırdığınız bilmek gerekir:
- PHP çok hesaplamalar yapıyor?
- Eğer çok fazla SQL sorguları var?
- do you have SQL queries that take too much time ?
- nerede komut harcama zaman?
Bu bilgiler ile, sonra anlamaya deneyebilirsiniz:
- if you can diminish the number of SQL queries
- Eğer tekrar tekrar aynı sorguyu yapıyorsun örneğin, belli ki zaman harcıyorsun
- başka bir fikir eğer mümkünse, sorguları "yeniden toplamak" için; Örneğin, bunun yerine tüm bir satır geri almak 10 Sorgu 10 satır, almak için tek bir sorgu kullanın.
- if you can optimize queries that take too long
- indeksleri kullanılarak ya - yararlı olanları genellikle katılır ve kullandığınız koşullara bağlı
- onlar "kötü" ya da eğer, sorguları yeniden yazma
- Select tabloların optimizasyonu hakkında, size bir göz atabilirsiniz: 7.2. Optimizing SELECT and Other Statements
- if PHP is doing too much calculations, can you have it make less calculations ?
- Belki tekrar tekrar benzer şeyler hesaplamaya değil?
- Ya da daha verimli sorguları kullanarak?
- PHP zaman alıyor, ve SQL server paralellik (aynı anda birkaç hesaplamaları başlatılması) kullanılarak, aşırı yüklü değilse de her şeyi hızlandırmaya yardımcı olabilir.
Still : this is quite a specific question, and the answers will be probably be pretty specific too -- which means more informations might be necessary if you want more than general answer...
Edit after your edits
Eğer sadece basit sorgular gibi şeyler ... Belki biraz daha kolay olabilir.
- First of all : you need to identify the kind of queries you are doing.
- Ben tüm sorguları, sorgularda bazı "türleri" belirlemek için, tahmin ediyorum.
- Örneğin: "
select * from a where x = 12
" ve "select * from a where x = 14
" aynı tipte: Aynı seçin, aynı masa, aynı yerde fıkra - sadece değer değişiklikleri
- once you know which queries are used the most, you'll need to check if they are optimized : using
EXPLAIN
will help
- (if needed, I'm sure some people will be able to help you understand its output, if you provider it alongside the schema of you DB (tables + indexes))
- Gerekirse: sağ dizinleri oluşturmak - bu zor / belirli bir kısmının tür ^ ^
- Bu sorgu sayısını azaltarak yararlı olabilir bu sorguları için de ...
- when you're done with queries often used, it's time to go with queries that take too long ; using
microtime
from PHP will help you find out which ones those are
Before that, to find out if PHP is working too much, or if it's MySQL, a simple way is to use the "top" command on Linux, or the "process manager" (I'm not on windows, and don't use it in english -- the real name might be something else).
PHP% 100 CPU yiyor, sizin suçlu var. MySQL bütün CPU yiyor ise, siz de suçlu var.
Eğer onlardan biri çok çalıştığını biliyor, bu bir ilk adım: İlk optimize etmek için biliyorum.
I see from your portion of code that your are :
- tek 10.000 elemanları biri geçiyor - 2 veya daha fazla dilim bu bölmek kolay olmalı
- PHP-tarafında bazı CPU yemek olabilir DOM ve XPath kullanarak
Bir çok-çekirdekli işlemci varsa, bir fikir (PHP CPU çok yeme olduğunu görürsem ben denemek istiyorum) parallelize için istiyorsunuz.
Örneğin, aynı anda çalışan PHP script iki örneğini olabilir:
- one that will deal with the first half of the URLs
- Bunun için SQL sorgu "
select * from urls where id < 5000
" gibi olacak
- and the other one that will deal with the second half of the URLs
- Onun sorgusu "
select * from urls where id >= 5000
" gibi olacak
Sen ağa (muhtemelen bir sorun) ve veritabanı (a database knows how to deal with concurrency, and 2 scripts using it will generally not be too much) biraz daha eşzamanlılık alacak, ama aynı zamanda belgelerin neredeyse iki aynı miktarda işlemek mümkün olacak.
Eğer 4'te adresler-list bölme, 4 işlemci varsa (or even more ; find out by trial and error) parçalar çok yapardı.