PHP veya seri json?

6 Cevap php

Yani PHP bir dizi kodlamak ve MySQL veritabanı düz metin olarak saklamak gerekir, benim soru serialize () veya json_encode () kullanmak gerekir? Bunların her birinin avantaj ve dezavantajları nelerdir?

Ben bunlardan birini bu durumda yapacağını düşünüyorum. Ama hangi bir neden tercih ediyorum? Bir dizinin başka bir şey için değilse?

6 Cevap

Ana avantajı serialize: o it can represent PHP types, kendi sınıflarının örneklerini içeren anlamına gelir, PHP özgü var - ve sizin sınıfların hala örneklerini, geri nesneleri alırsınız zaman Verilerinizi unserializing.


Main advantage of json_encode : JSON is not specific to PHP : there are libraries to read/write it in several languages -- which means it's better if you want something that can be manipulated with another language than PHP.

Bir JSON dize de tefrika bir daha değiştirmek by hand / okuma / yazma daha kolaydır.

JSON PHP özgü olmadığı gibi, diğer yandan, PHP özgü var şeyler farkında değil - veri türleri gibi.


As a couple of sidenotes :

  • Bu ikisi arasındaki hız küçük bir fark olsa bile, bu çok önemli olmamalı: muhtemelen hale değil / çok veri unserialize
  • Are you sure this is the best way to store data in a database ?
    • Bir DB, tefrika strins çok sorguları yapmak mümkün olmayacaktır: Eğer where cümlelerinde verileri kullanmak mümkün, ne de PHP müdahalesi olmadan güncelleme olmaz ...

PHP Serile vs Json Kodlama bazı analizler yaptım. Ve ben Json dizi gibi düz ve basit veri için en iyi olduğunu bulundu.

http://blog.shozab.net/php-serialization-vs-json-encoding-for-an-array/ benim deneylerinin sonuçlarını görmek

Peki öncelikle bir dizi veya nesne seri ve bir veritabanında saklanması tipik bir kod koku olduğunu. Bazen insanlar bir sütuna bir virgülle ayrılmış listesini koyarak sonuna kadar ve daha sonra onlar üzerinde sorgulamak gerektiğini öğrenmek o zaman sorun her türlü içine almak.

Bu durum bu tür Yani bu konuda çok dikkatli düşünmek.

Farklılıklara gibi. PHP serialize muhtemelen daha kompakt ama PHP sadece kullanılabilir. JSON (Ben çok anlamlı şüphe rağmen) kodlamak ve kodunu çözmek için çapraz-platform ve muhtemelen yavaş.

Veri PHP uygulaması ayrılmak zorunda kalmayacaksınız varsa bu nesneler için uyandırma () yöntemlerini __ uyku gibi ekstra işlevsellik bir sürü sunuyor () ve __, çünkü ben () serialize öneririz. Ayrıca doğru sınıfların örnekleri gibi nesneleri geri yükler.

Eğer başka bir uygulamaya tefrika verileri geçecek ise, uyumluluk için JSON veya XML kullanmalısınız.

Ama bir veritabanına tefrika Nesneyi depolamak? Belki tekrar düşünmek gerekir. Daha sonra gerçek bir sorun olabilir.

json_encode üzerinde bir başka avantajı, serialize boyutudur. Ben bizim memcache kullanılan bellek çok büyük başlamıştı neden anlamaya çalışıyordu, ve azaltmak için yollar bulmaya çalışıyoruz gibi olduğunu fark:

<?php

$myarray = array();
$myarray["a"]="b";
$serialize=serialize($myarray);
$json=json_encode($myarray);
$serialize_size=strlen($serialize);
$json_size=strlen($json);
var_dump($serialize);
var_dump($json);
echo "Size of serialized array: $serialize_size\n";
echo "Size of json encoded array: $json_size\n";
echo "Serialize is " . round(($serialize_size-$json_size)/$serialize_size*100) . "% bigger\n";

Size verir:

string(22) "a:1:{s:1:"a";s:1:"b";}"
string(9) "{"a":"b"}"
Size of serialized array: 22
Size of json encoded array: 9
Serialize is 59% bigger

Açıkçası ben dizi kısa olarak, en aşırı örneğini aldım, daha önemli, tefrika ile havai. Hala bir üretim web sitesinden kendi json eşdeğer% 20 daha büyük olan tefrika dizi göreceksiniz.

Birincisi, Shozab Hasan ve bu testler için user359650 için teşekkürler. Ben seçim iyi ve şimdi biliyorum hangi merak ediyorum:

Belki PHP ve JavaScript, diğer dilleri hem Tamam basit bir dizi, JSON kodlamak.

Bir PHP nesne kodlamak için serialize çünkü PHP PHP ile sadece instanciable Nesne özgüllük daha iyi bir seçimdir.

Verileri saklamak için, mağaza ya da bir dosyada verileri kodlanmış veya standart format ile MySQL kullanımı. Bu geri verilerini almak için çok daha kolay olacaktır. MySQL verileri PHP tedavi olmadan onları almak istiyorum yol almak için büyük işlevleri vardır.

I've never made any test but i think that file storage is the best way to store your datas if system file sorting is enough to get back your files in alphabetical/numeral order. MySQL is to greedy for this kind of treatment and uses file system too...