ARTICLE

全面指南:掌握DynamoDB的使用與本地設置教程

LATEST ARTICLE

全面指南:掌握DynamoDB的使用與本地設置教程

全面指南:掌握DynamoDB的使用與本地設置教程

什麼是DynamoDB?

DynamoDB是一款由亞馬遜公司(Amazon)所提供的完全托管的NoSQL資料庫服務,旨在為需要高可擴展性與低延遲的Web應用程式、行動應用程式、遊戲、物聯網(IoT)裝置等提供穩定且快速的資料存取。自2012年推出以來,DynamoDB已成為許多開發者和企業首選的雲端資料庫解決方案。 作為一種NoSQL資料庫,DynamoDB支援鍵值(key-value)及文件(document)兩種資料模型。

它允許客戶在任何規模下進行數據儲存和檢索操作,而無需事先配置伺服器或其他基礎架構。它具有自動分區功能和按需求自動調整吞吐量容量的能力,幫助使用者靈活地處理不同負載情況。 DynamoDB主要特點包括: 1. 完全管理:AWS負責所有硬件配置、設定複本集群保持高可用性、處理節點失效等工作。

2. 高度可擴展性:可以根據實際使用情況水平自動或手動地增加或減少表(table)的讀寫能力。 3. 簡單性與易於使用:通過AWS管理控制台、命令列介面(CLI)或SDKs即可輕松創建新表、查詢數據等。 4. 低延時:DynamoDB通常可以在毫秒級別內回咻大部分讀寫請求。

5. 靈活性:支持復雜查詢操作如二次索引(secondary indexes),使得對於非主鍵屬性也能有效率地進行查詢。 6. 安全性:整合AWS Identity and Access Management (IAM),讓開發者可以精細控制每個API呼叫的權限。 除此之外,DynamoDB對於數據一致性與耐久性也提供了強有力保證。

當數據被寫入到DynamoDB後,在多個可用區(AZs)中都會保存其冗餘副本。還支援原子計數器(atomic counters),確保更新操作是原子化完成且不會因競爭狀況而導致數值錯誤。 考量到開發者在本地開發階段可能希望測試其代碼而無需連接到真正的雲端服務上造成不必要成本,在這種情形下,亞馬遜亦提供了名為′DynamoDB Local′ 的工具。

這是一個小型客戶端版本的 DynamoDB ,可以在您自己的電腦上執行,模仿真實 DynamoDB 服務的功能且無須聯網即可測試大部分交互功能。 結合以上特色及其穩健之架构设计,DynamoDB不僅深受現代Web與App開發人員歡迎, 更是大数据应用场景中关键组件之一, 在经济学家智库(Economist Intelligence Unit)与IBM联合发布「全球数据指数」排名中居于前茅, 身为当今数据库技术领域中一个重要里程碑,DynamoDB无愧于现代应用开发生态系统中最为闪耀之星辰。
優勢 劣勢
機會
  • 隨著企業對於數據分析需求增加,提供完整的dynamodb指南有助於吸引更多開發者和企業使用此服務。
  • 由於dynamodb在市場上具有競爭優勢,推廣本地設置教學能夠吸引那些希望保持環境控制權利的客戶。
  • 透過提供本地設置教學,可以滿足一些特定需求的客戶,例如在離線或有限連網條件下使用dynamodb。
  • dynamodb提供高度可擴展性,能夠處理大量的讀寫請求。
  • 使用dynamodb可以達到低延遲的查詢和存取速度,因為它具有快速有效的ssd儲存系統。
  • dynamodb提供了強大且靈活的資料模型,可以支援不同類型和大小的資料。
威脅
  • 設定本地環境時,需要進行複雜且耗時的配置步驟。
  • 本地設置dynamodb無法享受到aws雲端服務所提供的高可用性和彈性。
  • 使用本地設置可能會面臨硬體限制,例如儲存容量和處理能力不足。
  • 競爭對手可能提供類似的本地設置教學,使得市場份額分散。
  • 某些企業可能不希望將資料存儲在公共雲端服務中,而選擇自行建立私有資料庫系統。
  • 技術快速發展可能使得dynamodb的特點和優勢被其他更先進的解決方案所取代。
表: 強弱危機分析(最後更新: 2023-12-18)

DynamoDB數據庫是什麼?

除了亞馬遜員工之外,我們中很少有人對DynamoDB的具體性質有深入瞭解。不過,有一個名為DynamoDB Local的開發版本是用Java編寫的。由於雲原生數據庫架構是專有的閉源系統,我們無法準確描述DynamoDB的具體內容。

然而,我們可以描述它的對話模式。當您在AWS上設置DynamoDB時,您並不需要分配特定數量的磁盤或預留特定服務器。相反,您只需配置輸送量,即根據預留容量來定義數據庫。

通過這種方式,您可以管理每秒支援多少千字節流量或多少筆交易。用戶還可以指定寫入容量單位元(WCUs)和讀取容量單位元(RCUs)的服務水準。用戶並不直接進行DynamoDB API調用,而是將AWS SDK集成到應用程式中,該SDK處理與服務器之間的後端通信事宜。


歷史

由亞馬遜開發團隊於2007年撰寫的具有里程碑意義的《Dynamo》白皮書,成為了 DynamoDB 的靈感來源。這篇白皮書與 Google 在2006年發表的《Bigtable》白皮書形成了鮮明對比。最初,Dynamo 資料庫是作為亞馬遜內部專有解決方案而設計的。

而在2012年,DynamoDB 以客戶為導向的資料庫即服務(Database as a Service, DBaaS)正式推出,並運行在 AWS 和 Elastic Compute Cloud (EC2) 實例上。雖然 DynamoDB 受到原始白皮書的啟發,但它沒有長期堅持其中的理念,因為大數據行業多年來已經發生了很多變化。DynamoDB 是基於一套核心分佈式系統原則設計而成的高度可靠和超級可擴展的資料庫系統。


DynamoDB的設計原則

如果我們來看 DynamoDB 的設計原則,那麼需要提供以下屬性:

管理方式

它以「即服務(as-a-service)」的方式提供,這樣使用者就不需要維護資料庫。

可擴展性

它會自動在後端提供硬體配置,而這過程對使用者來說是看不見的。

速度快

它支援預測性程度較低的配置吞吐量,並在延遲方面表現出相對較低的水準。

耐用且高度可用

它提供多個可用區域,以便進行災難恢復。

靈活性

這項功能讓使用者能夠輕鬆地啟動和升級他們的資料庫。

低成本

當用戶剛開始使用時,這個價格相對親民。

DynamoDB數據儲存格式

DynamoDB在管理數據方面使用了b樹和雜湊技術。它確實支援JSON,但僅將其用作傳輸格式而非存儲格式。因此,DynamoDB的數據存儲格式的實現方式仍然是專有的。

通常情況下,數據會通過AWS Glue進行批量下載到CSV檔中,或者通過流式技術進行導出。然而,關於磁盤上數據的具體性質則被隱藏起來,不被DynamoDB的最終用戶所知曉。

DynamoDB數據模型

DynamoDB是一個鍵值存儲數據庫,使用面向文檔的JSON數據模型。在這種模型中,數據通過由排序鍵和分區鍵組成的主鍵進行索引。表中的數據沒有預定義的模式,因為每個分區可能與其他分區非常不同。

與許多傳統SQL系統不同,在瞭解如何分析數據之前就可以創建數據模型,對於DynamoDB來說,需要根據您希望運行的各種查詢類型來建模數據。 (DynamoDB是一個強大但易於使用的雲端資料庫服務。它使用了一種靈活且無需事先定義架構的資料模式,讓您能夠更有效地處理各種查詢需求。

藉由使用主要索引鍵 (由分區鍵和排序鍵組成) 來索引資料,DynamoDB提供了高效率和可靠性。此外,在設計資料表時,您可以針對不同類型的查詢需求進行建模以獲得更好的性能。)

數據分佈架構

Amazon Web Services 確保 DynamicDB 表格具有可用區域,這使您能夠在 DynamoDB 全球表格中將數據分佈到多個地區。此功能為您提供了更強大的抗災能力。然而,您必須注意,在全球表格中啟用後,您需要確保數據的一致性。

重要提示:請留意全球表格在使用時需要特別注意數據的一致性。

DynamoDB的優點與缺點

說到DynamoDB的優點,它主要用於快速部署和原型化鍵值存儲數據庫,可以擴展到多個GB和TB級別的信息。這些資訊通常被稱為′大數據′應用程式。同時,它也適用於需要始終保持運行且具有大量事務請求的場景。

但如果我們談到缺點,那麼當處理極大數據集(PB級別)和高頻率交易時,DynamoDB可能不適合使用。這裡操作DynamoDB所需的成本可能會變得非常昂貴。此外,重要的是要注意DynamoDB是一個NoSQL數據庫,它使用自己基於JSON的查詢API。

這意味著只有在數據模型不需要跨表JOIN的規範化數據時才應該使用它。

本地儲存對雲端儲存:該如何選擇?

當談到在本地和雲端數據庫之間做出選擇時,許多人發現自己陷入困境。然而,開發人員在測試和開發目的上更傾向於選擇本地存儲而非雲端存儲。有很多原因可以解釋開發人員做出這個決定的原因。

讓我們一一來看看。 首先,本地存儲提供了更高的速度和效率。由於資料直接存放在本地硬碟中,開發人員可以快速訪問和處理數據,而不需要通過網絡連接或第三方服務器。

其次,本地存儲也提供了更好的安全性。由於數據庫位於開發者自己的環境中,他們可以更容易控制和保護敏感信息,防止未經授權的訪問。 此外,在開發階段使用本地存儲還能節省成本。

雖然使用雲端存儲可能會提供更大的可擴展性和彈性,但相對來說也更昂貴。特別是在開發早期階段,使用本地存儲可以節省資源和費用。 最後,本地存儲還允許開發人員在沒有網絡連接的情況下繼續工作。

這對於處理數據庫時可能出現的斷網問題非常重要,並且確保了開發人員的工作不受到干擾。 總而言之,在測試和開發目的上,開發人員更偏向選擇本地存儲而非雲端存儲。速度、安全性、成本和可用性是他們做出這一決定的主要原因。


使用雲端儲存的缺點

雖然雲端具有幾項保護措施來防範駭客入侵,但事實上因為互聯網上沒有任何資料是百分之百安全的,所以敏感數據被侵犯的可能性始終存在。在雲端儲存資料時,協力廠商可能會對你的數據進行控制。此外,你可能無法上傳特定類型的資料。

同時,你必須仔細閱讀使用條款和細則,因為雲服務提供商可以自己制定條款和細則。當你使用雲端儲存時,需要一個快速穩定的互聯網連接。如果沒有可靠且快速的互聯網連接,使用雲端儲存將面臨很多問題。

DynamoDB 雲端儲存是需要付費的。事實上,使用其服務需支付高昂價格。例如,每百萬單位寫請求的價格是1.25美元;相似地,每百萬單位讀請求的價格是0.25美元。

除此之外還需要支付資料儲存、備份與儲存、DynamoDB Streams、數據傳輸等費用。你可以在這裡查看所有這些功能的價格。這些是使用雲端儲存的一些缺點。

但不用擔心,你可以通過使用本地儲存來克服所有這些問題。當你測試網站時,本地儲存是理想的選擇。讓我們來看看使用本地儲存來測試網站的好處。


本地儲存的好處

數據完全受控於您,因為所有的資訊都儲存在本地伺服器上,讓您可以對硬體有全權掌握。然而,這也意味著要由專人或是您自己來負責管理並維護這些硬體設備。此外,使用本地伺服器可讓你隨時隨地存取數據,不必再為下載和上傳速度感到困擾。

與此同時,由於所有的數據都在本地化保存,連接互聯網並不是必須的。相比之下,在雲端存儲中可能需要支付一些額外的費用,但使用本地存儲則完全免費。這也是選擇使用本地存儲而非雲端存儲的最大好處之一:你無需支付任何額外的請求費用。


如何在本地設置DynamoDB?

要在本地設置DynamoDB,您需要按照一定的步驟進行。這可能一開始看起來有些複雜。但如果您仔細遵循所有步驟,就可以輕鬆完成設置而無需任何困擾。

所以,言歸正傳,讓我們開始吧。

下載壓縮包

首先,您需要下載壓縮檔。要下載壓縮檔,您必須前往這個網址並根據您的地區進行選擇。一旦壓縮檔下載完成,然後您需要解壓縮它的內容。

(重點:讀者友善、流暢易懂) 首先,您得先下載一個壓縮檔案。想要下載該壓縮檔案,只需造訪此處並依據您所在的地區進行選取即可。當壓縮檔案下載完畢後,接著就需要將其內容解壓出來。

(重點:用字通俗、語氣親切)
相關數據:
  • 根據amazon宣佈的資訊, dynamodb每天處理超過20萬億個請求。 來源: amazon web services
  • 2019年時,dynamodb的全球市場份額達到10.8%,在nosql數據庫領域中佔有一席之地。 來源: statista
  • 2020年,在雲端數據庫管理系統市場上,dynamodb的復合年增長率(cagr)預計將達到21.1%。 來源: marketsandmarkets
  • 調查顯示,約有34%的技術專業人士使用dynamodb作為其主要的nosql數據庫解決方案。 來源: stack overflow developer survey 2020
  • `「gartner magic quadrant for operational database management systems」報告中提及, amazon dynamodb因其執行能力和完整性視野而被評為領導者。` 來源: `gartner`

開始使用

在提取完成後,您必須找到名為′DynamoDBLocal.jar′的檔所在位置。一旦找到其源位置,您必須在相同的檔夾中打開終端並運行以下命令。 ′$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb′ 如果此命令無效,則必須檢查您的設備上是否安裝了Java。

要檢查,請在終端中運行以下命令: 如果尚未安裝Java,請參考以下鏈接進行安裝: 對於UBUNTU:https://ubuntu.com/tutorials/install-jre#1-overview 當您按下回車鍵時,您可能會看到類似以下的錯誤:′ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console…′ 但是不用擔心,因為這個錯誤不會影響DynamoDB Local的行為,正如亞馬遜的討論區中解釋的那樣。 要檢查AWS是否已安裝在您的計算機上,您需要打開終端並寫入以下命令: 如果尚未安裝AWS CLI,請參考以下鏈接進行設置: 對於UBUNTU:https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html 如果已經安裝了AWS CLI,則可以進行下一步。 下一步是在終端中運行′$ aws configure′命令。

在這裡,如果您已經有了憑證,則只需按回車鍵。也可能存在您沒有憑證的情況。在這種情況下,會以′[none]′結尾顯示以下詳細資訊: AWS Access Key ID AWS Secret Access Key Default region-name Default output format 如果遇到這種情況,則必須填寫正確的憑證。

在此步驟中要格外小心,因為它可能會更改配置。 為了檢查表的清單,您需要在live server上輸入以下命令: ′$ aws dynamodb list-tables′ 當您輸入此命令時,您將看到所有可用於live server的表的列表。 之後,下一步是檢查本地服務器上的表格。

為此,您需要輸入以下命令: ′$ aws dynamodb list-tables --endpoint-url http://localhost:8000′ 當您按回車鍵時,您將看到本地主機上沒有表格。這意味著您需要從live server中獲取所有表格。為此,您需要遵循一些步驟,包括: 將live table匯出為JSON格式 在本地創建一個表格 導入JSON檔(數據)到本地創建的表格中 讓我們逐步看看這些步驟。

從表格中導出數據至JSON格式 要將數據從表格導出為JSON格式,您需要在終端上寫入′$ aws dynamodb list-tables′。在這裡,您需要選擇一個表格,假設您選擇了table_name。現在您需要執行以下命令: ′$ aws dynamodb scan --table-name table_name > file_name.json′ 通過這樣做,您將創建一個名為′file_name.json′的JSON檔,其中包含之前存在於live server上的Table_Name表的所有數據。

現在,下一步是為本地創建一個名為table_name的新表格,在這裡您將導入該JSON文件。在我們本地創建該表之前,我們需要有相同的來自live server上該表格的資訊。目前,我們正在處理一張名為table_name的表。

要獲取資訊,讓我們在CLI上寫入以下內容: ′$ aws dynamodb describe-table --table-name table_name′ 在這裡,我們需要瞭解使用的AttributeDefinitions和KeySchema。要查看它們,請參考此鏈接:Table Attribute Definition 現在使用KeySchema和AttributeDefinitions的詳細資訊,我們將為本地創建相同的表格(複製table_name)。創建一個項目,具有以下檔結構: 在文件中,createTable.js中寫下以下代碼: var AWS = require(′aws-sdk′); AWS.config.update({ region: ′us-west-2′, endpoint: ′http://localhost:8000′ }); var dynamodb = new AWS.DynamoDB(); var params = { TableName : ′table_name′, KeySchema: [ { AttributeName: ′id′, KeyType: ′HASH′}, //Partition key ], AttributeDefinitions: [ { AttributeName: ′id′, AttributeType: ′S′ }, ], ProvisionedThroughput: { ReadCapacityUnits: 10, WriteCapacityUnits: 10 } }; dynamodb.createTable(params, function(err, data) { if (err) { console.error(′Unable to create table. Error JSON:′, JSON.stringify(err, null, 2)); } else { console.log(′Created table. Table description JSON:′, JSON.stringify(data, null, 2)); } }); 完成以上步驟後,我們需要安裝JavaScript的AWS SDK。

運行以下命令: 若要檢查表格是否已在本地創建,請轉到CLI並運行: ′$ aws dynamodb list-tables --endpoint-url http://localhost:8000′ 將數據插入表格: 我們將使用file_name.json來插入數據。請記住,我們的數據是帶有屬性值的。現在要在本地表格中插入這些值,輸入以下代碼: var AWS = require(′aws-sdk′); var fs = require(′fs′); AWS.config.update({ region: ′us-west-2′, endpoint: ′http://localhost:8000′ }); var docClient = new AWS.DynamoDB.DocumentClient(); console.log(′Importing movies into DynamoDB. Please wait.′); var allMovies = JSON.parse(fs.readFileSync(′file_name.json′, ′utf8′)); allMovies.forEach(function(movie) { var params = { TableName: ′table_name′, Item: { ′id′: movie.id, // more attributes... } }; docClient.put(params, function(err, data) { if (err) { console.error(′Unable to add movie′, movie.title, ′. Error JSON:′, JSON.stringify(err, null, 2)); } else { console.log(′PutItem succeeded:′, movie.title); } }); }); 要獲取/顯示表格,請在CLI中鍵入以下命令: ′$ aws dynamodb scan --table-name table_name --endpoint-url http://localhost:8000′ 要進行選擇操作,命令如下: ′$ aws dynamodb get-item --table-name table_name --key {′id′: {′S′: ′f243fa32-8c5c-4ec1-bb2d-ceb2ec5257a2′}} --endpoint-url http://localhost:8000′ 其中,“--key”參數用於選擇操作所使用的選擇依據。

最後,您有了自己在本地創建的表格。根據您的喜好,可以進一步使用此表格。

留言

文章隨選