這個問題已經被張貼在AWS論壇,但尚未亞馬遜DynamoDB(PHP API)仍然沒有答案https://forums.aws.amazon.com/thread.jspa?threadID=94589可笑緩慢寫入
我想執行的項目短一長列的初始上傳(大約1.2億),以後通過唯一密鑰檢索它們,這對於DynamoDb來說似乎是一個完美的例子。然而,我目前的寫入速度非常慢(大約每100次寫入8-9秒),這使得初始上傳幾乎不可能(按照當前的速度大約需要3個月)。
我已閱讀AWS論壇尋找答案,已經嘗試了以下幾件事:
我從單一的「put_item」切換調用的25個項目批次寫入(推薦最大批量寫入大小),我的每件物品都小於1Kb(這也是推薦的)。即使我的25個項目也低於1Kb,這是非常典型的,但它不能保證(無論如何,因爲我知道只有單個項目的大小對於DynamoDB非常重要)。
我使用最近引入的歐盟地區(我在英國),直接通過調用set_region('dynamodb.eu-west-1.amazonaws.com')指定其入口點,因爲顯然沒有其他方法在PHP API中做到這一點。 AWS控制檯顯示該表在適當的區域,因此可以工作。
我已經通過調用disable_ssl()(每100條記錄獲得1秒)來禁用SSL。
儘管如此,100個項目的測試集(25個項目的4個批量寫入調用)永遠不會少於8秒的索引。每批寫入請求大約需要2秒鐘,所以它不像第一個是即時的,因此後續請求很慢。
我提供的表格吞吐量是100個寫入和100個讀取單元,到目前爲止應該是足夠的(嘗試更高的限制以及以防萬一,沒有影響)。
我也知道在請求序列化時有一些開銷,所以我可以使用隊列來「積累」我的請求,但是對於batch_writes真的很重要嗎?我認爲這不是問題,因爲即使是單個請求也需要很長時間。
我發現有些人修改API中的cURL頭文件(特別是「Expect:」)以加速請求,但我認爲這不是一種正確的方式,並且API自從建議已發佈。
我的應用程序運行的服務器也很好 - 我讀過有時CPU負載會經過屋頂,但在我的情況下一切正常,這只是網絡請求花費太長時間。
我現在卡住了 - 還有什麼我可以嘗試嗎?如果我沒有提供足夠的信息,請隨時索取更多信息。
還有其他最近的線程,顯然在同一個問題上here(儘管目前爲止還沒有答案)。
這項服務應該是超快的,所以我一開始就對這個問題感到困惑。
聽起來像你需要像SQL Server這樣的關係數據庫。只需要'SqlBulkCopy'這個數據。如果你問的話,SQL Server就是網絡規模。 –
我不需要關係數據庫(這是一個沒有實際關係的平面索引),但是,如果我沒有其他選項,我正在考慮撤回到mySQL或Solr。但是現在我仍然渴望理解這種方法有什麼問題。 – Yuriy
您的論壇帖子已回覆到:https://forums.aws.amazon.com/thread.jspa?messageID=365597#365597 –