2016-11-01 27 views
0

我使用FireBase push保存名爲Street的項目,並通過右側的自動生成的id獲取Street項目的列表。假設每個Street都有一個節點,如"path" : "unique value"。假設兩個用戶即將插入具有相同"path" : "unique value"的新Street我應該如何處理FireBase中兩個用戶相同的情況數據庫密鑰

有什麼情況發生消除這種適當的方式?這就像一個網店,用戶將物品放入購物籃中,而現在的系統必須預留此物品,直到用戶購買爲止。

我應該創建一個像「reserved_streets」這樣的單獨的FireBase根,並讓用戶將他的保留Street與user.id一起添加,直到他購買它爲止?也許有一個Servlet實例正在運行,刪除10分鐘前的條目。

Street列表可以是非常大的,也許100百萬RAR情況下

回答

1

,以防止火力地堡數據庫重複值的典型方法是將這些值轉換成鍵。

streets: { 
    "-K1234567": { 
    path: "unique path" 
    }, 
    "-K1234568": { 
    path: "unique path 2" 
    } 
} 

都將添加一個額外的結構(或改變現有的結構),它使用的路徑:

所以,如果你目前的模式是(接下來的時間,請在你的問題,請分享這樣一個最小的片段)作爲關鍵字:

pathsToStreets: { 
    "unique path": "-K1234567", 
    "unique path 2": "-K1234568" 
} 

通過這種結構有保證是隻有一條街的路徑,你可以使用該路徑無法覆蓋的安全規則。

+0

我的神,而把他的'street'在籃下也必須他的街頭增添'pathsToStreets'這是優雅的 –

+0

但直到創建了'street'是當然用戶的。現在其他用戶可以檢查'pathsToStreets'並查看'street'是否被保留。如果第一位用戶繼續購買,則會創建「街道」 - 「-K1234567」。我的上帝時間donat –

+0

但是,如果第一個用戶不會購買'street',並且他不會從'pathsToStreets'中刪除條目,因爲設備崩潰或系統故障。也許有一個Servlet實例運行刪除條目。你怎麼看? –

相關問題