這是一個系列文章,會用大約10篇介紹python 如何 使用DynamoDB。
什么是 Amazon DynamoDB
Amazon DynamoDB 是一種完全托管的 NoSQL 數(shù)據(jù)庫服務,提供快速而可預測的性能,能夠實現(xiàn)無縫擴展。使用 DynamoDB,您可以免除操作和擴展分布式數(shù)據(jù)庫的管理工作負擔,因而無需擔心硬件預置、設置和配置、復制、軟件修補或集群擴展等問題。
使用 DynamoDB,您可以創(chuàng)建數(shù)據(jù)庫表來存儲和檢索任意量級的數(shù)據(jù),并提供任意級別的請求流量。您可以擴展或縮減您的表的吞吐容量,而不會導致停機或性能下降,還可以使用 AWS 管理控制臺來監(jiān)控資源使用情況和各種性能指標。
Amazon DynamoDB 特點
DynamoDB 會自動將數(shù)據(jù)和流量分散到足夠數(shù)量的服務器上,以滿足吞吐量和存儲需求,同時保持始終如一的高性能。所有數(shù)據(jù)均存儲在固態(tài)硬盤 (SSD) 中,并會自動復制到 AWS 區(qū)域中的多個可用區(qū)中,從而提供內置的高可用性和數(shù)據(jù)持久性。
DynamoDB 是 NoSQL 數(shù)據(jù)庫并且無架構,這意味著,與主鍵屬性不同,無需在創(chuàng)建表時定義任何屬性或數(shù)據(jù)類型。與此相對,關系數(shù)據(jù)庫要求在創(chuàng)建表時定義每個列的名稱和數(shù)據(jù)類型。
Amazon DynamoDB 使用
AWS 配置
- 注冊 Amazon Web Services 并創(chuàng)建訪問密鑰
- 創(chuàng)建 AWS 憑證文件
- 開啟DynamoDB 服務
在計算機上運行 DynamoDB
除了 Amazon DynamoDB Web 服務之外,AWS 還提供可本地運行的可下載版本的 DynamoDB。
使用本地版本,在開發(fā)應用程序時無需 Internet 連接。
方法1 直接在計算機上安裝
需要安裝java環(huán)境
- 下載 DynamoDB
- 解壓,并將解壓后的目錄復制到某個位置
- 打開命令提示符窗口,打開 DynamoDBLocal.jar 的目錄,并輸入以下命令:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
現(xiàn)在就可以使用了
命令行選項
DynamoDB 接受以下命令參數(shù):
- -cors value - 啟用適用于 JavaScript 的 CORS 支持(跨源資源共享)。您必須提供特定域的逗號分隔“允許”列表。-cors 的默認設置是星號 (*),這將允許公開訪問。
- -dbPath value - DynamoDB 將用于寫入其數(shù)據(jù)庫文件的目錄。如果不指定此選項,則文件將寫入當前目錄。請注意,不能同時指定 -dbPath 和 -inMemory。
- -delayTransientStatuses - 使 DynamoDB 為某些操作引入延遲。DynamoDB 幾乎可以即時執(zhí)行某些任務,例如,對表和索引執(zhí)行創(chuàng)建/更新/刪除操作;但是,實際 DynamoDB 服務需要更多時間才能完成這些任務。設置此參數(shù)有助于 DynamoDB 更逼真地模擬 Amazon DynamoDB Web 服務的行為。(目前,此參數(shù)僅為處于 CREATING 或 DELETING 狀態(tài)的global secondary index引入延遲。)
- -help – 打印使用摘要和選項。
- -inMemory – DynamoDB 將在內存中運行,而不使用數(shù)據(jù)庫文件。停止 DynamoDB 時,不會保存任何數(shù)據(jù)。請注意,不能同時指定 -dbPath 和 -inMemory。
- -optimizeDbBeforeStartup – 在計算機上啟動 DynamoDB 之前優(yōu)化底層數(shù)據(jù)庫表。使用此參數(shù)時,必須還要指定 -dbPath。
- -port value - DynamoDB 將用于與應用程序通信的端口號。如果不指定此選項,則默認端口是 8000
- -sharedDb - DynamoDB 將使用單個數(shù)據(jù)庫文件,而不是針對每個證書和區(qū)域使用不同的文件。如果指定 -sharedDb,那么所有 DynamoDB 客戶端都將與同一組表交互,無論其區(qū)域和證書配置如何。
方法2 使用docker安裝
需要安裝docker
方法一需要我們手動配置,操作也麻煩,如果喜歡docker,可以直接使用docker快速搭建本地環(huán)境
1. 下載鏡像
docker pull ryanratcliff/dynamodb
2. 啟動
docker run -d -p 8000:8000 ryanratcliff/dynamodb
Python 使用 DynamoDB
我們可以使用適用于 Python (Boto 3) 的 AWS 開發(fā)工具包進行開發(fā)。
- 安裝boto3
pip install boto3
- 使用 AWS CLI 配置秘鑰
# 安裝awscli
sudo pip install awscli
# 測試awscli 安裝
aws help
# 輸入命令
aws configure
# 配置 Access Key ID 和 Secret Access Key
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: ENTER
# 要更新任何設置,只需再次運行 aws configure 并根據(jù)需要輸入新值。
CLI 將使用 aws configure 指定的證書存儲在您主目錄中名為 .aws 的文件夾中名為 credentials 的本地文件中
可以使用 以下命令列出 .aws 文件夾內容:
Linux, OS X, or Unix
$ ls ~/.aws
- 使用以下代碼測試 DynamoDB 是否可用
import boto3
db3 = boto3.resource('dynamodb', endpoint_url='http://localhost:8000', aws_secret_access_key='ticTacToeSampleApp', aws_access_key_id='ticTacToeSampleApp', region_name='us-west-2')
db3.meta.client.list_tables()
# output
{'ResponseMetadata': {'HTTPHeaders': {'content-length': '32',
'content-type': 'application/x-amz-json-1.0',
'server': 'Jetty(8.1.12.v20130726)',
'x-amz-crc32': '2024476575',
'x-amzn-requestid': '5f0a974a-8900-470d-8b28-a4207247c65e'},
'HTTPStatusCode': 200,
'RequestId': '5f0a974a-8900-470d-8b28-a4207247c65e',
'RetryAttempts': 0},
u'TableNames': []}
如果輸出以上內容,則說明DynamoDB 正常。