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
| GSI | LSI | |
|---|---|---|
| Keys | PK आणि SK दोन्ही table पेक्षा वेगळे | Table सारखीच PK, वेगळी SK |
| Capacity | स्वतःचं throughput (किंवा on-demand) | Table चं capacity share |
| PK ची size limit | Table 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)
- Table
OrdersLab, PKorderId(S), on-demand. - वेगवेगळ्या orderId आणि emails सह तीन items.
- Indexes → Create index → GSI
EmailIndex, PKemail, SKorderId→ Create. Active होईपर्यंत थांबा. - EmailIndex वर एका email ने Query. Scan+filter compare — मोठ्या tables वर capacity जास्त.
- TTL → attribute
expiresAtenable. now+120 epoch असलेलं item. काही मिनिटांनी nest (TTL लगेच नाही, eventually). - Backups → PITR On (lab optional).
Cleanup
- 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 शिवाय.
घरी करून बघा
- AttendanceLab वर date=PK, studentId=SK GSI; एका दिवशी कोण present होते Query.
- Python/Node मधून पाच orders PutItem आणि email ने Query.
थोडक्यात सांगायचं तर
- Key ने Put/Get/Update/Delete; PK ने Query; मोठ्या tables वर Scan टाळा.
- GSI = नवीन PK/SK; LSI = तीच PK, create वेळी नवीन SK.
- TTL auto-expire; Streams → Lambda; PITR वाचवतो.
- Python, Node, Java, PHP मध्ये तेच SDK ideas.
सराव Tasks
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 करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं लहान table scan करा
का: Scan लहान tables साठी ठीक; मोठ्यांवर टाळा.
काय करायचं: capetownsafari-settings table scan करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Key ने एक item घ्या
का: GetItem सर्वात जलद read: पूर्ण key ने एक item.
काय करायचं: capetownsafari-orders मधून orderId "o-101" असलेला item घ्या.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Item टाका
का: DynamoDB JSON प्रत्येक value चा type दाखवतो: S string, N number.
काय करायचं: capetownsafari-orders मध्ये orderId "o-101" (string) व amount 2500 (number) असलेला item टाका.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम CloudFormation: on-demand table
का: On-demand tables ला capacity planning नको.
काय करायचं: DynamoDB table capetownsafari-orders, partition key orderId (String), PAY_PER_REQUEST.
- Task मधल्या top-level keys पासून सुरू करा.
- Child keys 2 spaces ने indent करा (tabs नकोत).
- प्रत्येक property मध्ये task मधली value भरा.
- 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 करा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम एक item delete करा
का: पूर्ण primary key ने delete करा.
काय करायचं: capetownsafari-orders मधून orderId "o-099" item delete करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Read capacity units
का: Provisioned tables ला योग्य RCU लागतो.
काय करायचं: 6 KB items चे strongly consistent reads, 10/sec. किती RCU?
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
अवघड DynamoDB table बनवा
का: On-demand billing म्हणजे per request पैसे, capacity planning नाही.
काय करायचं: capetownsafari-orders table बनवा, partition key orderId (string), on-demand billing.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Partition key ने query करा
का: Query फक्त जुळणारे items वाचतो, Scan पूर्ण table वाचतो.
काय करायचं: capetownsafari-payments table मध्ये customerId = "c-77" ची query, expression customerId = :c वापरून.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड TTL सुरू करा
का: TTL expired items free मध्ये delete करतो, उदा. OTPs किंवा sessions.
काय करायचं: capetownsafari-otp table वर expiresAt attribute वापरून TTL enable करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.












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