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öntemlerini uygulamanızda sağlayabilirsiniz.

NoSQL (ilişkisel olmayan) veritabanları 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 yöntemlerine odaklanma

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

İlişkisel veritabanlarında, varlıklarınızı doğrudan tablolara koyacak ve yabancı anahtarları kullanarak ilişkileri belirteceksiniz. İlişkisel bir veritabanı, veri tablolarınızı uygulamaya koyduktan sonra ihtiyaç duyduğunuz şekilde verilerin geri döndürülmesi 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. Erişim yöntemleriniz için tablonuzu optimize edeceğinizden, kapsayıcı olun ve uygulamanızdaki tüm akışları düşünün.

2. DynamoDB'ye yapılan istek sayısı için 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 yapılan istek sayısı için optimize etmek üzere bazı temel kavramları anlamanız gerekir:

3. İlişkisel bir modeli taklit etmeme

DynamoDB'de yeni olan kişiler sıklıkla ilişkisel olmayan DynamoDB'nin üzerinde bir ilişkisel model uygulamaya çalışır. Bunu yapmayı denerseniz, DynamoDB avantajlarının çoğunu kaybedersiniz.

İnsanların DynamoDB ile denedikleri en yaygın anti yöntemler şunlardır:

  • Normalleştirme: İlişkisel bir veritabanında, yedekliliği ve depolama alanını azaltmak üzere verilerinizi normalleştirebilir ve ardından birden çok farklı tabloyu bir araya getirmek için birleştirmelerden yararlanabilirsiniz. Ancak 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. Kullanacağımız örnekte tek bir tabloda Kullanıcı, Arkadaş, Fotoğraf ve Tepki varlıkları olacaktır. İlişkisel bir veritabanında bu, dört farklı tablo olarak modellenir.
  • Çok sayıda ikincil dizin: İnsanlar çoğunlukla ihtiyaç duydukları her bir ek erişim yöntemi için ikincil bir dizin oluşturmayı dener. 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 planlamasını önceden yapacağız. Bunlar her zaman, DynamoDB'yi kullanırken başvurulacak ilk adımlar olmalıdır. Ardından, devam eden modüllerde bu erişim yöntemlerini tablo tasarımımızda 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ı
    • Fotoğraf
    • Tepki
    • Arkadaşlık

    Bir Kullanıcının birçok Fotoğrafı olabilir ve bir Fotoğrafta birçok Tepki bulunabilir. Son olarak bir Kullanıcı, birden fazla Kullanıcıyı takip edebileceği ve birden fazla Kullanıcı tarafından takip edilebileceği için Arkadaşlık varlığı, Kullanıcılar arasında çoğa çok bir ilişkiyi temsil eder.

    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.

    Module_2_Step_1

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

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

    Artık varlık-ilişki diyagramımız olduğuna göre, varlıklarımızla ilgili erişim yöntemlerini göz önünde bulundurun. Kullanıcılarla başlayalım.

    Mobil uygulama kullanıcılarımızın kendi kullanıcı profillerini oluşturması gerekecektir. Bu profillerde kullanıcı adı, profil resmi, konum, mevcut durum ve belirli bir kullanıcının ilgi alanları gibi bilgiler bulunur.

    Kullanıcılar diğer kullanıcıların profillerine göz atabilir. Bir kullanıcı, takip edilecek kadar ilgi çekici olup olmadığını görmek veya sadece mevcut bir arkadaş hakkında daha fazla bilgi edinmek için başka bir kullanıcının profilini inceleyebilir.

    Bir kullanıcı, zaman içerisinde yeni bir durumu göstermek veya değişen ilgi alanlarını güncellemek için profilini güncellemek isteyecektir.

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

    • Kullanıcı profili oluşturma (Yazma)
    • Kullanıcı profilini güncelle (Yazma)
    • Kullanıcı profili edinme (Okuma)
       
  • 3. Adım: Oyun öncesi erişim yöntemlerini göz önünde bulundurma

    Şimdi, fotoğraflarla ilgili erişim yöntemlerine bakalım.

    Mobil uygulamamız, kullanıcıların Instagram veya Snapchat'teki gibi fotoğraf yüklemelerine ve arkadaşlarıyla paylaşmalarına olanak sağlar. Kullanıcılar bir fotoğraf yüklediğinde fotoğrafın yüklenme zamanı ve dosyanın içerik teslim ağınızdaki (CDN) yeri gibi bilgileri depolamanız gerekir.

    Kullanıcılar fotoğraf yüklemediğinde ise arkadaşlarının fotoğraflarına göz atmak isteyecektir. Bir arkadaşlarının profilini ziyaret ederlerse, en yeni fotoğraflar önce gösterilecek şekilde bu kullanıcının fotoğraflarını görmelidirler. Bir fotoğrafı çok beğenirlerse, önceden tanımlanmış dört tepkiden birini (kalp, gülen yüz, beğenme veya güneş gözlüğü) kullanarak fotoğrafa "tepki verebilirler". Bir fotoğraf görüntülendiğinde, fotoğrafa verilen mevcut tepkiler gösterilmelidir.

    Bu bölümde, aşağıdaki erişim yöntemlerimiz yer alır:

    • Kullanıcı için fotoğraf yükleme (Yazma)
    • Kullanıcı için son fotoğrafları görüntüleme (Okuma)
    • Bir fotoğrafa tepki ver (Yazma)
    • Fotoğraf ve tepkileri görüntüleme (Okuma)
       
  • 4. Adım: Oyun içi ve oyun sonrası erişim yöntemleri

    Son olarak arkadaşlıkla ilgili erişim yöntemlerini inceleyelim.

    Birçok popüler mobil uygulamanın sosyal ağ yönü bulunur. Arkadaşlarınızı takip edebilir, arkadaşlarınızın etkinlikleriyle ilgili güncellemeleri görüntüleyebilir ve takip etmek isteyebileceğiniz diğer arkadaşlarla ilgili öneriler alabilirsiniz.

    Uygulamanızda arkadaşlık, Twitter gibi tek yönlü bir ilişkidir. Bir kullanıcı başka bir kullanıcıyı takip etmek isteyebilir ve bu kullanıcı da takip eden kullanıcıyı takip edebilir. Uygulamamız için, bir kullanıcıyı takip eden kullanıcıları "takipçiler" ve bir kullanıcının takip ettiği kullanıcıları ise "takip edilenler" olarak adlandıracağız.

    Bu bilgilere göre aşağıdaki erişim yöntemlerimiz mevcuttur:

    • Kullanıcı takip etme (Yazma)
    • Kullanıcı için takipçileri görüntüle (Okuma)
    • Kullanıcı için takip edilenleri görüntüleme (Okuma)

    Artık mobil uygulamamızla ilgili tüm erişim yöntemlerimizi planladık. Sonraki modüllerde, DynamoDB’yi kullanarak bu erişim yöntemlerini uygulayacağı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 tablonuzdaki öznitelikleri planlayın. Tekrar başa dönün ve tüm erişim yöntemlerinizin sağlandığından emin olun. Planlama aşamasının tamamlandığından emin olduktan sonra uygulama aşamasına geçin.