0

我建立與谷歌雲平臺的雲服務,但使用它(但)我沒有太多的經驗存儲圖像和結構化數據一起(谷歌雲平臺)

我的服務將,除其他事項外,存儲具有諸如名稱,說明等屬性的結構化實體。但是,我還希望每個實體都以某種方式與可能具有數十乃至數百個圖像的圖像集合相關聯。

查看存儲選項GCP提供了我的數據的結構化特性,意味着我應該使用數據存儲,並且「非結構化」圖像應該使用常規存儲(可能存儲在文件夾中以保留特定實體的圖像)。

我的問題是a)這是一個合理的方法爲我的用例?

如果是這樣b)我如何將兩件事聯繫在一起?

或如果沒有b)什麼是最好的方式來存儲這些?

回答

2

你的方法聽起來好給我,我會做同樣的方式。

至於數據存儲結構化實體的替代鏈接到圖像,更可擴展的方法與由安德烈沃爾金建議是將有多個映射entitites - 一個每相關聯的圖像,含有作爲屬性:

  • 的數據存儲結構化實體的密鑰(或密鑰ID)圖像

這樣的方法(特別是當與一個結構化實體相關聯的圖像的數量是的優點的

  • 存儲名稱/位置喜GH)是:

    • 上添加/試圖獲取來自多個同時請求

      圖像位置時刪除圖像爲同一結構化實體

    • 在結構化實體本身沒有爭無1個寫入/秒的限制

    • 隨着與結構化實體關聯的圖像數量的增加,性能不會下降(由於需要序列化的實體大小增加);結構化實體的規模仍然很小

    的缺點是,你需要一個額外的查詢,以獲取有關關聯到一個結構化的實體影像的信息。

    如果最終需要,這些映射實體可以包含額外的結構化圖像相關信息。

  • 2

    您的數據存儲實體可能具有包含圖像文件名列表的屬性。假設你把每一個圖像中的「文件夾」,代表了實體ID /名稱,你可以通過簡單地調用(例如)顯示圖像:

    "https://storage.googleapis.com/MY_BUCKET/" + entity.getId() + "/" + IMAGE_NAME; 
    

    在我的幾個項目,我需要存儲更多的數據關於每個圖像,例如其順序,方向和大小。在這種情況下,我創建一個實體來表示數據存儲區中的每個圖像。在某些情況下,我使用嵌入式實體 - 例如,產品實體包含表示與本產品相關的圖像的嵌入式實體列表。這種方法允許我顯示帶有圖像的產品列表,而無需額外的查詢來獲取每種產品的圖像。

    +0

    聽起來非常感謝,是否有可能從給定文件夾中獲取所有Blob,這意味着我只需要存儲文件夾的名稱/基於實體ID的名稱? – DomAyre

    +0

    你可以很容易地在服務器端做到這一點。您可以獲取存儲桶中或存儲桶中文件夾中的所有文件的列表。在我的項目中,關鍵要求是將所有圖像直接從Cloud Storage存儲到Web客戶端,而無需通過App Engine/Compute Engine實例。 –

    0

    我會使用兩種不同類型的實體。恩。 AlbumImages,並使用文件結構使用ancestor path來組織它們。然後我可以很容易地添加一個Comment實體種類作爲Images的子項。

    2個實體[TaskList:default, Task:sampleTask]

    $taskKey = $datastore->key('TaskList', 'default') 
        ->pathElement('Task', 'sampleTask'); 
    

    的實例瞭解更多關於Ancestor paths