From 1c31b6222f8f49b1069f9bcf12fae9e500cb0da1 Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Mon, 10 Jun 2024 18:15:04 +0100 Subject: [PATCH] Autosave: 2024-06-10 18:15:04 --- .zk/notebook.db | Bin 3481600 -> 3481600 bytes zk/DynamoDB.md | 73 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/.zk/notebook.db b/.zk/notebook.db index 6445ac3e99b655c12557da3e19995743e520c474..a20c16d8f79df2b7623c4b7794ce16192e12fc61 100644 GIT binary patch delta 9241 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 delta 9573 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 diff --git a/zk/DynamoDB.md b/zk/DynamoDB.md index cca6c84..c18ce84 100644 --- a/zk/DynamoDB.md +++ b/zk/DynamoDB.md @@ -43,15 +43,72 @@ There are two types of primary key available: As well as the index provided by the primary key, you can set one or more **secondary indices**. A secondary index lets you query the data in the table -using an alternate key. The main type of secondary index is a _global secondary -index_. GSIs are useful for querying data that needs to be accessed using -non-primary key attributes. For example, if you have a Users table with UserID -as the primary key but often need to fetch users by their Email, a GSI on Email -would be appropriate. +using an alternate key. -**Global secondary indices** span the entire table allowing you to query accross -all partition keys whereas local secondary indices have the same partition key -as the +A **global secondary index** is useful for querying data that needs to be +accessed using non-primary key attributes. For example, if you have a Users +table with UserID as the primary key but often need to fetch users by their +Email, a GSI on Email would be appropriate. + +There are also **local secondary indices** but I don't understand the +difference. + +## Real example + +Below is a specification of the DynamoDB table I am using for my time-entries +project: + +```json +{ + "TableName": "TimeEntries", + "AttributeDefinitions": [ + { + "AttributeName": "activity_start_end", + "AttributeType": "S" + }, + { + "AttributeName": "start", + "AttributeType": "S" + }, + { + "AttributeName": "activity_type", + "AttributeType": "S" + } + ], + "KeySchema": [ + { + "AttributeName": "activity_start_end", + "KeyType": "HASH" + } + ], + "GlobalSecondaryIndexes": [ + { + "IndexName": "StartIndex", + "KeySchema": [ + { + "AttributeName": "start", + "KeyType": "HASH" + }, + { + "AttributeName": "activity_type", + "KeyType": "RANGE" + } + ], + "Projection": { + "ProjectionType": "ALL" + }, + "ProvisionedThroughput": { + "ReadCapacityUnits": 1, + "WriteCapacityUnits": 1 + } + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 1, + "WriteCapacityUnits": 1 + } +} +``` ## Usage