簡體   English   中英

App Engine:存儲大於1MB文本的最佳方法是什么?

[英]App Engine: What is the best way to store >1MB of text?

我想在App Engine NDB中存儲1MB以上的文本,但是NDB的實體大小限制為1MB。 我還能如何存儲1 MB的unicode文本?

我做了很多。 最初,我將文本文件存儲在Google Cloud Storage中,並將文件地址存儲在我的實體中。 但是,我停止這樣做了,因為我發現Google Cloud Storage的API過於不可靠。 我存儲/檢索文件的請求中有很大一部分會在重試時超時並繼續超時(而且我的文件不是很大,大多數文件都在1MB以下)。

為了找到更好的解決方案,我改用了NDB壓縮屬性。 我的文本文件具有很好的可壓縮性,因此壓縮時我的幾乎所有文件都應在1MB的限制之下。 為了簡化操作,我創建了一個自定義屬性(請參見下文)。

我的自定義屬性取決於壓縮的ndb.BlobProperty ,我只向UTF8添加了編碼和解碼。 在某些時候,我將進一步擴展它以在輸入文本超過大小閾值時將文本存儲在Google Cloud Storage中。

如果您希望壓縮文本小於1MB,那么這對您來說將是一個很好的解決方案。 否則,您應該使用GCS Python客戶端,但要注意超時錯誤。

class UTF8BlobProperty(ndb.BlobProperty):
    """
    This is a custom blob property for storing unicode text as utf-8.
    Later, we can add storing to GCS if text is too large.
    """
    def __init__(self):
        super(UTF8BlobProperty, self).__init__(default="", compressed=True)

    def _validate(self, text):
        if not isinstance(text, basestring):
            raise TypeError("Expected a basestring, got %s" % text)

    def _to_base_type(self, text):
        return text.encode("utf-8")

    def _from_base_type(self, text):
        return text.decode("utf-8")

暫無
暫無

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

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