PHP'nin XML yükleme zamanında nasıl artırılır?

3 Cevap php

Sonunda bir soru sormak benim lurker durumunu bırakarak ...

Ben XML dosyalarından verileri çeken bir PHP komut performansını artırabilir bilmek gerekir.

Bazı arka plan:

  • Zaten CPU darboğaz eşlediyseniz - ama işlemci maliyetleri bir isabet alarak önce betiğin performansını optimize etmek istiyorum. Özellikle, senaryonun en CPU tüketen parçası XML yükleniyor.

  • Ben veri tarayıcınız Flash arayüzü üzerinden erişilebilir olması gerektiğinden nesne veri depolamak için XML kullanarak yaşıyorum ve biz bu alanda hızlı kullanıcı erişimini sağlamak istiyoruz nedenidir. Proje rağmen hala erken aşamada, yani en iyi uygulama tamamen XML terk etmek olurdu, bu da iyi bir cevap olacaktır.

  • Birçok verinin: Şu anda genellikle küçük olanları da olsa, kabaca 100k nesneler için komplo - ve onlar TÜM belki birkaç nadir istisnalar dışında, komut içine alınmalıdır. Veri seti sadece zamanla büyüyecek.

  • Sık çalışır: İdeal olarak, biz 50k katıdır ~ bir saat komut çalıştırmak istiyorum; gerçekçi, biz ~ 1k / h çalışır razıyım. Veri boyutu ile birleştiğinde bu performans optimizasyonu tamamen zorunlu kılar.

  • Zaten yerine her çalıştırmak için yüklemek yerine, aynı veriler üzerinde birkaç koşu yapma bir optimizasyon adım attık, ama yine de çok uzun sürüyor. Çalışır genellikle kullanıcılar tarafından yapılan değişiklikler ile "taze" verilerini kullanması gerekir.

3 Cevap

Sadece netleştirmek için: yüklemekte olduğunuz veri mevcut durumda işlem için XML dosyaları geliyor ve Flash uygulaması gönderilmeden önce modifiye ediliyor?

Eğer veri depolamak için bir veritabanı kullanarak ve yerine ilk XML okumaktan daha gerektiği gibi XML dışarı iterek daha iyi olurdu gibi görünüyor; XML dosyalarını bina yavaş alırsa onlar aynı dosyanın gereksiz oluşmasını önlemek amacıyla oluşturulan konum gibi dosyaları önbelleğe olabilir.

XML görece statik kalırsa, bir PHP dizi, bu gibi bir şey olarak önbelleğe olabilir:

<xml><foo>bar</foo></xml>

Bir dosya içinde önbelleğe

<?php return array('foo' => 'bar');

Sadece XML arrayified sürümünü içerir PHP için hızlı olmalı.

~ 1k/hour, saatte 3600 saniye, en fazla 3 çalışır ikinci (Dursun 50k/hour) ...

Pek çok soru vardır. Bunlardan bazıları şunlardır:

  • Php script / işlemini tek tek her çalıştırmak için veri kaynağının tüm kayıtları okumak gerekir mi? Değilse, bu alt kümesi ne tür ihtiyacı yoktur (~ boyutu, kriterleri, ...)
  • Veri gönderiyor flaş uygulama + için aynı soru? Php script? Tam, statik xml dosyası için "Doğrudan" isteği?
  • Ne işlemleri veri kaynağı üzerinde yapılır?
  • Eşzamanlılık mekanizması çeşit ihtiyaç mı?
  • ...

Ve flaş müşterilerine xml veri sunmak istiyorum sırf bu mutlaka sunucuda xml verilerini saklamak zorunda olduğu anlamına gelmez. Eğer, örneğin istemciler yalnızca Mevcut kayıtların bir minik alt kümesini gerekir muhtemelen çok daha hızlı, belki xml ama hızı ve "aranabilirliğini" için daha uygun bir şey olarak verileri depolamak ve daha sonra on-the-fly altkümenin xml çıktıyı yaratmak için değil, hangi verilerin müşteri istek ve ne / ne kadar veri değişiklikleri bağlı bazı önbelleğe tarafından destekli.

edit: Diyelim ki gerçekten tüm veri kümesini ihtiyacı ve sürekli simülasyon gerektiğini varsayalım. Sonra bellekte tam "dünya modeli" tutar ve her vadede (dünya kene) bu model üzerinde çalışan sürekli bir süreç düşünebilirsiniz. Bu şekilde en azından her kene üzerinde veri yüklemek zorunda değildir. Ama böyle bir süreç genellikle php daha başka bir şey yazılır.