我正在開發一個 Spring Boot REST API,它必須根據搜索條件從 dynamoDB 獲取大量資料(1 或 2 GB)并將回應回傳給 API 使用者。回應時間并不重要,但資料量很重要。哪個是正確的工具/服務?DynamoDB 分頁是否足以滿足我的要求,還是我需要使用任何型別的流式傳輸?
我嘗試了 dynamoDB 分頁,它需要更長的時間并且可擴展性最低。我還嘗試使用 Java Completable future 來使用各種執行緒拆分請求,但這似乎不是一個正確的解決方案。
uj5u.com熱心網友回復:
從 DynamoDB 的每個請求讀取 GB 的資料似乎不可擴展。最終用戶是否需要所有這些資料,目的是什么?
DynamoDB 每個請求只能回傳 1MB,因此對于單個最終用戶 API 呼叫,您必須向 DynamoDB 發出許多分頁請求。
如果您正在使用,Scan那么您的解決方案根本無法擴展,我可能會建議使用不同的資料庫。
uj5u.com熱心網友回復:
一般來說,這不是 REST 的好用例。您是否考慮過將查詢結果存盤在 S3 中?
您的 REST API 將回傳一個任務 ID,然后您可以使用它來檢查查詢的進度并最終下載結果。
通過這種方式,您可以獲得無限的可擴展性,并且可以運行大量的并行發電機掃描或查詢。
uj5u.com熱心網友回復:
動態資料庫
以亞馬遜使用它的方式思考 DDB,對于電子商務 - 分頁資料的小 100 秒串列,專案通常很小,但專案必須易于更新
在這種情況下,您永遠不需要從表中存盤/獲取 GB 的資料
您的需求是“我們如何……”的問題
我們如何在 AWS 中存盤 GB 的資料并快速檢索這些資料?
AWS 最佳實踐
在我們深入解決上面的“hmw”問題之前,我們需要了解 AWS 的一些核心原則
- 卓越運營
- 安全
- 可靠性
- 性能效率
- 成本優化
- 可持續性
AWS 將這些原則或“支柱”稱為架構完善的框架
您可以在此處閱讀有關這些內容的更多資訊https://aws.amazon.com/architecture/well-architected/
它們中的大多數都如所描述的那樣:監控、安全性、可靠性、性能、成本效益、計算成本低(這意味著環保)
龐大的自助解決方案
貯存
您的需求是 GB 資料的存盤
它仍然取決于您要在此處存盤的內容,但對于大多數存盤需求,您將使用 S3
為了確保我們的東西“符合”架構完善的框架,我們需要啟用加密(傳輸中、靜態)、阻止公共存盤桶訪問等。
為了使一切都具有成本效益,我們必須考慮何時要訪問這些資料。如果定期訪問,那么我們將不得不使用“熱”存盤,否則“冷”存盤 S3 選項更便宜,但您會犧牲檢索時間。
值得注意的提及
如果您有特定的資料科學需求,您應該查看:Data Lakes(仍然在后臺使用 S3)、Glue、Athena(S3 之上的查詢層)
如果您正在存盤基于文本的資料并需要使用 OpenSearch 進行近乎即時的搜索和檢索 - 這對于聊天相關資料非常有用
資料存盤
這取決于您的應用程式,但大多數人仍然保留一個 DynamoDB 表作為 S3 查詢的映射。
當您完全了解資料查詢或訪問模式時,DDB 是查詢優化和超高性能。
圍繞訪問模式而不是物體來設計表格。
例如。
Option 1: One table
PK SK
type#order timestamp
type#transaction timestamp
....
Option 2: Multiple Entity based tables
Order table,
PK SK Attr
id timestamp productIDs
Transactions table
PK SK Attr
id timestamp amount, orderId
Products table
PK SK
id category
單表設計只是簡化了少量或請求資料的檢索,但您確實需要使用您的表設計,直到它恰到好處。
我的建議:要有創意,根據您的需要混合搭配餐桌樣式。基于物體的表在大多數應用程式中仍然有用。
一旦你發現新事物,也期望重做你的桌子。
在這里使用基礎設施即代碼工具來簡化和重新創建表是至關重要的——CDK 非常適合這一點。
請記住,您按讀取和寫入單位計費。這是一個精心設計的表(以匹配您的訪問模式)將幫助您以低成本進行簡潔查詢的地方。
資料檢索
這是您有一些選擇的地方,具體取決于您的應用
我再次推薦在 S3 而不是 DynamoDB 中存盤大專案,因此在這種情況下,從 S3 下載 GB 的資料相對容易。
您還可以使用 parquet 以優化的格式存盤資料。
此外,如果您選擇使用 DynamoDB 作為 S3 存盤桶的哈希映射,您可以快速找到您的檔案和位置,然后將它們放入佇列中,以便在后臺進行檢索。
您還可以將存盤桶中的檔案復制到作業檔案夾,壓縮資料并向用戶提供該壓縮檔案的 URL。
您還可以使用 DataSync 跨存盤桶進行復制。
最后的筆記
在我看來,您將資料存盤在 AWS 中并下載進行處理。
大多數團隊通過將他們的處理和存盤轉移到 AWS,在云中運行整個程序來解決這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525618.html
