摘要:DynamoDB是一款托管式的NoSQL資料庫服務,支持多種數據模型,廣泛應用於電商、社交媒體、游戲、IoT等場景。 本文分享自華為雲社區《完全相容DynamoDB協議!GaussDB(for Cassandra)為NoSQL註入新活力》,作者:GaussDB 資料庫 。 DynamoDB是一 ...
摘要:DynamoDB是一款托管式的NoSQL資料庫服務,支持多種數據模型,廣泛應用於電商、社交媒體、游戲、IoT等場景。
本文分享自華為雲社區《完全相容DynamoDB協議!GaussDB(for Cassandra)為NoSQL註入新活力》,作者:GaussDB 資料庫 。
DynamoDB是一款托管式的NoSQL資料庫服務,支持多種數據模型,廣泛應用於電商、社交媒體、游戲、IoT等場景。為了進一步滿足DynamoDB用戶的一些潛在需求,為客戶提供更多的選擇,華為雲分散式NoSQL資料庫服務GaussDB(for Cassandra)推出了相容DynamoDB特性,幫助用戶更加絲滑地從DynamoDB遷移到GaussDB(for Cassandra)。
使用GaussDB(for Cassandra) DynamoDB的理由
為什麼要選擇遷移至GaussDB(for Cassandra)?
1.使用成本低
隨著業務的發展,企業數據量持續不斷地增加,DynamoDB讀寫請求累加帶來的費用也日漸高漲。而GaussDB(for Cassandra)具有較高的性價比,既能提供更高的吞吐,又可以降低一半的DynamoDB使用成本,尤其當數據量較大時成本降低更加明顯。
2.更靈活開放的部署方式
DynamoDB是一項全托管服務,用戶使用需要遵循一定的部署方式和規則。相比之下,GaussDB(for Cassandra)可以根據用戶的具體需求靈活地部署服務,客戶可以選擇部署在私有雲或公有雲上,而不是被鎖定在昂貴的平臺上。無論在哪種部署環境下,GaussDB(for Cassandra)都可以保證服務的穩定和高效。
3.平滑的遷移
除了以上兩點,GaussDB(for Cassandra)可以完全相容DynamoDB的語法和數據模型,所以從DynamoDB遷移到GaussDB(for Cassandra)將變得非常容易,應用程式也不需要進行任何修改,遷移工作將會更高效便捷,對業務也更加友好。
GaussDB(for Cassandra)如何相容DynamoDB?
華為雲GaussDB(for Cassandra)在相容Cassandra協議的基礎上,新增了相容DynamoDB的協議。所以,用戶在GaussDB(for Cassandra)上就可以運行DynamoDB的應用程式,同時還能保持原有的CQL協議。服務整體架構如下圖所示。
![](https://pic3.zhimg.com/80/v2-34c4dd3cf3d6c1717351974ba38f5dc6_720w.webp)
從圖中可以看到,Dynamo Rest Server模塊在接收用戶發起的讀寫請求的同時,也增加了數據模型映射模塊和表達式語法語義解析模塊。
在埠 8000(DynamoDB SDK預設)上啟用此特性之後,首先,每個節點都會在此埠上接收DynamoDB 客戶端的請求,這些HTTP 請求會以 JSON 格式進行解析,以及多種表達式的語法語義解析,然後通過數據映射模型進行轉換,再將請求轉換為底層Storage Layer協議的請求,最後將數據保存在存儲池中。下麵列舉一些關鍵的點:
表映射:DynamoDB的表會映射為GaussDB(for Cassandra)的表,每個表都會保存在一個單獨的KeySpace中。每當用戶創建對應的DynamoDB表(CreateTable請求)時,GaussDB(for Cassandra)會初始化Keyspace,同時創建對應的表。
主鍵映射:DynamoDB主鍵(哈希鍵和排序鍵)是已知類型,會作為GaussDB(for Cassandra)表的分區鍵和聚集鍵。
RMW請求:DynamoDB提供了一些先讀後寫的請求(R-M-W請求),比如帶有條件表達式的寫入、帶有條件表達式的修改,或者需要返回舊值的寫入或修改,這些請求會通過LWT(輕量級事務)相互隔離,因此對於RMW類的請求,GaussDB(for Cassandra)可以做到與DynamoDB完全一致。
表達式:在DynamoDB中,需要解析更新表達式、條件表達式和投影表達式。雖然可以使用正則表達式和手寫的遞歸下降解析器來解析這些表達式,但考慮到不同表達式的多樣性,GaussDB(for Cassandra)會採用ANTLR4來生成解析器代碼,這樣可以通過定義上下文無關的語法規則,自動生成解析器代碼,從而更加靈活地支持DynamoDB的表達式。
索引:本質上DynamoDB 的索引和GaussDB(for Cassandra)的物化視圖是相同的,GaussDB(for Cassandra)只需增加嵌套類型的支持就可以在介面層面完美支持本地二級索引(LSI)和全局二級索引(GSI)。
如何使用GaussDB(for Cassandra) 的相容DynamoDB特性?
在購買了GaussDB(for Cassandra) 實例後,如果需要使用相容DynamoDB 的特性,可以提交工單聯繫華為雲運維人員開啟該功能。
推薦使用boto3客戶端鏈接GaussDB(for Casssandra),boto3是一個Python客戶端庫,用於連接DynamoDB和一些其他的服務。執行如下命令安裝boto3:
sudo pip install --upgrade boto3
下麵是使用boto3寫入和讀取的簡單示例:
# 創建Client client = boto3.resource('dynamodb', endpoint_url='url', region_name='None', aws_access_key_id='key_id', aws_secret_access_key='access_key') # 插入項目 response = client.put_item( TableName='TableName', Item={ 'PartitionKey': {'S': 'key1'}, 'SortKey': {'S': 'key2'}, 'attribute_name': {'S': 'attribute_value'} } ) # 獲取表中的項目 response = client.get_item( TableName='TableName', Key={ 'PartitionKey': {'S': 'key1'}, 'SortKey': {'S': 'key2'} } )
需要註意的是這裡的endpointurl、awsaccesskeyid和awssecretaccess_key是GaussDB(for Cassandra) 對應的節點地址、用戶名和密碼。此外,GaussDB(for Cassandra)在語法層面和DynamoDB的使用保持完全一致。
總結
在相容DynamoDB協議方面,GaussDB(for Cassandra)嚴格遵循了DynamoDB的語法和數據模型。因此DynamoDB的應用程式可以輕鬆地遷移至GaussDB(for Cassandra);此外,GaussDB(for Cassandra)還提供了多種自動化管理和運維功能,例如自動備份、故障檢測和容錯等,有助於用戶更加方便地管理和運維資料庫。
GaussDB(for Cassandra)作為一種高性能、低成本、開放性強的分散式NoSQL資料庫,能夠滿足用戶各種數據存儲的需求,不僅為使用DynamoDB的用戶提供了一個可靠的替代方案,更可以讓用戶享受到GaussDB(for Cassandra)的高性能、高可靠和高擴展等優勢。
號外
![](https://pic2.zhimg.com/80/v2-2d8f013978f91288eb6d784b5974bad1_720w.webp)
7月7日,華為開發者大會2023 ( Cloud )將拉開帷幕,並將在國內30多個城市、海外10多個國家開設分會場,誠邀您參加這場不容錯過的年度開發者盛會,讓我們一起開啟探索之旅!
我們將攜手開發者、客戶、合作伙伴,為您呈現華為雲系列產品服務與豐富的創新實踐,並與您探討AI、大數據、資料庫、PaaS、aPaaS、媒體服務、雲原生、安全、物聯網、區塊鏈、開源等技術話題,展開全面深入的交流。
大會將匯聚全球科學家、行業領袖、技術專家、社區大咖,開設200多場開發者專題活動,為全球開發者提供面對面交流與合作的機會,共同探討技術創新和業務發展。
大會官網:https://developer.huaweicloud.com/HDC.Cloud2023.html
參會購票:https://www.vmall.com/product/10086352254099.html?cid= 211761
點擊參與開發者社區活動,觀賞技術大咖秀、玩轉技術夢工廠,有機會贏取4000元開發者禮包!
歡迎關註“華為雲開發者聯盟”公眾號,獲取大會議程、精彩活動和前沿乾貨。