国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Amazon DynamoDB 入門(mén)3: 表的基本操作

Anshiii / 2328人閱讀

摘要:基本的操作包括表操作項(xiàng)目操作和索引管理。將立即執(zhí)行請(qǐng)求。返回一個(gè)包含操作結(jié)果的響應(yīng)。表是關(guān)系數(shù)據(jù)庫(kù)和中的基本數(shù)據(jù)結(jié)構(gòu)。每秒需對(duì)此表執(zhí)行的讀取和寫(xiě)入次數(shù)。

Amazon DynamoDB 表的基本操作

之前兩篇文章介紹了DynamoDB如何在本地安裝以及基本的工作原理和API,這一節(jié)主要介紹如何使用DynamoDB。

基本的DynamoDB 操作包括表操作、項(xiàng)目操作和索引管理。

首先是鏈接數(shù)據(jù)庫(kù)。和關(guān)系型數(shù)據(jù)庫(kù)不同,DynamoDB 是一項(xiàng) Web 服務(wù),與其進(jìn)行的交互是無(wú)狀態(tài)的。應(yīng)用程序不需要維護(hù)持久性網(wǎng)絡(luò)連接。相反,與 DynamoDB 的交互是通過(guò) HTTP(S) 請(qǐng)求和響應(yīng)進(jìn)行的。

執(zhí)行某項(xiàng)操作的步驟為:

應(yīng)用程序?qū)?HTTP(S) 請(qǐng)求發(fā)送到 DynamoDB。該請(qǐng)求包含要執(zhí)行的 DynamoDB 操作的名稱(chēng)和參數(shù)。DynamoDB 將立即執(zhí)行請(qǐng)求。

DynamoDB 返回一個(gè)包含操作結(jié)果的 HTTP(S) 響應(yīng)。如果出錯(cuò),DynamoDB 將返回 HTTP 錯(cuò)誤狀態(tài)和消息。

大多數(shù)情況下,我們編寫(xiě)應(yīng)用程序代碼訪問(wèn)DynamoDB。同時(shí)還可以使用 AWS 管理控制臺(tái)或 AWS Command Line Interface (AWS CLI) 向 DynamoDB 發(fā)送臨時(shí)請(qǐng)求并查看結(jié)果。

剩下的就讓我們用代碼展示吧!

表操作

我們知道,關(guān)系模型需要一個(gè)明確定義的架構(gòu),其中,數(shù)據(jù)將標(biāo)準(zhǔn)化為表、列和行。此外,在表、列、索引和其他數(shù)據(jù)庫(kù)元素之間定義所有關(guān)系。但 DynamoDB 不同,DynamoDB 沒(méi)有架構(gòu)。每個(gè)表必須具有一個(gè)用來(lái)唯一標(biāo)識(shí)每個(gè)數(shù)據(jù)項(xiàng)目的主鍵,但對(duì)其他非鍵屬性沒(méi)有類(lèi)似的約束。DynamoDB 可以管理結(jié)構(gòu)化或半結(jié)構(gòu)化的數(shù)據(jù),包括 JSON 文檔。

表是關(guān)系數(shù)據(jù)庫(kù)和 DynamoDB 中的基本數(shù)據(jù)結(jié)構(gòu)。關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) (RDBMS) 要求在創(chuàng)建表時(shí)定義表的架構(gòu)。相比之下,DynamoDB 表沒(méi)有架構(gòu) - 與主鍵不同,我們?cè)趧?chuàng)建表時(shí)無(wú)需定義任何屬性或數(shù)據(jù)類(lèi)型。

新建表

DynamoDB 使用 CreateTable 操作創(chuàng)建表,并指定參數(shù),請(qǐng)求語(yǔ)法如下所示:

{
   "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 – 表名稱(chēng)。

KeySchema – 用于主鍵的屬性。有關(guān)更多信息,請(qǐng)參閱 表、項(xiàng)目和屬性 和 主鍵。

AttributeDefinitions – 鍵架構(gòu)屬性的數(shù)據(jù)類(lèi)型。

ProvisionedThroughput – 每秒需對(duì)此表執(zhí)行的讀取和寫(xiě)入次數(shù)。DynamoDB 將保留足量的存儲(chǔ)和系統(tǒng)資源,以便始終滿足吞吐量要求。也可在創(chuàng)建之后使用 UpdateTable 操作后更改這些設(shè)置。存儲(chǔ)分配完全由 DynamoDB 管理,我們無(wú)需指定表的存儲(chǔ)要求。

AttributeType 的定義中:

S - 字符串類(lèi)型

N - 數(shù)字類(lèi)型

B - 二進(jìn)制類(lèi)型?

Python Example

boto3

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(排序鍵)。

獲取有關(guān)表的信息

表建好后,我們可以使用 DescribeTable 命令查看表的信息。
唯一的參數(shù)是表名稱(chēng),如下所示:

{
    TableName : "Music"
}

來(lái)自 DescribeTable 回復(fù)如下所示:

{
  "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 還將返回有關(guān)表中的索引、預(yù)配置的吞吐量設(shè)置、大約項(xiàng)目數(shù)和其他元數(shù)據(jù)的信息。

Python Example

boto3

import boto3
db3 = boto3.resource("dynamodb", endpoint_url="http://localhost:8000",  region_name="us-west-2")

db3.meta.client.describe_table(TableName="Music")
# 返回結(jié)果如下

{"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"}}
刪除表

當(dāng)不再需要一個(gè)表并希望將它永久性丟棄時(shí),可使用 DeleteTable:

表一經(jīng)刪除便無(wú)法恢復(fù)。(一些關(guān)系數(shù)據(jù)庫(kù)允許撤消 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": {
   ...
   }
}
修改表

當(dāng)一個(gè)表創(chuàng)建好之后如果想要調(diào)整,可以使用UpdateTable命令

修改表時(shí)我們一次只可以做一個(gè)操作:

* 修改預(yù)設(shè)的吞吐量。
* 開(kāi)啟或者停止使用Streams。
* 刪除一個(gè)全局耳機(jī)索引。
* 創(chuàng)建一個(gè)全局的二級(jí)索引。當(dāng)索引開(kāi)始后臺(tái)執(zhí)行時(shí),可以使用UpdateTable進(jìn)行下一個(gè)操作。

UpdateTable 是一個(gè)異步操作; 當(dāng)它開(kāi)始執(zhí)行時(shí),表的狀態(tài)將由 ACTIVE 變?yōu)?UPDATING。

請(qǐng)求語(yǔ)法為:

{
   "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 表會(huì)發(fā)現(xiàn)預(yù)設(shè)的吞吐量都已經(jīng)修改為了10

DynamoDB UpdateTable 操作

下一篇我們將要結(jié)束DynamoDB 最常用的部分,項(xiàng)目的基本操作(CRUD)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38357.html

相關(guān)文章

  • Amazon DynamoDB 入門(mén)3表的基本操作

    摘要:基本的操作包括表操作項(xiàng)目操作和索引管理。將立即執(zhí)行請(qǐng)求。返回一個(gè)包含操作結(jié)果的響應(yīng)。表是關(guān)系數(shù)據(jù)庫(kù)和中的基本數(shù)據(jù)結(jié)構(gòu)。每秒需對(duì)此表執(zhí)行的讀取和寫(xiě)入次數(shù)。 Amazon DynamoDB 表的基本操作 之前兩篇文章介紹了DynamoDB如何在本地安裝以及基本的工作原理和API,這一節(jié)主要介紹如何使用DynamoDB。 基本的DynamoDB 操作包括表操作、項(xiàng)目操作和索引管理。 首先是鏈...

    張利勇 評(píng)論0 收藏0
  • Amazon DynamoDB 入門(mén)2:工作原理、API和數(shù)據(jù)類(lèi)型介紹

    摘要:使用此值作為其哈希函數(shù)的輸入值,從而生成可從中找到該項(xiàng)目的分區(qū)。在這種情況下,會(huì)根據(jù)字符串的哈希值,使用其哈希函數(shù)決定新項(xiàng)目的存儲(chǔ)位置。使用分區(qū)鍵值作為對(duì)內(nèi)部哈希函數(shù)的輸入。可使用字符串?dāng)?shù)據(jù)類(lèi)型表示日期或時(shí)間戳。 本節(jié)主要介紹DynamoDB 基本概念、核心組件、數(shù)據(jù)結(jié)構(gòu)、Api DynamoDB 基本概念 DynamoDB 是 AWS 獨(dú)有的完全托管的 NoSQL Database。...

    baoxl 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<