2012-04-19 43 views
1

這些將被索引和隨機訪問像SO問題的Web應用程序。 SimpleDB每個屬性的限制爲1024字節,但您可以使用多個attrs,但聽起來不夠優雅。哪裏可以在亞馬遜aws中存儲10kb的文字片段?

例如:博客文章; Facebook狀態消息;食譜(在博客應用程序;類似Facebook的應用程序;食譜網站)。

如果我要在Amazon AWS上構建這樣的應用程序,我應該在哪裏/如何存儲這些文本?

+1

請展開「隨機訪問在Web應用程序」的含義。 – 2012-04-19 02:56:23

+0

(編輯)一個很好的例子是堆棧溢出問題,在10kb以下說。如果我不得不建立這樣一個Stack Overflow應用程序,人們通常會查看最近的問題,搜索舊的應用程序,最喜歡的應該稍後回顧一下。這就是我在網絡應用程序中隨機訪問的意思。 – necromancer 2012-04-19 05:57:02

+0

@EricHammond,謝謝你看這個問題。原件是在智能手機上輸入的,因此很簡短。我現在在主要問題中增加了更多的例子。 – necromancer 2012-04-19 06:00:29

回答

2

使用S3,您可以將所有實際文件放入S3中​​,然後使用Amazon RDS或PostgreSQL在Heroku或任何適合您的索引編制索引。

此外,您可以讓客戶端直接從S3下載多kB文本blurb,這樣您的應用程序就可以將URL傳遞到消息中,從而創建一個大規模並行服務器 - 即使主服務器只是一個單線程在一臺機器上,從S3資產URL構建頁面。 S3可以存儲所有資產,如圖像等。

優點是很大的。這也解決了備份等問題。並允許您使用許多索引和搜索方案。例如搜索可以使用谷歌...

+0

謝謝(upvoted)。有一個問題是,S3的延遲傳聞最好是100ms以上。另一個問題,不是一個大問題,是要控制誰能看到哪一段文本。後者不是一個大問題,因爲我總是可以擁有一個私人S3存儲桶並且可以輕鬆地提供服務。但延遲時間似乎很重要,不足以成爲一款顯示屏,但可能足以滿足S3的內存緩存需求。這似乎是昂貴的DynamoDB解決方案與最佳延遲之間的選擇; S3 w/medium; RDS具有可伸縮性問題;或捲起我自己的頭痛。嘆!再次感謝! – necromancer 2012-04-23 20:32:47

+0

不要忘記,如果你願意,你可以使用S3鏡像到不同的地區。他們也有云端。如果您將20個資產的S3鏈接放入您的網頁,則瀏覽器將以高度優化的方式並行下載儘可能多的所有資源,因此只需要少量時間即可獲取所有資產,而不是20 * 100毫秒。請參閱https://client.spotdocuments.com/和「testDrive」以查看其中包含許多S3鏈接的網頁到資產 – 2012-04-25 15:07:20

+0

是的,它適用於靜態非許可的內容,但對於諸如狀態消息或帖子,我想控制誰可以訪問它們,我想記錄訪問以跟蹤流行度,所以S3的這些好處並不適用於我的用例,謝謝指出它們,因爲它們適用於其他情況! – necromancer 2012-04-25 20:35:41

1

我想說你會想看看Amazon RDS,在雲中運行像MySQL這樣的關係數據庫。單個DynamoDB讀取容量單位只能(始終)爲read a 1kb-item,這可能不適用於您。

或者,您可以將文本文件存儲在S3中,並將指針指向SimpleDB中的這些文件。這取決於很多因素,這些因素會更具成本效益:每天添加多少文件,這些文件預計會多久更改一次,請求的頻率如何。

個人而言,我認爲使用S3並不是最好的方法。如果您將所有問題和答案存儲在單獨的文本文件中,則您正在查看許多顯示簡單頁面的請求。更別說搜索了,這需要你從S3中獲取所有文件並搜索它們。因此,對於搜索,無論如何你都需要一個數據庫。

您可以使用SDB保留索引,但坦率地說,我只是在Amazon RDS上使用MySQL(現在有一個免費的兩個月試用期,我認爲),您可以在其中完成關係數據庫所有好的事情做,並且還提供對全文搜索的支持。 RDS應該能夠每天擴展到大量訪問者:您可以輕鬆擴展到具有68 GB內存和26個ECU的高內存四倍超大型數據庫實例。

據我知道,所以也是建立在關係型數據庫之上:http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/

+0

感謝您的好建議。 – necromancer 2012-04-20 21:38:24

+0

不客氣。當然,你也可以在EC2實例上安裝MySQL,並且如果你願意的話你可以推出自己的安裝程序 - 你不需要*使用RDS在雲中運行MySQL。對於小型網站,在您自己的EC2實例上運行MySQL可能更便宜,但另一方面,將其全部設置完畢,創建備份,這一切都需要一些時間。時間就是金錢;) – Daan 2012-04-20 21:53:10

+0

是的,精神問題是以云爲導向的,所以到目前爲止最好的候選人是S3,但我需要驗證粒度的延遲,粒度和成本。如果您要強調S3在RDS上的更好的雲特性,我會更願意接受您的答案(在等待幾個之後)。我認爲RDS的規模受到限制。 – necromancer 2012-04-20 22:30:39

1

DynamoDB是可能是你想要的,甚至有一個論壇,用例的文檔中:Example Tables and Data in Amazon DynamoDB

+0

upvoted;限制頁面指出每個項目有64kb的限制。雖然dynamodb很貴。下一個最好? – necromancer 2012-04-19 08:35:04

+0

更新了我的文章(每個項目只有64kb,但對於一個讀/寫容量單元只有1kb) – Daan 2012-04-19 08:43:18

+1

由於您沒有提供有關您的數據大小和用戶的任何估計,因此我無法告訴您它是否很貴,但重點是DynamoDB是非常可擴展的。短期和長期的成本是高度可預測的,從長遠來看,這是一個很大的優勢,而RDS的可預測性較差。 – 2012-04-19 08:58:00

-1

問題中的信息不足以提供合理的答案,「我應該在哪裏存儲我將要使用的文本?」根據您構建應用程序的方式以及對速度,冗餘度,延遲,數量,可伸縮性,大小,成本,健壯性,可靠性,可搜索性,可修改性,安全性等的要求,答案可以是任何:

  • 刪除連接到實例的EBS捲上的文件中的文本。

  • 將文本放入MySQL或RDS數據庫。

  • 將文本拖放到跨多個實例分佈的分佈式文件系統中。

  • 上傳文本S3

  • 存儲文本中的SimpleDB

  • 存儲文本在DynamoDB

  • 緩存中的文本ElastiCache

也有在S3上存儲主副本,在ElastiCache和t中緩存副本等方面有許多變化他使用DynamoDB中的特定密鑰對其進行索引,並使其可在Cloud Search中搜索。

+0

'10kb的文字塊'不'數據塊';業內的進一步通常意味着'二元,大*對象',這顯然不是這種情況。 – necromancer 2012-04-20 21:46:20

+0

@agksmehx:好的,我已經更新了我的答案,以說「文本」。答案依然如此。有很多潛在的地方來存儲文本,哪一個最好取決於問題中未列出的很多因素。 – 2012-04-23 06:08:02

+0

也,我覺得你的名單有問題可以排除的事情;例如,SimpleDB不能存儲超過1024個字符的文件,除非我編寫了相當複雜的代碼並且不利於其設計。其他條目如分佈式文件系統似乎由於其他原因而延伸。雖然不是最好的寫作,但我確實可以從這個問題的例子中推斷出很多特徵(例如參見其他答案)。我很欣賞各種情況,但他們可能會讓其他讀者有類似問題而感到困惑。 – necromancer 2012-04-23 20:38:30