2 Aralık 2016 Cuma

Amazon DynamoDb notları


DynamoDb ile çalışmaya ihtiyaç duyulma nedeni Berkeley Db ile çalışmanın zorluğundan kaynaklandı.
Berkeley Db dosyalarını taşıma ve erişim sıkıntısından dolayı gerekli olan veriler Json formatında çıktı alındı ve DynamoDb'ye giriş yapılması denendi.

Sonuç olarak bir kaç milyon kaydı maliyet ve makul sürede giriş yapılmasındaki zorluk nedeniyle ertelendi.
Amazon DataPipeline ile tekrar denenecek.

AWS SDK ile DynamoDb erişimi

AWS cli kurulumu: Installing the AWS Command Line Interface
http://docs.aws.amazon.com/cli/latest/userguide/installing.html

Client credential oluşturulması ve geliştirme ortamında tanımlanması:

Get Your AWS Access Key ID and Secret Key
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.BeforeYouBegin.html#SampleData.BeforeYouBegin.SetupCLI
Set up AWS Credentials for Development
http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
Configuring the AWS Command Line Interface
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html


DynamoDb'ye Bulk veri girişi




AWS SDK for Java
http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-install.html
DynamoDb java sdk

SDK Kullanarak Bulk Veri girişi

Bulk Insert (Batch Write) işleminde dikkat edilecek konular

Dynamo db ücretlendirmesinde kullanılan alana ek olarak okuma ve yazma işlemlerinin miktarı da dikkate alınıyor. (Tüketilen değil ön tanımlı ayrılan kaynak üzerinden)
Dolasıyla genel olarak document db'lerde kullanım yöntemi olan parant-child veriyi aynı satırda tutma işlemi doğru kurgulanmadığında büyük miktarda okuma ve yazma gerekeceğinden maliyetli olacaktır.
Bu nedenle sık erişilen verilen daha küçük boyutlarda, örneğin ayrı bir tabloda tutulması öneriliyor.

Ücret olarak kullanım limitleri:
25 GB of Storage, 25 Units of Read Capacity and 25 Units of Write Capacity – enough to handle up to 200M requests per month with Amazon DynamoDB.
--Dikkat edilmesi gereken, örneğin 3 tane 10 unit yazma yada okuma kapasiteli tablo oluşturulduğunda ücretsiz limit geçilmiş oluyor.


Tablo oluşturmada dikkate alınması gerekenler:
Özellikle iki noktanın üzerinde durulmalı
-Primary key tanımı
-Her bir kayıt üzerinde düşen iş yükünün doğru planlanması

Bir tablodaki kayıt/satır okuma yazma işlemi için öneriler (Hangi durumlarda normalization yapılmalı):

Limit tanımları:

-Batch Write işlemi tek seferde 25 kayıtdan fazla olamaz (25 PutItem). Ve toplam kayıt boyutu 16 MB den büyük olamaz.
-

Kapasite tanımlama:
Tabloyu oluştururken "Provisioned capacity" için ön tanımlı değerler okuma ve yazma için ayrı ayrı 5 unit olarak verilmiş. Bu tabloyu oluştururken veya daha sonra ihtiyaca göre değiştirilebilir.
-Yazma için 1 unit, 1 KB'a kadar kadar olan kayıtlar için saniyede yazma yazma kapasitesi.
--Başka bir deyişle, saniyede 1KB yazma sayısı. Örneğin 10 unit saniyede 1KB lik 10 yazma kapasitesi.
-Eğer kayıt boyutu 1KB altında ise, örn: 375 Byte, 1 KB olarak alınır.
-Okuma ise min 4KB üzerinden hesaplanıyor. Dolasıyla her kayıtın 4KB olduğu varsayımıyla saniyede 20 okuma yapmak istersek 20 unit ayırmamız gerekli.


DynamoDb anlık olarak tanımlı kapasitenin üstüne çıkabiliyor ama sürekli olmasına izin vermiyor. Bu durumda kullanımdan kaynaklı ekstra ücretlendirme olmaz ama uygulama tarafında hataya düşer.

>Farklı senaryolarla batch yazma için maliyet ve süre hesapları araştırması
https://www.linkedin.com/pulse/calculating-dynamodb-provisioned-throughput-shuai-zheng


.Net ile kayıt sorgulama:

Batch operasyonlar:
Batch Writing işleminde limitlerinde aşılmasından dolayı hataya düşülmesi durumunda başarısız olan kayıtlar geri döndürülür ve tekrar işleme konur.

Örnek bir batch write operasyonu:
Write için üst limit 20 unit olarak tanımlanmış. Yazma hızına göre provisioned ve consumed görülüyor. (upload hızı bu durumda etkili)
19:40 2. batch'in başlangıcından itibaren; Ortalama her bir kayıt 8KB boyutunda ve toplamda 25*7=175 kayıt 35 dakika da işlenmiş oluyor.


Sıkça sorulan sorular:


AWS Data Pipeline ile bulk veri girişi

SDK kullanarak veri girişi maliyetler nedeniyle yavaş olduğundan alternatif yöntem olarak olarak AWS Data Pipeline.

AWS Free Tier Amazon Data Pipeline için limit tanımları:
3 low frequency preconditions running on AWS per month*
5 low frequency activities running on AWS per month*

Dökümantasyonda DynamoDb için tanımlı limitlerin bir kısmının kullanıldığından bahsediyor.

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-part1.html


DynamoDb üzerine başkalarının tecrübeleri


https://www.dailycred.com/article/dynamodb-shortcomings-and-work-arounds

DynamoDb den Aurora Db ye geçiş:
https://medium.com/building-timehop/one-year-of-dynamodb-at-timehop-f761d9fe5fa1#.ggbq0o2mu

Hiç yorum yok: