DynamoDB'de birden çok tablo ne zaman kullanılır?


11

DyanmoDB en iyi uygulamaları aşağıdakileri açıkça ortaya koymaktadır:

Bir DynamoDB uygulamasında mümkün olduğunca az sayıda tablo bulundurmalısınız. Çoğu iyi tasarlanmış uygulama için tek bir tablo gerekir.

DyanmoDB ile ilgili gördüğüm hemen hemen her öğreticinin çok masalı bir tasarıma sahip olduğunu eğlenceli buluyorum.

Fakat bu pratikte ne anlama geliyor?

Üç ana varlık içeren basit bir uygulamayı ele alalım: Kullanıcılar, Projeler ve Belgeler. Bir Kullanıcının birden fazla projesi vardır ve bir Projenin birden çok Belgesi olabilir. Genellikle bir kullanıcının Projeleri'ni ve bir Proje Belgeleri'ni sorgulamamız gerekir. Sayı yazım sayısını önemli bir farkla okur.

Saf bir öğreticinin tablo tasarımı üç tablo kullanır:

Users
Hash key
user-id

Projects
Hash key       Global Index
project-id     user-id

Documents
Hash key       Global Index
document-id    project-id

Kolayca çökebilir Projectve Documenttek bir Documentstabloya girebiliriz :

Documents
Hash key    Sort key        Global Index
project-id  document-id     user-id

Ama neden orada dursun? Neden tek bir masa hepsini yönetmiyor? Yana Userher şeyin köküdür ...

Users
Hash key    Sort key
user-id     aspect
---------   ---------
foo         user                   email: foo@bar.com ...
foo         project:1              title: "The Foo Project"
foo         project:1:document:2   document-id: 2     ...

Ardından, emailkullanıcı kaydı aramaları alanında bir Global Index ve document-iddoğrudan belge aramaları alanında başka bir Endeksimiz olur.

Bu şekilde mi çalışması gerekiyor? Bu kadar çılgınca farklı türdeki verileri aynı tabloya atmak yasal mı? Yoksa ikinci, iki tablolu tasarım daha iyi bir yaklaşım mı?

Hangi noktada ikinci bir tablo eklemek doğru olur?

Yanıtlar:


7

Evet, söylediklerinizi yapmak yasaldır. Her ikisi de aslında. Burada bulunmayan bazı değişkenler vardır ve veri modelinin nasıl yapılması gerektiğine rehberlik edebilir.

  1. Bu uygulama ve veri modeli ile ne tür bir ölçek elde etmek istiyorsunuz?
  2. Uygulamanın erişim kalıpları arasında, bu kalıplar arasındaki okuma oranı nedir? Hangisi diğerlerinden daha çok vurulur yani.
  3. Listelediğiniz erişim kalıplarından saniyede kaç kez gerçekleştiriliyorlar?

Örneğin, tüm okumaların% 80'i bir projedeki kullanıcıları bulmak istiyorsa ve bunun 30.000 / sn olması gerekiyorsa, ancak uygulamanızda o kadar fazla insan bu adımı daha ileriye taşımayacak ve projeler için belgeleri bulamayacaksa, toplam okumaların% 20'sidir ve yalnızca 2000 okuma / sn olabilir. Bunlardan ilki uygulamanızın "etkin yoludur" ve bunun için optimize edilmesi gerekir.

Ayrıca bu şekilde düşünün, DynamoDB gibi ilişkisel olmayan bir veritabanı ile, uygulamanızın verileri nasıl kullandığı ve eriştiği için optimize edebilirsiniz ve veritabanında nasıl depolandığı hakkında çok endişelenmeniz gereken ilişkisel veritabanı gibi değil.


Re: kaçınılmaz görüşmelerden birinde, üst düzey bir mühendis kabaca aşağıdakileri ifade etti - geçmişte depolama, hesaplamadan nispeten daha pahalıydı; bu yüzden depolama için optimize ettik (İlişkisel DB) ama şimdi depolama kir ucuz! Hesaplama nispeten daha pahalıdır; hesaplama için optimize ediyoruz (NoSQL, okumak için optimize edildi)
Gaz_Edge

Kabul ediyorum, NoSql Verilerimi Uygulama gereksinimime göre yönetmeme izin veriyor. Her şey veri okuma ve değiştirme arasındaki oranla ilgilidir.
Anurag pareek
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.