Bir nesneyi nemlendirmek ne demektir?


206

Birisi bir nesneyi nemlendirmekten bahsettiğinde, bu ne anlama geliyor?

Web'de Hydrate adında, farklı temsiller (RDMS'den OOPS'a XML'ye) verileri dönüştüren bir Java projesi görüyorum. Nesne hidrasyonunun genel anlamı bu mu; temsiller arasında veri dönüştürmek için? Depolanmış bir sunumdan bir nesne hiyerarşisinin yeniden yapılandırılması anlamına gelebilir mi?


3
Lütfen harika bir cevabı olan bu soruya da bakınız. Aynı soru değil, bu yüzden kapatmak için oy vermiyorum. Ancak hidrasyonu iyi açıklıyor: stackoverflow.com/questions/4929243/…
Erick Robertson

Yanıtlar:


127

Daha genel terim hidrat ile ilgili olarak

Bir nesneyi nemlendirmek, bellekte var olan, henüz herhangi bir etki alanı verisi ("gerçek" veri) içermeyen ve daha sonra etki alanı verileriyle (bir veritabanından, ağdan veya bir dosyadan) doldurmaktır. sistem).

Erick Robertson'ın bu cevap hakkındaki yorumlarından:

serileştirme == örnekleme + hidrasyon

Kabarcık performansı konusunda endişelenmenize gerek yoksa ve bir veri erişim API'sının içindeki performans optimizasyonlarında hata ayıklamıyorsanız, muhtemelen hidrasyonla açıkça ilgilenmeniz gerekmez. Bunun yerine genellikle serileştirmeyi kullanırsınız, böylece daha az kod yazabilirsiniz. Bazı veri erişim API'leri size bu seçeneği sunmaz ve bu gibi durumlarda hidrasyon adımını da kendiniz çağırmanız gerekir.

Hidrasyon kavramı hakkında biraz daha ayrıntılı bilgi için Erick Robertson'un aynı soruya verdiği cevaba bakınız .

Hidrat adı verilen Java projesi ile ilgili olarak

Bu çerçeveyi özellikle sordunuz, bu yüzden ona baktım.

Anlayabildiğim kadarıyla, bu projenin "hidrat" kelimesini çok genel anlamda kullandığını düşünmüyorum. Başlıkta kullanımını "serileştirme" ile eşanlamlı olarak görüyorum. Yukarıda açıklandığı gibi, bu kullanım tamamen doğru değildir:

Bkz. Http://en.wikipedia.org/wiki/Serialization

veri yapılarının veya nesne durumunun, daha sonra aynı veya başka bir bilgisayar ortamında saklanabilecek [...] ve yeniden yapılandırılabilecek bir formata çevrilmesi.

Adlarının arkasında yatan nedeni doğrudan Hidrat SSS'de bulamıyorum , ancak niyetlerine dair ipuçları aldım. Sanırım "Hidrat" adını aldılar çünkü kütüphanenin amacı popüler ses benzeri Hazırda Bekletme çerçevesine benzer , ancak tam tersi iş akışı düşünülerek tasarlandı.

Hazırda Bekletme dahil çoğu ORM, bellek ikinci nesne modeli odaklı bir yaklaşım benimser ve veritabanı ikinci dikkate alır. Hidrat kütüphanesi, ilişkisel veri yapılarınızı koruyarak ve programınızın bunların üzerinde daha temiz çalışmasına izin vererek veritabanı şeması odaklı bir yaklaşım benimser.

Mecazi olarak, bu kütüphanenin adı ile ilgili olarak: Hidrat , "kullanıma hazır bir şey yapmak" gibidir ( Kurutulmuş Gıdaları yeniden nemlendirmek gibi ). Hibernate'in mecazi bir zıttıdır , daha çok "kış için bir şeyleri uzaklaştırmak" ( Hayvan Hazırda Bekletme gibi ) gibidir.

Kütüphaneye Hydrate adını verme kararı, anlayabildiğim kadarıyla, genel bilgisayar programlama terimi "hidrat" ile ilgili değildi.

Genel bilgisayar programlama terimi "hidrat" kullanıldığında, performans optimizasyonları genellikle motivasyon (veya mevcut optimizasyonlarda hata ayıklama). Kütüphane, nesnelerin veriyle ne zaman ve nasıl doldurulacağı üzerinde ayrıntılı denetimi desteklese bile, zamanlama ve performans, adın veya kütüphanenin işlevselliği için birincil motivasyon gibi görünmemektedir. Kütüphane uçtan uca haritalama ve şema korumanın sağlanmasıyla daha ilgili görünmektedir.


79
-1 Hidrasyon, mevcut bir nesnenin verilerle doldurulması anlamına gelir. Serileştirme ile eşanlamlı değildir.
Erick Robertson

20
Bu, serileştirmenin eşanlamlısı da değildir. Diziselleştirme, nesnenin serileştirildiği sırada sahip olduğu verilerle oluşturulmasını içerir. Hidrasyon, bir nesneyi veriyle nasıl doldurduğunuz anlamına gelir. İnce bir fark, ama bir fark. Örneğin, bir nesnenin serisini tamamen kaldıramazsınız. (en azından standart API aracılığıyla değil)
Erick Robertson

5
Hepimiz öğrenmeye çalışıyoruz. Gereksiz olduğuna inanırsam, kaldıracağım ve tartışmayı takdir ediyorum. Aslında PHP ile ilgili olarak "hidrasyon" terimini kullandığım için cevabım Java merkezli değil. "Bir cismi nemlendirmek ne demektir?" "mevcut bir nesneyi verilerle doldurmak". Nesnenin nemlendirilmesinden önce var olması gerekir; bu, serileştirme için doğru değildir. deserialization == instantiation + hydration
Erick Robertson

2
Üzgünüm, bu cevapta etiketleme konusunda sorun yaşıyorum Merlyn Morgan-Graham. Kaydettiğimde kaldırılıyor. Ben de şişirmenin serileştirmeye eşit olması konusunda sorun yaşıyorum. Kaynaksız iddiayı kaldırmak için bağlantılı Wikipedia makalesini düzenledim. Bana şişirmek bir tür dekompresyon rutini anlamına geliyor. Bir serileştirme rutini sıkıştırmaya diktir.
Erick Robertson

2
@ErickRobertson Yan not: @fooyazı yazarına yanıt verirken gerekli değildir.
Duncan Jones

232

Hidrasyon, bir nesneyi verilerle doldurma işlemini ifade eder. Henüz hidratlanmamış bir nesne başlatıldı ve veri içeren bir varlığı temsil ediyor, ancak veriler henüz nesneye yüklenmedi. Bu, performans nedenleriyle yapılan bir şeydir.

Ayrıca hidrasyon terimi, veritabanlarından veya diğer veri kaynaklarından veri yükleme planları tartışılırken kullanılır. İşte bazı örnekler:

Bir nesneyi, alanların yalnızca bir kısmını yüklediğinizde ancak hepsine değilken kısmen nemlendirilmiş diyebilirsiniz. Bu yapılabilir, çünkü bu diğer alanlar mevcut işlemleriniz için gerekli değildir. Bu nedenle, kullanılmayacağı zaman bu verilerin yüklenmesi, aktarılması ve ayarlanması için bant genişliği ve CPU döngülerinin boşa harcanmasına gerek yoktur.

Buna ek olarak, nesneleri nesnelleştirildiklerinde hidratlamayan, ancak yalnızca o nesnede verilere erişildiğinde Doctrine gibi bazı ORM'ler vardır. Bu, kullanılmayacak verileri yüklememeye yardımcı olan bir yöntemdir.


8
+ 1; Bu, Java ve Hidrasyon bağlamında benimkinden daha eksiksiz bir cevaptır. Cevabımın belirttiği gibi, hala genel terimden arındırma terimi ile eşanlamlıdır, ancak en çok ORM'lerde kullanılmaktadır. Bunun nedeni, ORM API'lerinin genellikle aldıkları veri kümesi üzerinde kontrol sunması ve yazdığınız her sorgu için yeni eşlemeler yazmak yerine mevcut bir nesne eşlemesini yeniden kullanmanızı sağlar. Bu soru-cevap tamamen terminoloji hakkında olduğundan, "tembel yükleme" den bahsettiğinizden bahsetmek isteyebilirsiniz :)
Merlyn Morgan-Graham

1
Nesne ayıklamadan veri alma işleminin tersini çağırmak doğru mu? Nesneden veri ayıklayın.
Oleg Abrazhaev

43

Merlyn'in bahsettiği gibi biraz gereksiz olsa da, benim deneyimime göre, sadece bir nesneyi doldurmak / doldurmak, örneklemek / yaratmak değil, bu yüzden kesin olmanız gerektiğinde yararlı bir kelimedir.


5
Fikrimi değiştirdim ve şimdi bu cevabın eski cevabımdan daha doğru olduğuna katılıyorum. O zamandan beri cevabımı düzenledim (kabul edildiğinden ve doğru olmasını istiyorum). Şimdi umarım şimdi serileştirme ve hidrasyon arasındaki farkı yansıtır (özellikle deserialization == instantiation + hydration).
Merlyn Morgan-Graham

9

Bu oldukça eski bir soru, ancak aşağıdaki terimlerin anlamı konusunda hala karışıklık var gibi görünüyor. Umarım bu anlaşılamaz hale gelir.

Hidrat

"Verileri bekleyen bir nesne nemlendirilmeyi bekliyor" gibi şeyler söyleyen açıklamalar gördüğünüzde bu kafa karıştırıcı ve yanıltıcıdır. Nesneler bir şeyleri beklemez ve hidrasyon sadece bir nesneyi veri ile doldurma eylemidir.

Örnek olarak JavaScript kullanma:

const obj = {}; // empty object
const data = { foo: true, bar: true, baz: true };

// Hydrate "obj" with "data" 
Object.assign(obj, data); 
console.log(obj.foo); // true
console.log(obj.bar); // true
console.log(obj.baz); // true

Değer katan her şey objonu "nemlendirir". Sadece Object.assign()bu örnekte kullanıyorum .

"Serileştirme" ve "serileştirme" terimleri diğer yanıtlarda da belirtildiği için, bu kavramların anlamını hidrasyondan ayırmaya yardımcı olacak örnekler:

serialize

console.log(JSON.stringify({ foo: true, bar: true, baz: true }));

Deserialize

console.log(JSON.parse('{"foo":true,"bar":true,"baz":true}'));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.