簡體   English   中英

django-storages aws s3 成本降低和計算

[英]django-storages aws s3 costs reduction and calculation

我想計算並降低我在 s3 上的文件存儲成本。

我已將我的 django 應用程序部署到歐羅巴(法蘭克福)eu-central-1 的彈性豆莖。 目前我使用一個 t2.micro ec2 實例、一個 db.t2.micro PostgreSQL 數據庫和一個附加的標准 s3 存儲桶,位於彈性豆莖的標准存儲桶旁邊。

我認為 ec2 和數據庫的成本很容易管理,因為在免費層之后我想使用保留實例。 但是 s3 的成本讓我擔心。

用戶可以將文件上傳和下載到我的應用程序。 我的 django 應用程序使用 django-storages 來管理文件,但我不知道后台發生了什么以及我必須支付的費用。

例如,我有一個存儲 class 和一個帶有文件字段的 model :

class PrivateMediaStorage(S3Boto3Storage):
    location = 'private'
    default_acl = 'private'
    custom_domain = False
    
class Document(models.Model):
    name = models.CharField(max_length=255)
    ...
    
class FileDocument(models.Model):
    document = models.ForeignKey('documents.Document', on_delete=models.CASCADE, related_name="files")
    file = models.FileField(storage=PrivateMediaStorage())
    ...

- - 上傳

我存儲用戶上傳的文件,如下所示:

document = Document.objects.get(...)

files = request.FILES.getlist('files[]')

if files:
    for file in files:
        try:
            file_obj = FileDocument.objects.get(name=file.name, document=document)
            file_obj.file.save(file.name, file)
            file_obj.save()
        except FileDocument.DoesNotExist:
            file_obj = FileDocument()
            file_obj.name = file.name
            file_obj.document = document
            file_obj.file.save(file.name, file)
            file_obj.save()
...

我認為這可能是一個 PUT 請求,因為我必須在我的區域內支付 0,0054 美元/1000 個請求。 正確的?

- - 下載

如果用戶想下載文件,我返回 url:

...
file = get_object_or_404(FileDocument, pk=pk)
return Response({'url': file.file.url, })

這是哪個請求? GET 請求? 一個 GET 請求的費用為 0,00043 美元/1000 個請求。 但是如果用戶打開返回的 url 也是一個 GET 請求嗎?

- - 獲取所有文件

在前端,用戶獲取屬於特定文檔的所有文件的列表。 目前我返回一個文件的文件列表,如下所示:

document = get_object_or_404(Document, pk=pk)
serializer = FileDocumentSerializer(document.files.all(), many=True)
return Response(serializer.data)

我為此使用了 django rest 框架序列化程序:

class FileDocumentSerializer(serializers.ModelSerializer):
    class Meta:
        model = FileDocument
        exclude = ['document',]

這是什么樣的要求? document.files.all()中的每個文件也有 GET 請求? 在前端,只有名稱很重要。 如果我將文件名存儲在FileDocument model 中,並在序列化程序中排除file字段而不是不發送 GET 請求? 這能降低成本嗎?

如果我不了解 django 存儲何時以及發送什么樣的請求,我認為計算成本非常棘手。

我知道我沒有談論數據庫和文件存儲空間的成本。 我認為我可以忽略存儲成本,因為此時我無法在不限制用戶體驗的情況下降低成本。 此外,一開始我計划有 100 或 150 個用戶,我認為每個用戶上傳的數據少於 1 GB。

感謝幫助!

您可以使用 aws https://calculator.aws/提供的成本計算器。 創建一個估計並將資源用作 s3。

你可以輸入你的文件傳輸大小,不。 s3 上存在的請求和數據,您可以得到一個估計值以及導致該估計值的計算。

對 s3 獲取任何數據的任何請求都是獲取請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM