摘要:基本的操作包括表操作項目操作和索引管理。將立即執(zhí)行請求。返回一個包含操作結果的響應。表是關系數(shù)據(jù)庫和中的基本數(shù)據(jù)結構。每秒需對此表執(zhí)行的讀取和寫入次數(shù)。
Amazon DynamoDB 表的基本操作
之前兩篇文章介紹了DynamoDB如何在本地安裝以及基本的工作原理和API,這一節(jié)主要介紹如何使用DynamoDB。
基本的DynamoDB 操作包括表操作、項目操作和索引管理。
首先是鏈接數(shù)據(jù)庫。和關系型數(shù)據(jù)庫不同,DynamoDB 是一項 Web 服務,與其進行的交互是無狀態(tài)的。應用程序不需要維護持久性網(wǎng)絡連接。相反,與 DynamoDB 的交互是通過 HTTP(S) 請求和響應進行的。
執(zhí)行某項操作的步驟為:
應用程序?qū)?HTTP(S) 請求發(fā)送到 DynamoDB。該請求包含要執(zhí)行的 DynamoDB 操作的名稱和參數(shù)。DynamoDB 將立即執(zhí)行請求。
DynamoDB 返回一個包含操作結果的 HTTP(S) 響應。如果出錯,DynamoDB 將返回 HTTP 錯誤狀態(tài)和消息。
大多數(shù)情況下,我們編寫應用程序代碼訪問DynamoDB。同時還可以使用 AWS 管理控制臺或 AWS Command Line Interface (AWS CLI) 向 DynamoDB 發(fā)送臨時請求并查看結果。
剩下的就讓我們用代碼展示吧!
表操作我們知道,關系模型需要一個明確定義的架構,其中,數(shù)據(jù)將標準化為表、列和行。此外,在表、列、索引和其他數(shù)據(jù)庫元素之間定義所有關系。但 DynamoDB 不同,DynamoDB 沒有架構。每個表必須具有一個用來唯一標識每個數(shù)據(jù)項目的主鍵,但對其他非鍵屬性沒有類似的約束。DynamoDB 可以管理結構化或半結構化的數(shù)據(jù),包括 JSON 文檔。
表是關系數(shù)據(jù)庫和 DynamoDB 中的基本數(shù)據(jù)結構。關系數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 要求在創(chuàng)建表時定義表的架構。相比之下,DynamoDB 表沒有架構 - 與主鍵不同,我們在創(chuàng)建表時無需定義任何屬性或數(shù)據(jù)類型。
新建表DynamoDB 使用 CreateTable 操作創(chuàng)建表,并指定參數(shù),請求語法如下所示:
{ "AttributeDefinitions": [ { "AttributeName": "string", "AttributeType": "string" } ], "GlobalSecondaryIndexes": [ { "IndexName": "string", "KeySchema": [ { "AttributeName": "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits": number } } ], "KeySchema": [ { "AttributeName": "string", "KeyType": "string" } ], "LocalSecondaryIndexes": [ { "IndexName": "string", "KeySchema": [ { "AttributeName": "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ "string" ], "ProjectionType": "string" } } ], "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits": number }, "StreamSpecification": { "StreamEnabled": boolean, "StreamViewType": "string" }, "TableName": "string" }
必須向 CreateTable 提供以下參數(shù):
TableName – 表名稱。
KeySchema – 用于主鍵的屬性。有關更多信息,請參閱 表、項目和屬性 和 主鍵。
AttributeDefinitions – 鍵架構屬性的數(shù)據(jù)類型。
ProvisionedThroughput – 每秒需對此表執(zhí)行的讀取和寫入次數(shù)。DynamoDB 將保留足量的存儲和系統(tǒng)資源,以便始終滿足吞吐量要求。也可在創(chuàng)建之后使用 UpdateTable 操作后更改這些設置。存儲分配完全由 DynamoDB 管理,我們無需指定表的存儲要求。
AttributeType 的定義中:
S - 字符串類型
N - 數(shù)字類型
B - 二進制類型?
Python Exampleboto3
import boto3 db3 = boto3.resource("dynamodb", endpoint_url="http://localhost:8000", region_name="us-west-2") table = db3.create_table( TableName="Music", KeySchema=[ { "AttributeName": "Artist", "KeyType": "HASH" }, { "AttributeName": "SongTitle", "KeyType": "RANGE" } ], AttributeDefinitions=[ { "AttributeName": "Artist", "AttributeType": "S" }, { "AttributeName": "SongTitle", "AttributeType": "S" } ], ProvisionedThroughput={ "ReadCapacityUnits": 1, "WriteCapacityUnits": 1 } ) # Wait until the table exists. table.meta.client.get_waiter("table_exists").wait(TableName="Music") # Print out some data about the table. print(table.item_count)
此表的主鍵包括 Artist(分區(qū)鍵)和 SongTitle(排序鍵)。
獲取有關表的信息表建好后,我們可以使用 DescribeTable 命令查看表的信息。
唯一的參數(shù)是表名稱,如下所示:
{ TableName : "Music" }
來自 DescribeTable 回復如下所示:
{ "Table": { "AttributeDefinitions": [ { "AttributeName": "Artist", "AttributeType": "S" }, { "AttributeName": "SongTitle", "AttributeType": "S" } ], "TableName": "Music", "KeySchema": [ { "AttributeName": "Artist", "KeyType": "HASH" //Partition key }, { "AttributeName": "SongTitle", "KeyType": "RANGE" //Sort key } ], ...remaining output omitted...
DescribeTable 還將返回有關表中的索引、預配置的吞吐量設置、大約項目數(shù)和其他元數(shù)據(jù)的信息。
Python Exampleboto3
import boto3 db3 = boto3.resource("dynamodb", endpoint_url="http://localhost:8000", region_name="us-west-2") db3.meta.client.describe_table(TableName="Music")
# 返回結果如下 {"ResponseMetadata": {"HTTPHeaders": {"content-length": "569", "content-type": "application/x-amz-json-1.0", "server": "Jetty(8.1.12.v20130726)", "x-amz-crc32": "2801025854", "x-amzn-requestid": "2dafeeab-8d79-4b32-ad1f-03983624ab41"}, "HTTPStatusCode": 200, "RequestId": "2dafeeab-8d79-4b32-ad1f-03983624ab41", "RetryAttempts": 0}, u"Table": {u"AttributeDefinitions": [{u"AttributeName": u"Artist", u"AttributeType": u"S"}, {u"AttributeName": u"SongTitle", u"AttributeType": u"S"}], u"CreationDateTime": datetime.datetime(2016, 12, 28, 11, 25, 12, 657000, tzinfo=tzlocal()), u"ItemCount": 0, u"KeySchema": [{u"AttributeName": u"Artist", u"KeyType": u"HASH"}, {u"AttributeName": u"SongTitle", u"KeyType": u"RANGE"}], u"ProvisionedThroughput": {u"LastDecreaseDateTime": datetime.datetime(1970, 1, 1, 8, 0, tzinfo=tzlocal()), u"LastIncreaseDateTime": datetime.datetime(1970, 1, 1, 8, 0, tzinfo=tzlocal()), u"NumberOfDecreasesToday": 0, u"ReadCapacityUnits": 1, u"WriteCapacityUnits": 1}, u"TableArn": u"arn:aws:dynamodb:ddblocal:000000000000:table/Music", u"TableName": u"Music", u"TableSizeBytes": 0, u"TableStatus": u"ACTIVE"}}刪除表
當不再需要一個表并希望將它永久性丟棄時,可使用 DeleteTable:
表一經(jīng)刪除便無法恢復。(一些關系數(shù)據(jù)庫允許撤消 DROP TABLE 操作)
{ TableName: "Music" }Python Example
boto3
from __future__ import print_function # Python 2/3 compatibility import boto3 dynamodb = boto3.resource("dynamodb", region_name="us-west-2", endpoint_url="http://localhost:8000") table = dynamodb.Table("Music") table.delete() ## output {"ResponseMetadata": { "HTTPHeaders": { "content-length": "1012", "content-type": "application/x-amz-json-1.0", "server": "Jetty(8.1.12.v20130726)", "x-amz-crc32": "2473676771", "x-amzn-requestid": "84938373-870f-420f-b19e-4de2c6301743"}, "HTTPStatusCode": 200, "RequestId": "84938373-870f-420f-b19e-4de2c6301743", "RetryAttempts": 0}, u"TableDescription": { ... } }修改表
當一個表創(chuàng)建好之后如果想要調(diào)整,可以使用UpdateTable命令
修改表時我們一次只可以做一個操作:
* 修改預設的吞吐量。 * 開啟或者停止使用Streams。 * 刪除一個全局耳機索引。 * 創(chuàng)建一個全局的二級索引。當索引開始后臺執(zhí)行時,可以使用UpdateTable進行下一個操作。
UpdateTable 是一個異步操作; 當它開始執(zhí)行時,表的狀態(tài)將由 ACTIVE 變?yōu)?UPDATING。
請求語法為:
{ "AttributeDefinitions": [ { "AttributeName": "string", "AttributeType": "string" } ], "GlobalSecondaryIndexUpdates": [ { "Create": { "IndexName": "string", "KeySchema": [ { "AttributeName": "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits": number } }, "Delete": { "IndexName": "string" }, "Update": { "IndexName": "string", "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits": number } } } ], "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits": number }, "StreamSpecification": { "StreamEnabled": boolean, "StreamViewType": "string" }, "TableName": "string" }Python Example
boto3
import boto3 db3 = boto3.resource("dynamodb", endpoint_url="http://localhost:8000", region_name="us-west-2") table = db3.meta.client.update_table( TableName="Music", AttributeDefinitions=[ { "AttributeName": "Artist", "AttributeType": "S" }, { "AttributeName": "SongTitle", "AttributeType": "S" } ], ProvisionedThroughput={ "ReadCapacityUnits": 10, "WriteCapacityUnits": 10 } ) db3.meta.client.describe_table(TableName="Music")
現(xiàn)在查看Music 表會發(fā)現(xiàn)預設的吞吐量都已經(jīng)修改為了10
DynamoDB UpdateTable 操作
下一篇我們將要結束DynamoDB 最常用的部分,項目的基本操作(CRUD)。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/17586.html
摘要:基本的操作包括表操作項目操作和索引管理。將立即執(zhí)行請求。返回一個包含操作結果的響應。表是關系數(shù)據(jù)庫和中的基本數(shù)據(jù)結構。每秒需對此表執(zhí)行的讀取和寫入次數(shù)。 Amazon DynamoDB 表的基本操作 之前兩篇文章介紹了DynamoDB如何在本地安裝以及基本的工作原理和API,這一節(jié)主要介紹如何使用DynamoDB。 基本的DynamoDB 操作包括表操作、項目操作和索引管理。 首先是鏈...
摘要:使用此值作為其哈希函數(shù)的輸入值,從而生成可從中找到該項目的分區(qū)。在這種情況下,會根據(jù)字符串的哈希值,使用其哈希函數(shù)決定新項目的存儲位置。使用分區(qū)鍵值作為對內(nèi)部哈希函數(shù)的輸入。可使用字符串數(shù)據(jù)類型表示日期或時間戳。 本節(jié)主要介紹DynamoDB 基本概念、核心組件、數(shù)據(jù)結構、Api DynamoDB 基本概念 DynamoDB 是 AWS 獨有的完全托管的 NoSQL Database。...
閱讀 6921·2021-09-22 15:36
閱讀 5710·2021-09-02 10:20
閱讀 1879·2019-08-30 15:44
閱讀 2660·2019-08-29 14:06
閱讀 1162·2019-08-29 11:17
閱讀 1609·2019-08-26 14:05
閱讀 3105·2019-08-26 13:50
閱讀 1559·2019-08-26 10:26