Ravindra BagaleCourses & study guides English

DynamoDB CRUD, Query, Scan, GSI आणि TTL Step by Step

Amazon DynamoDB म्हणजे काय? मध्ये table आणि keys. आता खरं काम: Put, Get, Query vs Scan, GSI आणि LSI, TTL, Streams आणि backups — Python, Node.js, Java आणि PHP code सह.

या chapter मध्ये तुम्ही काय शिकाल

  • PutItem आणि GetItem
  • Query vs Scan आणि खर्च
  • GSI आणि LSI
  • TTL, Streams, backups
  • चार भाषांत code samples

1. गोष्ट: जग scan न करता email ने orders

Orders table ची PK orderId. Support विचारतं: rita@mail.test चे सगळे orders. 50 rows ला Scan चालतो, 5 million ला मरतो. उपाय: PK email, SK createdAt असलेला GSI, मग Query.

2. CRUD basics

हे काय आहे?

  • PutItem — पूर्ण item create किंवा replace.
  • GetItem — पूर्ण primary key ने read.
  • UpdateItem — काही attributes बदला.
  • DeleteItem — key ने काढा.
  • Query — एका PK खालील items (optional SK condition). Indexes efficiently.
  • Scan — table/index फिरून; नंतर filter. तपासलेल्या प्रत्येक item चे पैसे.

Scan महाग का: read billing तपासलेल्या data वर, फक्त परत आलेल्यावर नाही. 99% फेकणारा filter तरी वाचण्याचे पैसे घेतो.

3. GSI vs LSI

GSILSI
KeysPK आणि SK दोन्ही table पेक्षा वेगळेTable सारखीच PK, वेगळी SK
Capacityस्वतःचं throughput (किंवा on-demand)Table चं capacity share
PK ची size limitTable rules शिवाय खास नाहीप्रति partition key value 10 GB
कधीवेगळ्या PK चा नवा access patternतीच PK, दुसऱ्या attribute ने sort
संख्याTable ला 20 GSI पर्यंत (default quota)5 LSI; फक्त table create वेळी

4. TTL, Streams आणि backups

  • TTL: Unix epoch seconds असलेला attribute. वेळ गेल्यावर DynamoDB item background मध्ये free delete. Sessions आणि temp links साठी.
  • Streams: item changes चा time-ordered log. Lambda inserts/updates/deletes process करू शकते.
  • Backups: on-demand backup किंवा PITR. महत्त्वाच्या tables वर PITR on करा.

5. Code: Put आणि Query

Python (boto3)

import boto3
from boto3.dynamodb.conditions import Key
table = boto3.resource("dynamodb", region_name="ap-south-1").Table("OrdersLab")
table.put_item(Item={"orderId": "O1", "email": "rita@mail.test", "total": 499})
# After GSI EmailIndex (PK email, SK orderId):
r = table.query(IndexName="EmailIndex", KeyConditionExpression=Key("email").eq("rita@mail.test"))
print(r["Items"])

Node.js (@aws-sdk/client-dynamodb)

import { DynamoDBClient, PutItemCommand, QueryCommand } from "@aws-sdk/client-dynamodb";
const c = new DynamoDBClient({ region: "ap-south-1" });
await c.send(new PutItemCommand({ TableName: "OrdersLab",
  Item: { orderId: { S: "O1" }, email: { S: "rita@mail.test" }, total: { N: "499" } } }));
const q = await c.send(new QueryCommand({ TableName: "OrdersLab", IndexName: "EmailIndex",
  KeyConditionExpression: "email = :e", ExpressionAttributeValues: { ":e": { S: "rita@mail.test" } } }));
console.log(q.Items);

Java (AWS SDK v2)

DynamoDbClient ddb = DynamoDbClient.builder().region(Region.AP_SOUTH_1).build();
ddb.putItem(PutItemRequest.builder().tableName("OrdersLab")
  .item(Map.of("orderId", AttributeValue.fromS("O1"),
               "email", AttributeValue.fromS("rita@mail.test"),
               "total", AttributeValue.fromN("499"))).build());

PHP (AWS SDK for PHP)

$ddb = new Aws\DynamoDb\DynamoDbClient(['region'=>'ap-south-1','version'=>'latest']);
$ddb->putItem(['TableName'=>'OrdersLab','Item'=>[
  'orderId'=>['S'=>'O1'], 'email'=>['S'=>'rita@mail.test'], 'total'=>['N'=>'499']
]]);

6. Lab: Query, GSI आणि TTL

कसं करायचं (step by step)

  1. Table OrdersLab, PK orderId (S), on-demand.
  2. वेगवेगळ्या orderId आणि emails सह तीन items.
  3. Indexes → Create index → GSI EmailIndex, PK email, SK orderId → Create. Active होईपर्यंत थांबा.
  4. EmailIndex वर एका email ने Query. Scan+filter compare — मोठ्या tables वर capacity जास्त.
  5. TTL → attribute expiresAt enable. now+120 epoch असलेलं item. काही मिनिटांनी nest (TTL लगेच नाही, eventually).
  6. Backups → PITR On (lab optional).

Cleanup

  1. OrdersLab delete (GSIsही जातात). विचारलं तर PITR आधी off.

7. Interview questions

प्र. Query vs Scan?

Query एका PK चे items (efficient). Scan table/index वाचून filter (scale वर महाग).

प्र. GSI कधी?

Table PK नसलेल्या partition key ने Query करायचं असेल.

प्र. LSI कधी?

तीच PK, वेगळा sort; table create वेळी; प्रति PK 10 GB.

प्र. TTL म्हणजे?

Epoch-seconds attribute; कालबाह्य items background मध्ये free delete.

प्र. Streams + Lambda का?

प्रत्येक change वर प्रतिक्रिया — OpenSearch sync, email, aggregates — polling शिवाय.

घरी करून बघा

  1. AttendanceLab वर date=PK, studentId=SK GSI; एका दिवशी कोण present होते Query.
  2. Python/Node मधून पाच orders PutItem आणि email ने Query.

थोडक्यात सांगायचं तर

  1. Key ने Put/Get/Update/Delete; PK ने Query; मोठ्या tables वर Scan टाळा.
  2. GSI = नवीन PK/SK; LSI = तीच PK, create वेळी नवीन SK.
  3. TTL auto-expire; Streams → Lambda; PITR वाचवतो.
  4. Python, Node, Java, PHP मध्ये तेच SDK ideas.

सराव Tasks

या scenario बद्दल

Cape Town Safaris हा केप टाऊन मधला पर्यटन व्यवसाय आहे. Thabo Nkosi त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे ZAR मध्ये मोजले जातात आणि AWS resources af-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 11

सोपं Table describe करा

का: Table चे keys, indexes, item count व status पाहा.

काय करायचं: capetownsafari-orders table describe करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं लहान table scan करा

का: Scan लहान tables साठी ठीक; मोठ्यांवर टाळा.

काय करायचं: capetownsafari-settings table scan करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Key ने एक item घ्या

का: GetItem सर्वात जलद read: पूर्ण key ने एक item.

काय करायचं: capetownsafari-orders मधून orderId "o-101" असलेला item घ्या.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Item टाका

का: DynamoDB JSON प्रत्येक value चा type दाखवतो: S string, N number.

काय करायचं: capetownsafari-orders मध्ये orderId "o-101" (string) व amount 2500 (number) असलेला item टाका.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम CloudFormation: on-demand table

का: On-demand tables ला capacity planning नको.

काय करायचं: DynamoDB table capetownsafari-orders, partition key orderId (String), PAY_PER_REQUEST.

कसं करायचं:
  1. Task मधल्या top-level keys पासून सुरू करा.
  2. Child keys 2 spaces ने indent करा (tabs नकोत).
  3. प्रत्येक property मध्ये task मधली value भरा.
  4. Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.

मध्यम एका table ला Lambda access

का: Function ला फक्त स्वतःच्या table मध्ये वाचणं/लिहिणं लागतं.

काय करायचं: फक्त arn:aws:dynamodb:af-south-1:122836786824:table/capetownsafari-orders वर dynamodb:GetItem, dynamodb:PutItem, dynamodb:Query allow करा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

मध्यम एक item delete करा

का: पूर्ण primary key ने delete करा.

काय करायचं: capetownsafari-orders मधून orderId "o-099" item delete करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Read capacity units

का: Provisioned tables ला योग्य RCU लागतो.

काय करायचं: 6 KB items चे strongly consistent reads, 10/sec. किती RCU?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

अवघड DynamoDB table बनवा

का: On-demand billing म्हणजे per request पैसे, capacity planning नाही.

काय करायचं: capetownsafari-orders table बनवा, partition key orderId (string), on-demand billing.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Partition key ने query करा

का: Query फक्त जुळणारे items वाचतो, Scan पूर्ण table वाचतो.

काय करायचं: capetownsafari-payments table मध्ये customerId = "c-77" ची query, expression customerId = :c वापरून.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड TTL सुरू करा

का: TTL expired items free मध्ये delete करतो, उदा. OTPs किंवा sessions.

काय करायचं: capetownsafari-otp table वर expiresAt attribute वापरून TTL enable करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

उजळणी card: Put, Get, Update, Delete. SQL server शिवाय CRUD हवं. Put/Get/Update/DeleteItem primary key वापरतात. Table ARN वर IAM; Lambda SDK ने call. POST noteId; GET; DELETE.
उजळणी card: Put, Get, Update, Delete · PNG download करा · Card page उघडा
उजळणी card: Query vs Scan. Scan सोपं वाटतं आणि bill shock देतं. Query = PK (+SK). Scan = table वाचतो; examined items चे पैसे. Query येईल असा key. Scan फक्त छोट्या labs/admin. user 7 च्या notes → Query. Whole table Scan → महाग.
उजळणी card: Query vs Scan · PNG download करा · Card page उघडा
उजळणी card: GSI आणि LSI. Launch नंतर दुसरा access pattern येतो. GSI = नवीन PK/SK. LSI = तोच PK, वेगळा SK; table सोबत. GSI email-index; email ने Query, Scan नाही. Login साठी email → email वर GSI.
उजळणी card: GSI आणि LSI · PNG download करा · Card page उघडा
उजळणी card: TTL, Streams आणि backups. जुने sessions आणि change feeds ना automation; EC2 cron नाही. TTL epoch ने expire. Streams → Lambda. PITR backups. expiresAt वर TTL; Streams → नवीन Lambda. Magic-link tokens 15 min नंतर TTL ने जातात.
उजळणी card: TTL, Streams आणि backups · PNG download करा · Card page उघडा
तुलना: Query vs Scan. Query: एका partition key चे items (optional sort range). Scan: शक्यतो संपूर्ण table.
तुलना: Query vs Scan · PNG download करा · Card page उघडा
तुलना: GSI vs LSI. GSI: नवीन partition key (+ optional sort). LSI: तोच partition key, वेगळा sort key.
तुलना: GSI vs LSI · PNG download करा · Card page उघडा
तुलना: PutItem vs UpdateItem. PutItem: पूर्ण item लिहितो (तोच key असेल तर replace). UpdateItem: फक्त सांगितलेले attributes बदलतो.
तुलना: PutItem vs UpdateItem · PNG download करा · Card page उघडा
तुलना: TTL expiry vs DeleteItem. TTL expiry: Expire झालेले DynamoDB background मध्ये काढतं. DeleteItem: तुमचा code key ने लगेच delete.
तुलना: TTL expiry vs DeleteItem · PNG download करा · Card page उघडा
मुलाखत card: Scan Query पेक्षा महाग का?. Examined items चे पैसे; फक्त returned नाही. Filters read नंतर; keys सारखे RCU वाचवत नाहीत. 10 GB table Scan → 3 rows साठीही ~10 GB read.
मुलाखत card: Scan Query पेक्षा महाग का? · PNG download करा · Card page उघडा
मुलाखत card: GSI कोणती problem सोडवतो?. Table primary key नसलेल्या attribute ने Query. दुसऱ्या access pattern साठी Scan टाळतो. orderId ने orders; GSI customerId+createdAt = my orders.
मुलाखत card: GSI कोणती problem सोडवतो? · PNG download करा · Card page उघडा
मुलाखत card: DynamoDB TTL कसं काम करतं?. Unix epoch seconds असलेला number attribute; expire झालेले नंतर background delete. Exact alarm clock नाही — eventually delete. 15-min tokens: expiresAt = now+900.
मुलाखत card: DynamoDB TTL कसं काम करतं? · PNG download करा · Card page उघडा
मुलाखत card: DynamoDB Streams कशासाठी?. Change data capture: insert/update/delete वर Lambda. Search index, audit, sync. New note → Stream → OpenSearch.
मुलाखत card: DynamoDB Streams कशासाठी? · PNG download करा · Card page उघडा

अजून cards: Ravi Sir's Cards.