SORU
29 EKİM 2009, PERŞEMBE


Veri odaklı tasarım nedir?

this article, okuyordum ve bu adam büyük herkes OOP ile veri odaklı tasarım karıştırma yararlanabilir nasıl hakkında konuşmaya devam ediyor. Herhangi bir kod örnekleri, ancak belli etmez.

Bu ve bu ne, yalnız herhangi bir kod örnekleri için herhangi bir gerçek bilgi bulamadım araştırdım. Herkes bu terime aşina ve bir örnek verebilir mi? Bu belki de başka bir şey için farklı bir kelime var mı?

CEVAP
7 Ocak 2010, PERŞEMBE


Öncelikle veri odaklı tasarım ile bu karıştırmayın.

Veri Tasarım Odaklı anlayışım verimli işleme için organize verilerinizi hakkında olmasıdır. Özellikle önbellek açısından özlüyor vb. Veri diğer taraftan, Tasarım harikası izin veri programları davranışların bir sürü (çok iyi Andrew Keith's answer tarafından açıklanan) kontrolü hakkında.

Renk, radius, bounciness, konumu gibi özellikleri ile uygulamanızda top nesneler var.

Odaklı Yaklaşımı Nesne

OOP seni böyle topları tarif:

class Ball {
  Point  position;
  Color  color;
  double radius;

  void draw();
};

Ve sonra bu gibi topları bir koleksiyon oluşturacak:

vector<Ball> balls;

Veri Odaklı Bir Yaklaşım

Veri Odaklı Tasarım ancak bu şekilde kod yazmak için daha olasıdır:

class Balls {
  vector<Point>  position;
  vector<Color>  color;
  vector<double> radius;

  void draw();
};

Gördüğünüz gibi, tek bir birim bir Top artık temsil eden yok. Top nesneleri yalnızca örtük olarak var.

Bu avantajları performansı çok akıllıca olabilir. Genellikle çok topun üzerinde işlem yapmak için aynı anda istiyoruz. Donanım genellikle hafızanın büyük parçalar sürekli verimli olarak kullanmak istiyor.

İkincisi topları bir özellikleri sadece bir kısmını etkileyen işlemleri yapabilirsiniz. E. g. eğer çeşitli şekillerde tüm topları renkleri birleştirmek ve eğer, o zaman önbelleği sadece renk bilgisini içerir. Top özellikleri saklanır, ancak tek bir ünitede bir oyuncunun diğer özellikleri de çekin. Onlara ihtiyacım yok olsa bile.

Önbellek Kullanımı Örnek

Her topu 64 bayt ve bir Noktaya kadar sürer topu 4 bayt alır söylüyorlar. Önbellek yuvası olarak söylemek 64 bayt alır. Eğer 10 topları konumunu güncelleştirmek istiyorum eğer önbelleğe bellek = *64 10 640 bayt çekin ve 10 önbellek özlüyor almam lazım. Ancak ayrı bir birim olarak topları pozisyonları çalışırsam, o sadece = *10 4 40 bayt sürer. Bir önbelleğinde getir uyuyor. Böylece biz sadece 1 önbellek 10 topları güncelleme için Bayan. Bu sayılar önbellek bloğu daha büyük olduğunu varsayıyorum keyfi.

Ama bellek düzeni ciddi etkisi önbellek isabet ve böylece performans olabileceğini göstermektedir. Bu sadece İŞLEMCİ ve RAM hızı genişler arasındaki fark olarak önemi daha da artacak.

Nasıl bellek düzeni için

Top benim örnekte genellikle normal bir uygulama için büyük olasılıkla birden çok değişkenin birlikte erişecek çünkü sorun çok basit,. E. g. konumu ve yarıçapı muhtemelen birlikte sık sık kullanılır. Sonra yapı olmalıdır:

class Body {
  Point  position;
  double radius;
};

class Balls {
  vector<Body>  bodies;
  vector<Color>  color;

  void draw();
};

Bunu nedeni ise veri birlikte kullanılan ayrı diziler yer alırsa, önbellekte aynı yuva için mücadele edecekler riski vardır. Böylece bir yükleme diğer kapı dışarı eder.

Nesne Yönelimli programlamaya sınıflara göre o yüzden sorun zihinsel model içinde varlıkları ile ilgili değil. Veri ile birlikte veri kullanımına dayalı ilişki olduğu için, her zaman Veri Tasarım Odaklı derslerin vermek mantıklı isim olmaz.

İlişkisel veritabanları ilgili

Veri Tasarım Odaklı arkasındaki düşünce ilişkisel veritabanları hakkında ne düşündüğünü çok benzer. İlişkisel bir veritabanı optimize etmek de bu durumda, önbellek CPU önbellek koymak sayfaları olmasa da önbelleği daha verimli kullanarak içerebilir. İyi Veri Tabanı tasarımcısı da büyük olasılıkla dışarı bölecek seyrek ayrı bir tabloya erişilen veri sütunları büyük sayıda bir tablo oluşturmak yerine ... ... sütunlar sadece birkaç hiç kullanılır. Ayrıca veri disk üzerinde birden fazla yerden erişilebilir olmak zorunda değil ki bazı tabloların denormalize için seçebilirsiniz. Gibi Veri Odaklı Tasarım ile bu seçenek veri erişim modelleri nelerdir ve darboğaz nerede olduğunu bakarak yapılır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • bored before i even began

    bored before

    30 Mart 2009