Çok hızlı bir algorithem program ihtiyacı, ben php uzantısı, ya da bazı otherway olarak bunu yapmak gerekir?

4 Cevap php

Most of my application is written in PHP ((Front and Back ends). There is a part that works too slowly and I will need to rewrite it, probably not in PHP. What will give me the following:
1. Most speed
2. Fastest development
3. Easily maintained.

Ben bir PHP uzantısı olarak CPP bu kod parçası yeniden yazmak için aklımda var ama bu çözüm üzerinde kilitli ve bazı basit / iyi çözümler özlüyor ben olabilir?

Algoritması veri birkaç MB üzerinde çalıştırıldığında her zaman PorterStemmerAlgorithm olduğunu.

4 Cevap

Bu sorunun cevabı gerçekten öyle sürecinin ne tür bağlıdır.

If it is a long running process (at least seconds) o zaman belki C + + ile yazılmış bir harici bir program süper kolay olurdu. Bu bir PHP uzantısı karmaşık olmazdı ve PHP / apache etkilemeyeceğini kararlılığı. Sen boruları, paylaşımlı bellek, ya da sıralama üzerinden iletişim kurabiliriz ...

If it is a short running process (measured in ms) daha sonra büyük olasılıkla bir PHP uzantısı yazmak gerekir. Yani neredeyse hiç çağrı başına yüküyle ÇOK hızlı çağrılması için izin verecek.

Another possibility is a custom server Unix alan soketi dinler ve PHP bilgi sorduğunda hızla PHP yanıt hangi. Sonra başına çağrı havai temelde (kötü) bir soket yaratıyor. Sunucu herhangi bir dil (c, c + +, Python, Erlang, vs ..) olabilir ve müşteri socket_ * () işlevlerini kullanan 50 satırı PHP sınıf olabilir.


Bilgi ihtiyaçlarının bir sürü bu kararı vermeden önce değerlendirilir. Eğer tekrarlanan işlev çağrıları gerçekten sıkı döngüler veya binlerce içine almak kadar PHP genellikle yavaşlamalar görünmüyor. (Yukarıdaki geçerlidir sürece) diğer bir deyişle, HTTP isteği ve ağ gecikmeler havai genellikle PHP gecikmeler önemsiz hale

  • Belki PHP yazmak için daha iyi bir yolu var mı?
  • Veritabanı bağlıdır?
  • CPU bağlı, Ağ bağlı veya IO bağlı?
  • Sonuç önbelleğe alınabilir?
  • Bir kitaplık zaten ağır kaldırma yapmak hangi var mı.


Özel bir PHP uzantısı taahhüt ederek, (hatta C + + yukarıda) korumak için gerekli bilgi tabanına önemli ölçüde ekleyebilirsiniz. Ama bir great option when necessary olduğunu.

Sorunuzu daha fazla bilgi ile güncellemek için çekinmeyin, ve ben taşması yardımcı olmaktan mutluluk olacaktır eminim.

Suggestion

PorterStemmerAlgorithm http://tartarus.org/~martin/PorterStemmer/c.txt mevcut bir C uygulama vardır

Bu veri kaynakları içine bu C programı kravat ve tek başına çalıştırılabilir yapmak için kolay bir mesele olmalıdır. Sonra sadece bu proc_open() olarak proc fonksiyonları biriyle PHP onu çağırmak

Bu programı php istek BAŞINA birçok kez çağırmaya gerek olmadıkça, o zaman bu yaklaşım size bina ve bir PHP uzantısı entegre değil (c) zor iş zaten yapılır söz ve çaba kaydetmek gerekir.

PorterStemmerAlgorithm ne olduğu konusunda emin değilim. Eğer paralel süreç çalışmasını sağlamak ve birlikte bilgi toplamak eğer Ancak, kolayca JAVA uygulanan paralel çalışan süreçleri bakmak olabilir. Eğer PHP diyebilirsin nasıl emin, ama kesinlikle sürdürülebilir değildir.

Bu çerçevede de bir göz atabilirsiniz. Uygulamak için basit görünüyor

https://computefarm.dev.java.net/

Regards, Franklin.

Kesinlikle hız nedeniyle farklı bir dilde yeniden yazmak gerekiyorsa o zaman ben gahooa cevabı güzel seçeneklerini de kapsar düşünüyorum. Ancak, bunu yapmadan önce, size performans eğer PHP uygulama geliştirmek için her şeyi yaptık kesinlikle emin misin?

  1. Sizin durumunuzda canlı çıktı önbelleğe? Eğer bir kez algoritması çalışan ve çıkış önbelleğe yerine, her sayfa yük ile alabilir?
  2. Eğer (db bir iç döngüde sorguları ve benzeri) yapılıyor gereksiz iş var sağlamak için kod profil denedim. Xdebug burada yardımcı olabilir.
  3. Veri kümesi üzerinde daha iyi performans mevcut diğer kaynaklanan algoritmalar var mı?