社交網路資料庫
『壹』 互聯網時代處理大量流動性數據社交網路數據最好使用哪些類型資料庫
使用現有的主要吸引力一、可擴展的Nosql資料庫
如果您的整個 _active set_ 適合單個機器的主內存(現代商品機器可以高達 128GB +),那麼您就沒有水平可擴展性問題:即,您絕對沒有理由進行分區(「分片") ) 你的資料庫和放棄關系。如果您的活動數據集適合內存,那麼任何帶有索引的適當調整的資料庫都將表現得足夠好,可以在資料庫本身成為限制之前使您的乙太網卡飽和。
如果您認為關系模型本身並不合適,您可以輕松地在 MySQL 之上構建一個「面向文檔的存儲」:這就是 Friendfeed 最終要做的,我會遵循他們的模型(除非我使用 Avro (軟體)、Apache Thrift 或 Google Protocol Buffers 而不是特定於語言的序列化)-
http://bret.appspot.com/entry/how-friendfeed-uses-mysql
如果您的站點變得非常成功,您將擁有一個不再適合您機器的主內存的活動集。在這種情況下,設計不當的存儲引擎的性能會迅速下降。但是,MySQL 的 InnoDB(或 Postgres 的存儲引擎)仍然允許您使用旋轉磁碟保持(取決於您的請求分布)大約 2:1-5:1 的數據與內存比率。一旦超出這個范圍,性能就會開始迅速下降(因為您要為每個請求進行多次磁碟搜索)。現在,您最好的做法是升級到 SSD(固態驅動器),這再次允許您在資料庫成為限制之前使乙太網卡飽和。
最後,當您遇到不適合的數據集大小時,例如,軟體 raid 1 + 0 配置中的多個 SSD(同時為備份、多個版本的數據等提供空間...),那麼您必須水平縮放。也就是說,您必須使用本質上支持分區的資料庫(例如 Riak、Voldemort、Cassandra、HBase),或者在基於 MySQL/Postgres 的數據存儲之上構建應用程序級分區層。我無法告訴您哪種解決方案是正確的,因為我(或您)都不知道您的數據及其訪問模式在那時會是什麼樣子。也就是說,編寫自己的分片層是您可以在代碼中引入額外錯誤的另一個地方:不必構建自己的分布式資料庫(您通過構建分片層有效地做的事情)是使用現有的主要吸引力一、可擴展的NoSQL數據