AWS MySQL RDS - AWS DynamoDB [kapalı]


109

MySQL'i bir süredir kullanıyorum ve yapısı ve SQL Sorguları vb. İle rahatım.

Şu anda AWS'de yeni bir sistem oluşturuyor ve DynamoDB'ye bakıyorum. Şu anda bunun hakkında çok az şey biliyorum.

Biri diğerinden daha mı iyi?

DynamoDB'nin avantajı nedir?

MySQL sorgularından vb. bu düz stil DB'ye geçiş nasıldır?

Yanıtlar:


66

Bu konuda AWS açıklama okuyabilirsiniz burada .

Kısacası, esas olarak Arama sorgularınız varsa (ve Birleştirme sorgularınız yoksa), DynamoDB (ve diğer NoSQL DB) daha iyidir. Çok fazla veriyi işlemeniz gerekiyorsa , MySQL (ve diğer RDBMS) kullanırken sınırlı kalacaksınız.

MySQL sorgularınızı veya veri şemanızı yeniden kullanamazsınız, ancak NoSQL öğrenmek için çaba harcarsanız, araç kutunuza önemli bir araç ekleyeceksiniz. DynamoDB'nin en basit çözümü verdiği birçok durum vardır.


262

Gerçekten DynamoDB ve MySQL elma ve portakaldır. DynamoDB, bir NoSQL depolama katmanıdır, MySQL ise ilişkisel depolama için kullanılır. Uygulamanızın gerçek ihtiyaçlarına göre ne kullanacağınızı seçmelisiniz. Aslında, bazı uygulamalar her ikisi de kullanılarak iyi bir şekilde sunulabilir.

Örneğin, tek bir anahtara veya bir anahtar / aralık kombinasyonuna göre aranabilen ilişkisel bir şemaya (ağaç yapıları, şemasız JSON gösterimleri vb.) Uygun olmayan verileri depoluyorsanız, o zaman DynamoDB ( veya başka bir NoSQL mağazası) muhtemelen en iyi seçeneğiniz olacaktır.

Verileriniz için ilişkisel bir yapıya iyi bir şekilde uyan iyi tanımlanmış bir şemanız varsa ve verileri birkaç farklı yolla sorgulama esnekliğine ihtiyacınız varsa (tabii ki gerektiğinde dizinler eklemek), o zaman RDS daha iyi bir çözüm olabilir .

DynamoDB'yi bir NoSQL deposu olarak kullanmanın ana yararı, kümelenmiş bir veri deposunu yönetme konusunda endişelenmenize gerek kalmadan, ihtiyacınız olan her düzeyde garantili okuma / yazma verimine sahip olmanızdır. Dolayısıyla, uygulamanız saniyede 1000 okuma / yazma gerektiriyorsa, DynamoDB tablonuzu bu verimlilik düzeyi için hazırlayabilirsiniz ve temeldeki altyapı hakkında gerçekten endişelenmenize gerek kalmaz.

RDS, altyapının kendisi hakkında endişelenmenize gerek kalmaması gibi aynı avantajlara sahiptir, ancak en büyük bulut sunucusu boyutunun artık yetişemeyeceği noktaya kadar önemli sayıda yazma işlemi yapmanız gerekecek olursa, seçenekler (okuma kopyalarını kullanarak okumalar için yatay olarak ölçekleyebilirsiniz).

Güncellenen not: DynamoDb artık global ikincil indekslemeyi desteklemektedir, bu nedenle artık hash veya karma ve aralık anahtarlarının kombinasyonu dışındaki veri alanlarında optimize edilmiş aramalar gerçekleştirme olanağına sahipsiniz.


10
Cevabınızı 100'e yükseltebilseydim, yapardım.
Salil

Bir bilgi modelindeki bazı problemler, bir NoSQL türü uygulamaya eğilimlidir. Bu tür problemlerle karşılaştığınızda, kendinize bir NoSQL Db'ye sahip olmanın mantıklı olup olmayacağını sorun. Bu varlıklardan bazıları şunlardır: Günlükler, Zaman serisi verileri, Sosyal Ağlar, İçerik Yönetimi, Ürün Kataloğu vb.
user398039

150

Tüm DynamoDB tablolarımızı RDS MySQL'e taşıdık.

Belirli görevler için DynamoDB'yi kullanmak mantıklı olsa da, DynamoDB üzerine yeni bir sistem oluşturmak gerçekten kötü bir fikir. En iyi hazırlanmış planlar vb., DB'nizden her zaman ekstra esnekliğe ihtiyacınız vardır.

DynamoDB'den geçiş yapma nedenlerimiz:

  1. İndeksleme - Yeni bir tablo oluşturmadan anında anahtarları değiştirmek veya eklemek imkansızdır.
  2. Sorgular - Veri sorgulama son derece sınırlıdır. Özellikle dizine eklenmemiş verileri sorgulamak istiyorsanız. Birleştirmeler elbette imkansızdır, bu nedenle kod / önbellek katmanınızdaki karmaşık veri ilişkilerini yönetmeniz gerekir.
  3. Yedekleme - Böylesine sıkıcı bir yedekleme prosedürü, RDS'nin kaygan yedeklemesine kıyasla hayal kırıklığı yaratan bir sürprizdir.
  4. GUI - kötü UX, sınırlı arama, eğlence yok.
  5. Hız - Tepki süresi RDS'ye kıyasla sorunludur. Kendinizi, RDS'nin dahili önbelleğe alma işlemi için yerleşmiş olacağınız yerlerde telafi etmek için ayrıntılı bir önbelleğe alma mekanizması oluştururken buluyorsunuz.
  6. Veri Bütünlüğü - Akışkan veri yapısı kavramı başlangıçta kulağa hoş gelse de, verilerinizin bir kısmı "sabit" olması daha iyidir. Güçlü yazım, küçük bir hata veri tabanınızı yok etmeye çalıştığında bir nimettir. DynamoDB ile her şey mümkündür ve aslında yanlış gidebilecek her şey yapar.

Şimdi DynamoDB'yi bazı sistemler için yedek olarak kullanıyoruz ve eminim gelecekte bunu belirli, iyi tanımlanmış görevler için kullanacağız. Kötü bir DB değil, sadece çekirdek sisteminizin% 100'üne hizmet edecek DB değil.

Avantajlara gelince, Ölçeklenebilirlik ve Dayanıklılık diyebilirim. İnanılmaz ve şeffaf bir şekilde ölçeklenir ve (bir nevi) her zaman yukarıdadır. Bunlar gerçekten harika özellikler, ancak olumsuz yönleri hiçbir şekilde telafi etmiyorlar.


11
Çok özel artılar / eksiler. Harika cevap
stevendesu

10
Bunların bir kısmı güncel değil. Örneğin, 1 artık doğru değil.
mbroshi

2
Çok iyi belgelenmiş cevap. Bununla birlikte, bu endişelerden bazıları nadir kullanım durumlarına özgü olabilir. Sayı 2 - "Birleştirmeler elbette imkansızdır" - DynamoDB veri yapılarının herhangi bir ilişkisi olmamalıdır - nokta. Tablo tamamen normalize edilmemelidir. Bu, bazı özelliklerin kopyalanacağı anlamına gelir. Bu tür durumlarda, bir dinamo tetikleyicisi veya koşullu yazmalar kullanın. Kullanıcılar koşullu yazma gecikmesiyle başa çıkamazsa, uygulama ile dinamo arasına bir SQS kuyruğu yerleştirin. Ayrıca, nokta sayısı 6 o DynamoDB yönettiği "bütünlük" konulu bir kuşku duyulması bu noktaya misnamed - o niyeti olmayabilir ...
doles

1
Dinamo, sorgular sırasında hala esneklikten yoksundur. GSI çok büyük bir yardım olsa da, verilerimizi RDBMS şemasıyla daha iyi modelleyebiliriz.
Pavan

1
DynamoDB içerisindeki sorgu yeteneklerinin birkaç "kazaya" sahip olduğunu ekleyeceğim. Örneğin, birincil anahtarınız yalnızca bir karma içeriyorsa, bir Dynamo sorgusu yalnızca 1 girişi döndürebilir, sorgu sırasında yalnızca karma anahtar için bir aralık sağlayamazsınız veya belirli karma değerini bilmeden de sorgulayamazsınız. aradığınız öğe. BatchGet, hangisi önce gelirse, istekte yalnızca 100 kabul, 1 MB toplam yanıt boyutu veya 1 MB toplam sorgu boyutu kabul eder. Tarama size esnek arama sağlar, ancak oldukça verimsiz ve maliyetlidir, filtrelemeden önce tüm tabloyu döndürür.
Brooks

12

DynamoDB'yi kullanırken, DynamoDB'deki materyallerin / kayıtların 400KB ile sınırlı olduğunu da bilmelisiniz (Bkz. DynamoDB Limitleri ). Birçok kullanım durumu için bu işe yaramayacaktır. Yani DynamoDB birkaç şey için iyi olacak ama hepsi için değil. Aynı diğer NoSQL veritabanı için de geçerli.

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.