2016-10-01 24 views
6

我知道這個問題可能已經多次提出,但我已閱讀了大多數可用的問題,但沒有發現任何可以完全幫助回答我的問題。正如Firebase團隊所提議的,扇出技術是確保快速讀取數據的推薦方式,但會帶來數據重複的成本。我知道這個問題是主觀的,取決於應用程序,但在節省成本($)和讀取數據方面哪個是最佳解決方案?Firebase扇出 - 最具成本效益的方式?

  1. 在多個子發佈同一節點(保存數據只讀調用一次, 但有冗餘的,因此消耗更多的火力地堡存儲)(參見圖像Firebase Database - the "Fan Out" technique
  2. 後只有一個節點,以及其它參考節點其關鍵(非冗餘和消耗更少的Firbase存儲,但需要讀兩次 - 拿到鑰匙,並獲得關鍵的節點)(見圖片https://stackoverflow.com/a/38215398/1423345

對於背景下,我建立一個非贏利市場應用程序,所以我需要應用最佳的解決方案來平衡兩者之間的成本節約($)和快速讀取數據。

另一方面,讀取兩次(帶寬)vs更大的存儲?哪一個更具成本效益?

回答

8

我會開始說,理想情況下在Firebase中閱讀或只同步需要的內容。因此,您的數據庫查詢通過其他過濾器耦合以使查詢儘可能具體。如果你能指出,那麼你將會建立一個非常聰明的數據結構,這將是成本效益。

現在真正的辯論扇出技術或只是後參考節點因爲我個人比較喜歡Fan-Out並且也成功地使用它所以我只會回答這個技巧,這也會給你提供原因的跡象,讓我不想保留一個參考和所有東西。

  • 首要的是最終用戶體驗和性能。其形式爲大數據塊同步。那麼一般就意味着不是下載小塊瞄準最大可能讓你減少高電池無線電設備使用高電池消耗高帶寬,並保持應用程序更新,並在儘可能快地同步

如果你的目標的那種應用程序的性能,那麼你清楚地看到,扇出是明顯的贏家比其他技術由於以下原因。

  1. 您下載存儲在其中不會讓你的無線留在長等節點A大數據塊。
  2. 當您一次下載整個信息時,您的應用程序的性能會優於其他應用程序。很明顯,我並不是說你應該下載完整的數據庫。 這就是所有關於這個智能平衡,它使你只需要下載什麼是第一次去。
  3. 這並不是說這是唯一的技術,它會給你更快的讀取和更好的數據結構。 還有其他技術,如索引,數據驗證和安全規則,這些技術同樣重要。 所有與正確的數據結構正確耦合會給你更好的性能。
  4. 在你剛剛到其他節點,而不是實際的數據參考的情況下,那麼你可能會在情況最終,你實際上沒有什麼可以炫耀你的用戶。假設您的用戶沒有獲得良好的連接性,因此經過一次閱讀後,您只需提供參考,網絡就會落入。所以,直到網絡再次起來你的用戶沒有看到任何東西,並相信我,這是一個非常糟糕的應用程序的情況。作爲開發者的目標應該是減少這些情況的機會

所以,我會建議你去FAN - OUT技術,因爲它是速度更快,成本有效的,當你看到其他因素如數據過濾,索引和安全規則以及。是的,它有一個很高的存儲使用價格。但是當你沒有快樂的用戶時,存儲的意義何在?這一切都歸結爲個人偏好。但我分享了我的經驗和想法,希望它能幫助你做出正確的決定。

我會鼓勵你通過this了,並有沒有SQL數據建模

更更深的理解不要讓我知道,如果這個信息幫助你。

+1

這是一個很好的解釋!我完全同意,並且很明顯,所有大型社交網絡應用程序都依靠這種扇出技術來擴展。 – Wink