Gerçekten güzel bir konu ve birkaç cevabı okuduktan sonra konuyla ilgili deneylerimi paylaşmak istiyorum.
Bazı "büyük" tablo hemen hemen her veritabanında sorgulanması gereken bir kullanım durumu var (neden sorma, sadece bir gerçek). Veritabanı önbellekleme sistemi farklı istekleri önbellek olmaz gibi uygun değil, bu yüzden php önbellek sistemleri hakkında olsa.
Denedim apcu
ama ihtiyaçlara uymadı, bu durumda bellek yeterince güvenilir değil. Bir sonraki adım, serileştirme ile bir dosyaya önbellek oluşturmaktı.
Tabloda 18 sütun içeren 14355 giriş var, bunlar benim testlerim ve serileştirilmiş önbelleği okuma istatistikleri:
JSON:
Hepinizin söylediği gibi, json_encode
/ ile ilgili en büyük sıkıntı, json_decode
her şeyi bir StdClass
örneğe (veya Nesneye) dönüştürmesidir. Döngüye ihtiyacınız varsa, bir diziye dönüştürmek muhtemelen yapacağınız şeydir ve evet dönüşüm süresini uzatıyor
ortalama süre: 780,2 ms; bellek kullanımı: 41.5MB; önbellek dosya boyutu: 3.8MB
Msgpack
@hutch söz msgpack . Güzel bir web sitesi. Bir deneyelim, olur mu?
ortalama süre: 497 ms; bellek kullanımı: 32MB; önbellek dosya boyutu: 2.8MB
Bu daha iyi, ancak yeni bir uzantı gerektiriyor; bazen korkan insanları derlemek ...
IgBinary
@GingerDog söz igbinary . Ayarladığımı unutmayın igbinary.compact_strings=Off
çünkü okuma performanslarını dosya boyutundan çok önemsiyorum.
ortalama süre: 411,4 ms; bellek kullanımı: 36.75MB; önbellek dosya boyutu: 3.3MB
Msg paketinden daha iyi. Yine de, bu da derleme gerektirir.
serialize
/unserialize
ortalama süre: 477,2 ms; bellek kullanımı: 36.25MB; önbellek dosya boyutu: 5.9MB
JSON'dan daha iyi performanslar, dizi ne kadar büyükse, o kadar yavaştır json_decode
, ama siz zaten yenisiniz.
Bu harici uzantılar dosya boyutunu daraltıyor ve kağıt üzerinde harika görünüyor. Sayılar yalan söylemez *. Standart bir PHP işleviyle neredeyse aynı sonuçları alırsanız bir uzantıyı derlemenin anlamı nedir?
Ayrıca, ihtiyaçlarınıza bağlı olarak, başka birinden farklı bir şey seçeceğinizi çıkarabiliriz:
- IgBinary gerçekten güzel ve MsgPack'ten daha iyi performans gösteriyor
- Msgpack, verilerinizi sıkıştırmakta daha iyidir (igbinary compact.string seçeneğini denemediğimi unutmayın).
- Derlemek istemiyor musunuz? Kullanım standartları.
İşte bu, birini seçmenize yardımcı olacak başka bir serileştirme yöntemi karşılaştırması!
* PHPUnit 3.7.31, php 5.5.10 ile test edildi - sadece standart bir hardrive ve eski çift çekirdekli CPU ile kod çözme - 10 aynı kullanım senaryosu testindeki ortalama sayılar, istatistikleriniz farklı olabilir
JSON_UNESCAPED_UNICODE
.