Hangi durumlarda veri seri gerekir?

2 Cevap php

I'm aware that serializing is used to convert data types into a storable format, for purposes such as caching.

Ben daha spesifik isimli soruyorum, aslında veri depolamak için karar vermelidir hangi koşullar (Python pickle modülü, ve saire, serialize() PHP kullanarak) nelerdir?

Adlı bir yüksek trafik web sitesi vardı ve bizim /blog Sayfası biz statik içerik xml dosyaları, bir gettext mo dosyası ve bir veritabanından dinamik olarak oluşturulan içerik kullanıyorsanız diyelim.

Example #1:

Biz statik içerik için güveniyor dosyası en/blog.xml:

'<content><![CDATA[
<h1>Welcome to my blog!</h1>
<p>Lorem ipsum dolor sit amet..</p>

]]></content>'

Bu XML dosyası kendisini seri ve önbellekte saklamak ister misiniz?

Example #2:

Biz de normalde ben bu sunucu tarafı üretilir ve dinamik çünkü ben bir şey serialize olmaz kabul ediyorum, bir dinamik olarak oluşturulan form var, ama bizim form alanı etiketleri uluslararasılaştırılmıştır ve ispanyolca bu sayfayı istenen kullanıcı, bu nedenle bir çeviri sınıfını kullanarak hangi kepçeler mo/csv/xml biçiminde saklanan alan etiketlerini oluşturur.

İçeriği contact-us.php:

<label for="first_name"><?php echo $L->_("First Name");?></label>
<input id="first_name" name="first_name" type="text">

"Ad" mesajı id çeviri tercüme sınıfta bulunan bir dizi uygulama düzeyinde çeviri biz ayrıştırmak dosyası ve deposundan çekilir. Yani mo her sayfa isteği üzerine dosya ayrıştırmak ve yerine mo ayrıştırma sonra tüm dizi seri, ve sonra bunun tefrika dökümü dayanmaz bizim kod için ideal olacaktır?

Example #3:

Bizim blog sayfasında biz 5 en son blog yazılarını çekiyorsun diyelim.

$posts = BlogClass->sql('SELECT blog_message, blog_author FROM blog_posts LIMIT 5 ORDER BY blog_date DESC');

Biz memcache gibi bir şey güveniyor ve sadece sql ifadesinin sonucunda bir anahtarı ayarlamak isterim, bu sorgunun sonuçlarını serialize istiyorsunuz ya?

Bonus:

Herkes aslında serileştirme verimli / pratik kullanımları / yanlış kullanımların spesifik örnekler verebilir, bu harika olurdu - çoklu sayfa, oturumlarda veritabanı bilgileri ve mağaza şeyler çeker kocaman dev forma, veya herhangi örnekler gibi bir şey burada Eğer, tefrika güvenmek zorunda ..

2 Cevap

Example 1

Profil.

  • Bu içerik sayfaları oluşturmak için engelleyici pahalı mı?
  • Önemli ölçüde daha az masraflı, oluşturulan içerik serisini mı?

Her iki cevap evet ise, bunu düşünün.

Example 2

Profil.

  • Bu içerik sayfaları oluşturmak için engelleyici pahalı mı?
  • Önemli ölçüde daha az masraflı, oluşturulan içerik serisini mı?

Her iki cevap evet ise, bunu düşünün.

Example 3

Profil.

  • Bu sorgu pahalı mı?
  • Bu memcached gelen verileri kapmak için önemli ölçüde daha hızlı mı?

Her iki cevap evet ise, bunu düşünün.

Bonus

Benim veri sadece ben çünkü yapabilirim serialize asla. Ben aksi takdirde sadece erken optimizasyon var, bunu yapmak için bir neden olması gerekir. Bu yapılması gerektiği konusunda karar girer çeşitli faktörler vardır.

Performing sorting or other operations on a serialized set of data

Bu hemen hemen her zaman kötü bir fikir olacaktır. örneğin sonra bazı alana göre bu seti yeniden düzenlemek için gerekli bir veritabanından, bir resultset tefrika varsa, ayak kendinizi çekim ediyoruz.

Messaging

Diğer servisler / dillere serialized veri iletişim gerekiyorsa o serileştirme seçimi önemlidir. Ben biliyorum ya da başka şeyler okumak gerekebilir düşünüyorsanız bir dil özel yöntemi kullanarak seri hale kaçının. JSON genellikle çapraz dil serileştirme için ideal bir formattır.

Updating serialized data

Bunu kaynağın güncellemeleri için tefrika Verileri yeniden üretmek için istekli olması gerekir. Bu seri hale getirilmiş verileri karmaşık güncellemeleri her türlü yapmak için pahalı olacaktır.

Human readability

Kolayca okumak gerekiyorsa, ben dil belirli biçimleri kaçınarak öneririz. Bunun için JSON öneririz.

Edit:

Ben sadece Örnek 3 sorguda tekrar baktı. Bu son derece basit bir sorgu, yalnızca bir tarih alanı ile 2 alanları ve sipariş seçiyoruz. Düzgün endeksli tablo ile bu sorgu önemsiz olmalı, ve ben memcached içine böyle bir şey önbelleğe tavsiye etmem.

(PHP serialize () kullanarak, Python turşu modülü, vesaire) aslında veri depolamak için karar vermelidir hangi şartlar nelerdir?

Bu soruya cevap vermek kolaydır. Çeşitli senaryolar aslında çok alaka yok.

İşte cevabı You serialize when you have to. Hayır daha erken.

Birçok API Python nesneleri kabul etmeyecektir. API Python nesne kabul edemez, o zaman sık sık bir dize sağlayabilir. Eğer seri o zaman.

Örnek. Eğer kalıcı depolama Python nesne kaydetmek istiyorum. Ne yazık ki, bir file nesne Python nesne yazamıyor. Yani seri.

Örnek. Sen başka bir işlem için bir Python nesne göndermek istiyorum. Siz boru veya ne olursa olsun adlı bir soket kullanarak ediyoruz. Bunlar file nesnelerdir, ve dosya nesneleri Python nesneleri yazamıyor. Yani seri.

Eğer seri o zaman.

  1. XML dosyaları are tefrika DOM ağaçları. Python nesne DOM ağaçtır. XML dosyası DOM ağacını getirilmeye bir yoludur. Ben bu örneği anlamıyorum.

  2. Form etiketi dizeleri dizeleri vardır. Onlar seri hale gerekmez. I18N uygulamadan ayrı olarak ele alınır. http://docs.python.org/library/i18n.html Ben bu örneği anlamıyorum.

  3. Bu bir sorgu olduğunu. Sen bir şey serialize yok. Sadece sorgu yapmak. Sonuçlar her zaman değişen (prensipte), bu yüzden sen yok bu nedenle herhangi bir serileştirme, önceki sonuç değil, geçerli sonucudur.

Bonus. Çok sayfalı, büyük bir form? Sen bir şey serialize yok. Siz sadece web çerçevesinde oturumu güncelleyin. Web çatınızdaki oturum yöneticisi Python nesne seri olabilir, ama size bir çerçeve kullanılmış yüzden - böylece bakım olmazdı.

Serileştirme bir dosyaya bir Python nesnesini yazmak için kullanılır. Bu - web uygulamaları - nadirdir. Çoğunlukla, SQL kullanarak veritabanları için yazıyorum.