What Is Amazon DynamoDB?
Amazon DynamoDB is a fully managed NoSQL database service that provides fast and predictable performance with seamless scalability.
NoSQL is a term used to describe nonrelational database systems that are highly available, scalable, and optimized for high performance. Instead of the relational model, NoSQL databases (like DynamoDB) use alternate models for data management, such as key-value pairs or document storage. For more information, see http://aws.amazon.com/nosql.
1-Core Components of Amazon DynamoDB
In DynamoDB, tables, items, and attributes are the core components that you work with. A table is a collection of items, and each item is a collection of attributes. DynamoDB uses primary keys to uniquely identify each item in a table and secondary indexes to provide more querying flexibility. You can use DynamoDB Streams to capture data modification events in DynamoDB tables.
The following are the basic DynamoDB components:
- Tables – Similar to other database systems, DynamoDB stores data in tables. A table is a collection of data. For example, see the example table called People that you could use to store personal contact information about friends, family, or anyone else of interest. You could also have a Cars table to store information about vehicles that people drive.
- Items – Each table contains zero or more items. An item is a group of attributes that is uniquely identifiable among all of the other items. In a People table, each item represents a person. For a Cars table, each item represents one vehicle. Items in DynamoDB are similar in many ways to rows, records, or tuples in other database systems. In DynamoDB, there is no limit to the number of items you can store in a table.
- Attributes – Each item is composed
of one or more attributes. An attribute is a fundamental data
element, something that does not need to be broken down any further. For example,
an item
in a People table contains attributes called
PersonID, LastName,
FirstName, and so on. For a Department table,
an item might have attributes such as DepartmentID,
Name, Manager, and so on. Attributes in DynamoDB
are similar in many ways to fields or columns in other database systems.
Primary Key
When you create a table, in addition to the table name, you must specify the primary key of the table. The primary key uniquely identifies each item in the table, so that no two items can have the same key.
DynamoDB supports two different kinds of primary keys:
Partition key – A simple primary key, composed of one attribute known as the partition key.
DynamoDB uses the partition key's value as input to an internal hash function. The output from the hash function determines the partition (physical storage internal to DynamoDB) in which the item will be stored.
In a table that has only a partition key, no two items can have the same partition key value.
The People table described in Tables, Items, and Attributes is an example of a table with a simple primary key (PersonID). You can access any item in the People table directly by providing the PersonId value for that item.
Partition key and sort key – Referred to as a composite primary key, this type of key is composed of two attributes. The first attribute is the partition key, and the second attribute is the sort key.
DynamoDB uses the partition key value as input to an internal hash function. The output from the hash function determines the partition (physical storage internal to DynamoDB) in which the item will be stored. All items with the same partition key value are stored together, in sorted order by sort key value.
In a table that has a partition key and a sort key, it's possible for two items to have the same partition key value. However, those two items must have different sort key values.
Each primary key attribute must be a scalar (meaning that it can hold only a single value). The only data types allowed for primary key attributes are string, number, or binary. There are no such restrictions for other, non-key attributes.
DynamoDB Streams
DynamoDB Streams is an optional feature that captures data modification events in DynamoDB tables. The data about these events appear in the stream in near-real time, and in the order that the events occurred.
Each event is represented by a stream record. If you enable a stream on a table, DynamoDB Streams writes a stream record whenever one of the following events occurs:
- A new item is added to the table: The stream captures an image of the entire item, including all of its attributes.
- An item is updated: The stream captures the "before" and "after" image of any attributes that were modified in the item.
- An item is deleted from the table: The stream captures an image of the entire item before it was deleted.
Each stream record also contains the name of the table, the event timestamp, and
other metadata. Stream records have a lifetime of 24 hours; after that, they are
automatically removed from the stream. You can use DynamoDB Streams together with AWS Lambda to create a
trigger—code that runs automatically whenever an
event of interest appears in a stream. For example, consider a
Customers table that contains customer information for a
company. Suppose that you want to send a "welcome" email to each new customer. You
could enable a stream on that table, and then associate the stream with a Lambda
function. The Lambda function would run whenever a new stream record appears, but
only process new items added to the Customers table. For any
item that has an EmailAddress
attribute, the Lambda function would
invoke Amazon Simple Email Service (Amazon SES) to send an email to that address.
Transactions
Transactions provide atomicity, consistency, isolation, and durability (ACID) enabling you to maintain data correctness in your applications more easily.
You can use PartiQL - A SQL-Compatible Query Language for Amazon DynamoDB, to perform transactional operations or you can use DynamoDB’s classic CRUD APIs that separates each operation into a distinct API call.
Data Types
DynamoDB supports many different data types for attributes within a table. They can be categorized as follows:
- Scalar Types – A scalar type can represent exactly one value. The scalar types are number, string, binary, Boolean, and null.
- Document Types – A document type can represent a complex structure with nested attributes, such as you would find in a JSON document. The document types are list and map.
- Set Types – A set type can represent multiple scalar values. The set types are string set, number set, and binary set.
List
A list type attribute can store an ordered collection of values. Lists are
enclosed in square brackets: [ ... ]
for examle:
FavoriteThings: ["Cookies", "Coffee", 3.14159]
Map
A map type attribute can store an unordered collection of name-value
pairs. Maps are enclosed in curly braces: { ... }
, for example:
{
Day: "Monday",
UnreadEmails: 42,
ItemsOnMyDesk: [
"Coffee Cup",
"Telephone",
{
Pens: { Quantity : 3},
Pencils: { Quantity : 2},
Erasers: { Quantity : 1}
}
]
}
Sets
DynamoDB supports types that represent sets of number, string, or binary values. All the elements within a set must be of the same type. For example, an attribute of type Number Set can only contain numbers; String Set can only contain strings; and so on.
The following example shows a string set, a number set, and a binary set:
["Black", "Green", "Red"]
[42.2, -19, 7.5, 3.14]
["U3Vubnk=", "UmFpbnk=", "U25vd3k="]
2-Creating a Table
Tables are the fundamental data structures in relational databases and in Amazon DynamoDB. A relational database management system (RDBMS) requires you to define the table's schema when you create it. In contrast, DynamoDB tables are schemaless—other than the primary key, you do not need to define any extra attributes or data types when you create a table.
Use the CreateTable
action to create a provisioned mode table, specifying
parameters as shown following:
{
TableName : "Music",
KeySchema: [
{
AttributeName: "Artist",
KeyType: "HASH", //Partition key
},
{
AttributeName: "SongTitle",
KeyType: "RANGE" //Sort key
}
],
AttributeDefinitions: [
{
AttributeName: "Artist",
AttributeType: "S"
},
{
AttributeName: "SongTitle",
AttributeType: "S"
}
],
ProvisionedThroughput: { // Only specified if using provisioned mode
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
}
3-Writing Data to a Table
In Amazon DynamoDB, you use the PartiQL, a SQL compatible query language, or DynamoDB’s classic APIs to add an item to a table.
PartiQL
In Amazon DynamoDB, you use the ExecuteStatement
action to add an item to a
table, using the Insert PartiQL statement.
insert into Music value {
'Artist': 'No One You Know',
'SongTitle': 'Call Me Today',
'AlbumTitle': 'someonewhat famous',
'Year' : true,
'Genre' : 'Acme'
}
Classic APIs
In Amazon DynamoDB, you use the PutItem
action to add an item to a
table.
{
TableName: "Music",
Item: {
"Artist":"No One You Know",
"SongTitle":"Call Me Today",
"AlbumTitle":"Somewhat Famous",
"Year": 2015,
"Price": 2.14,
"Genre": "Country",
"Tags": {
"Composers": [
"Smith",
"Jones",
"Davis"
],
"LengthInSeconds": 214
}
}
}
The primary key for this table consists of Artist and SongTitle. You must specify values for these attributes.
4-Reading an Item Using Its Primary Key
DynamoDB provides the GetItem
action for retrieving an item
by its primary key. GetItem
is highly efficient because it
provides direct access to the physical location of the item. (For more
information, see Partitions and Data Distribution.)
By default, GetItem
returns the entire item with all of
its attributes.
{
TableName: "Music",
Key: {
"Artist": "No One You Know",
"SongTitle": "Call Me Today"
}
}
You can add a ProjectionExpression
parameter to return only some
of the attributes. {
TableName: "Music",
Key: {
"Artist": "No One You Know",
"SongTitle": "Call Me Today"
},
"ProjectionExpression": "AlbumTitle, Year, Price"
}
5-Querying a Table
The following are some DynamoDB Query
examples.
// Return a single song, by primary key
{
TableName: "Music",
KeyConditionExpression: "Artist = :a and SongTitle = :t",
ExpressionAttributeValues: {
":a": "No One You Know",
":t": "Call Me Today"
}
}
// Return all of the songs by an artist
{
TableName: "Music",
KeyConditionExpression: "Artist = :a",
ExpressionAttributeValues: {
":a": "No One You Know"
}
}
6-Scanning a Table
DynamoDB provides a Scan
action that works in a similar way. The
following are some examples.
// Return all of the data in the table
{
TableName: "Music"
}
// Return all of the values for Artist and Title
{
TableName: "Music",
ProjectionExpression: "Artist, Title"
}
7-Modifying Data in a Table
In DynamoDB, you use the UpdateItem
action to modify a single
item. (If you want to modify multiple items, you must use multiple
UpdateItem
operations.)
The following is an example.
{
TableName: "Music",
Key: {
"Artist":"No One You Know",
"SongTitle":"Call Me Today"
},
UpdateExpression: "SET RecordLabel = :label",
ExpressionAttributeValues: {
":label": "Global Records"
}
}
8-Deleting Data from a Table
DELETE FROM Music WHERE Artist = 'The Acme Band'
In DynamoDB, you use the DeleteItem
action to delete data from a table,
one item at a time. You must specify the item's primary key values.
{
TableName: "Music",
Key: {
Artist: "The Acme Band",
SongTitle: "Look Out, World"
}
}
9-Removing a Table
DROP TABLE Music;
DynamoDB has a similar action: DeleteTable
. In the following example,
the table is permanently deleted.
{
TableName: "Music"
}
10-Setting Up DynamoDB
To set up DynamoDB on your computer
Download DynamoDB for free from this link.
for example:
https://s3.ap-northeast-1.amazonaws.com/dynamodb-local-tokyo/dynamodb_local_latest.tar.gz
https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.zip
- After you download the archive, extract the contents and copy the extracted directory to a location of your choice.
- To start DynamoDB on your computer, open a command prompt window, navigate to the
directory where
you extracted
DynamoDBLocal.jar
, and enter the following command.java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
Before using DynamoDB, I have run following config commands:
aws configure --profile localstack
AWS Access Key ID [None]: AKIAW123
AWS Secret Access Key [None]: U1YmosT1GcJqi4g+vf8n8YZlqBLhIRtaRi/ENeNw
Default region name [None]: ap-northeast-1
Default output format [None]: json
- Start writing applications. To access DynamoDB running locally with the AWS CLI, use
the
--endpoint-url
parameter. For example, use the following command to list DynamoDB tables.
aws dynamodb list-tables --endpoint-url http://localhost:8000
11-Getting Started with Java and DynamoDB
- Step 1: Create a Table
- Step 2: Load Sample Data
- Step 3: Create, Read, Update, and Delete an Item
- Step 4: Query and Scan the Data
- Step 5: (Optional) Delete the Table
0 comments:
Post a Comment