Veri modelleme, bir uygulamanın verilen bir veri tabanında verileri nasıl depoladığını tasarlama işlemidir. DynamoDB gibi bir NoSQL veri tabanı ile veri modelleme ilişkisel bir veri tabanı ile modelleme yapmaktan farklıdır. İlişkisel bir veri tabanı esneklik için oluşturulmuştur ve analitik uygulamalar için son derece uygundur. İlişkisel veri modellemede ilk olarak varlıklarınızla başlarsınız. Normalleştirilmiş bir ilişkisel modeliniz olduğunda ihtiyaç duyduğunuz tüm sorgu yöntemlerine uygulamanızda yer verebilirsiniz.

NoSQL (ilişkisel olmayan) veri tabanları esneklik için değil, hız ve ölçek için tasarlamıştır. Ölçeği büyüttükçe ilişkisel veri tabanınızın performansı düşebilse de DynamoDB gibi yatay ölçeklendirme veri tabanları tüm ölçeklerde tutarlı performans sağlar. Bazı DynamoDB kullanıcılarının 100 TB’den daha büyük tabloları vardır ve bu kişilerin tablolarının okuma ve yazma performansı tabloların boyut olarak 1 GB’den küçük olduğu zamandaki ile aynıdır.

DynamoDB gibi bir NoSQL veri tabanı ile en iyi sonuçlara ulaşmak için tipik ilişkisel veri tabanından bir düşünce değişimi gerekir. DynamoDB ile verileri modellerken aşağıdaki en iyi uygulamaları kullanın.

1. Erişim modellerine odaklanma
Herhangi türde bir veri modelleme yaparken uygulamanızdaki farklı nesneleri (veya varlıkları) ve bunların nasıl bağlandığını (ya da varlıklarınız arasındaki ilişkiler) açıklayan bir varlık-ilişki diyagramı ile başlayacaksınız.

İlişkisel veri tabanlarında varlıklarınızı doğrudan tablolara koyacak ve yabancı anahtarları kullanarak ilişkileri belirteceksiniz. Veri tablolarınızı tanımladıktan sonra ilişkisel bir veri tabanı ihtiyaç duyduğunuz şekilde veri geri döndürmek için esnek bir sorgu dili sağlar.

DynamoDB’de tablonuzu modellemeden önce erişim yöntemleri hakkında düşünürsünüz. NoSQL veri tabanları esneklik değil, hız odaklıdır. İlk olarak verilerinize nasıl erişeceğinizi sorar ve ardından verilerinizi erişilecek şekilde modellersiniz.

DynamoDB tablonuzu tasarlamadan önce uygulamanızda veri okumaya ve yazmaya yönelik tüm ihtiyaçlarınızı belgelendirin. Tablonuzu erişim yöntemleriniz için optimize edeceğinizden dolayı kapsayıcı olun ve uygulamanızdaki tüm akışları düşünün.

2. DynamoDB’ye yönelik istek sayısını optimize etme
Uygulamanızın erişim yöntemi ihtiyaçlarını belgelendirdikten sonra tablonuzu tasarlamaya hazır olursunuz. Tablonuzu her erişim yöntemi için DynamoDB’ye yönelik istek sayısını en aza indirecek şekilde tasarlamanız gerekir. Ağ istekleri yavaş olduğundan dolayı ideal olarak her erişim yöntemi için DynamoDB’ye yönelik tek bir istek gerekli olmalıdır. Bu da uygulamanızda bulunacağınız ağ taleplerinin sayısını sınırlamaktadır.

DynamoDB’ye yönelik istek sayısını optimize etmek için bazı temel kavramları anlamanız gerekir:

Birincil anahtarlar
İkincil dizinler
İşlemler

3. İlişkisel bir modeli taklit etmeyin
DynamoDB’de yeni olan kişiler sıklıkla ilişkisel olmayan DynamoDB’nin üzerinde bir ilişkisel model uygulamaya çalışırlar. Bunu yapmayı denerseniz DynamoDB avantajlarından çoğunu kaybedersiniz.

Kişilerin DynamoDB’de denedikleri en yaygın yöntem karşıtı uygulamalar (yinelenen sorunlara etkisiz yanıtlar) şu şekildedir:

  •  Normalleştirme: İlişkisel bir veri tabanında verilerinizi veri fazlalığını ve depolama alanını azaltmak üzere normalleştirebilir ve ardından birden çok farklı tabloyu bir araya getirmek için birleştirmelerden yararlanabilirsiniz. Bununla birlikte, uygun ölçekteki birleştirmeler yavaş ve pahalıdır. Tablonuz büyüdükçe yavaşlayacağı için DynamoDB birleştirmelere olanak vermemektedir.
  • Tablo başına bir veri türü: DynamoDB tablonuz çoğunlukla tek bir tabloda farklı türde verileri içerecektir. Örneğimizde tek bir tabloda Kullanıcı, Oyun ve KullanıcıOyunEşleme varlıkları mevcuttur. İlişkisel bir veri tabanında bu, üç farklı tablo olarak modellenir.
  • Çok sayıda ikincil dizin: Kişiler çoğunlukla ihtiyaç duydukları her bir ek erişim yöntemi için ikincil bir dizin oluşturmayı denerler. DynamoDB şemasızdır ve bu dizinleriniz için de geçerlidir. Tablonuzdaki birden çok veri türünde tek bir ikincil dizini yeniden kullanmak için özniteliklerinizdeki esnekliği kullanın. Bu dizin aşırı yüklenmesi olarak adlandırılır.

Aşağıdaki adımlarda varlık-ilişki diyagramımızı oluşturacak ve erişim yöntemlerimizin eşlemesini önden yapacağız. Bunlar, her zaman DynamoDB’yi kullanırken başvuracağınız ilk adımlar olmalıdır. Ardından, devam eden modüllerde bu erişim yöntemlerini tablo tasarımında uygulayacağız.

Modülü Tamamlama Süresi: 20 Dakika


  • Adım 1: Varlık-ilişki diyagramınızı oluşturma

    Herhangi bir veri modelleme uygulamasının ilk adımı uygulamanızdaki varlıkları ve bunların birbiriyle nasıl ilişkili olduğunu gösterecek bir diyagram oluşturmaktır.

    Uygulamamızda aşağıdaki varlıklar mevcuttur:
    • Kullanıcı
    • Oyun
    • KullanıcıOyunEşleme

    Kullanıcı varlığı uygulamamızdaki bir kullanıcıyı temsil eder. Bir kullanıcı birden çok Oyun varlığı oluşturabilir ve oyun oluşturan kişi hangi eşlemenin oynandığına ve oyunun ne zaman başlayacağına karar verecektir. Bir Kullanıcı birden çok Game varlığı oluşturabilir. Dolayısıyla Kullanıcılar ve Oyunlar arasında bire-çok ilişkisi vardır.

    Son olarak Oyun birden çok Kullanıcı içerebilir ve Kullanıcı zaman içinde birden çok farklı Oyunda oynayabilir. Bu nedenle, Kullanıcılar ve Oyunlar arasında çoka çok ilişkisi vardır. Bu ilişkiyi KullanıcıOyunEşleme varlığıyla gösterebiliriz.

    Bu varlıkların ve ilişkilerin göz önünde bulundurulduğu varlık-ilişki diyagramımız aşağıda gösterilmektedir.

    (Büyütmek için tıklayın)

  • 2. Adım: Kullanıcı profili erişim yöntemlerini göz önünde bulundurma

     Oyunumuzun kullanıcılarının kullanıcı profilleri oluşturmaları gerekir. Bu profiller kullanıcı adı, avatar, oyun istatistikleri ve her bir kullanıcıya yönelik diğer bilgiler gibi verileri içerir. Her kullanıcı oturum açtığında bu kullanıcı profilleri oyunda görüntülenir. Diğer kullanıcılar oyun istatistiklerini ve diğer ayrıntıları incelemek üzere bir kullanıcının profilini görüntüleyebilir.

    Bir kullanıcı oyun oynadıkça oyun istatistikleri kullanıcının oynadığı oyun sayısını, kullanıcının kazandığı oyun sayısını ve kullanıcının öldürme skorunu yansıtacak şekilde güncellenir.

    Bu bilgilere dayanarak üç erişim yöntemimiz mevcuttur:

    •  Kullanıcı profili oluştur (Yaz)
    •  Kullanıcı profilini güncelle (Yaz)
    • Kullanıcı profili edin (Oku)
  • Adım 3: Oyun öncesi erişim yöntemlerini göz önünde bulundurma

    Oyunumuz savaş temelli bir oyundur. Oyuncular belirli bir eşlemede bir oyun oluşturabilir ve diğer oyuncular oyuna katılabilir. Oyuna 50 oyuncu katıldığında oyun başlar ve artık başka bir oyuncu katılamaz.

    Kullanıcılar oynamak için oyun ararken belirli bir eşlemeyi oynamak isteyebilirler. Diğer kullanıcılar eşlemeyi önemsemeyecek ve tüm eşlemelerde açık oyunlara göz atmak isteyecektir.

    Bu bilgilere dayanarak aşağıdaki yedi erişim yöntemimiz mevcuttur:

    • Oyun oluştur (Yaz)
    • Açık oyun bul (Oku)
    • Eşlemeye göre açık oyun bul (Oku)
    • Oyun görüntüle (Oku)
    • Oyunda kullanıcı görüntüle (Oku)
    • Bir kullanıcı için oyuna katıl (Yaz)
    • Oyunu başlat (Yaz)
  • Adım 4: Oyun içi ve oyun sonrası erişim yöntemleri

    Son olarak şimdi de bir oyun sırasında ve sonrasındaki erişim yöntemlerini düşünelim.

    Oyun sırasında oyuncular, kalan son oyuncu olmak amacıyla diğer oyuncuları yenmeye çalışır. Uygulamamız her oyuncunun bir oyun sırasında kaç öldürme skoruna sahip olduğu ile birlikte bir oyunda ne kadar süre kaldığını da izler. Bir oyuncu oyunda kalan son üç oyuncudan biriyse oyuncu oyun için altın, gümüş ve bronz madalya alır.

    Kullanıcılar daha sonra kendi oynadıkları ya da başka oyuncuların oynadığı geçmişteki oyunları incelemek isteyebilir.

    Bu bilgilere dayanarak üç erişim yöntemimiz mevcuttur:

    • Kullanıcı için oyun güncelle (Yaz)
    • Oyunu güncelle (Yaz)
    • Bir kullanıcı için geçmişteki tüm oyunları bul (Oku)

    Oyuna yönelik tüm erişim yöntemlerini artık eşledik. Aşağıdaki modüllerde DynamoDB kullanarak bu erişim yöntemlerini uygularız.

    Planlama aşamasının birkaç yineleme gerektireceğini unutmayın. Uygulamanızın ihtiyacı olan genel bir erişim yöntemleri fikriyle başlayın. Birincil anahtarı, ikincil dizinleri ve öznitelikleri tablonuzda eşleyin. Tekrar başa dönün ve tüm erişim yöntemlerinizin uygulandığından emin olun. Planlama aşamasının tamamlandığından emin olduğunuzda uygulamayla ilerleyin.