9

İlişkili bir veritabanı arka planından geldiğimden, diğer birçok kişi olduğundan emin olarak, Google'da veri mağazamı oluşturmak/tasarlamak için bazı katı kurallar arıyorum App Engine. Bu tür şema içermeyen veri depolarını kurmak için başparmak insanların iyi kuralları var mı? Katıldığınızdan beri denormalize etmek gibi bazı temelleri anlıyorum, ama insanların önerdiği diğer önerileri merak ediyordum.Google App Engine Datastore ve diğer NoSQL DB'leri için şema içermeyen tasarım yönergeleri

Özellikle basit bir örnek, aramaları ve sonuçlarını depolamakla ilgili kaygılarla çalışıyorum. Mesela ben Python kullanarak Google App Engine uygulamasında tanımlanan iki model vardır:

class Search(db.Model): 
    who = db.StringProperty() 
    what = db.StringProperty() 
    where = db.StringProperty() 

    createDate = db.DateTimeProperty(auto_now_add=True) 

class SearchResult(db.Model): 
    title = db.StringProperty() 
    content = db.StringProperty() 

    who = db.StringProperty() 
    what = db.StringProperty() 
    where = db.StringProperty() 

    createDate = db.DateTimeProperty(auto_now_add=True) 

Ben katılamaz çünkü denormalizasyon uğruna modeller arasındaki özelliklerin bir demet çoğaltarak ediyorum Search ve SearchResult birlikte. Bu mantıklı mı? Veya SearchResult modelinde bir arama kimliğini saklamam ve bunları veri deposundan aldığımda koddaki iki modeli etkin bir şekilde "katıl" mı? Lütfen bunun basit bir örnek olduğunu unutmayın. Her iki modelde çok daha fazla özellik olacak ve şu an bu yaklaşıma yaklaşma yolunda, Arama modeline koyduğum herhangi bir özelliği SearchResult modeline de koyardım.

cevap

6

Her zaman SearchResult ve Search arasında aynı olacaklarsa özellikleri çoğaltmayın. Bir SearchResult, Search referansına sahip olsaydı, aramaya işaret eden bir ReferenceProperty tutun. Bu, temel olarak ilgili Search modelinin Key modelini depolar.

class SearchResult(db.Model): 
    search = db.ReferenceProperty(Search, required=True) 
    # other stuff... 

Ayrıca yüksek bazı izlemek tavsiye App Engine videos from last year's Google I/O (ve 2008 itibaren), özellikle Brett Slatkin tarafından this one ve Ryan Barrett this one yılında. Zamanınız varsa, oldukça yararlı videolardır, ancak özellikle bu iki kişiyi gerçekten harika buldum.

+0

Mükemmel, teşekkürler dostum. – jamesaharvey