2012-11-22 109 views
0

我們正在構建一個慈善平臺,我們希望記錄正在發生的所有活動。例如在Azure上存儲非關係數據

  • 李四(鏈接)捐贈了20 $項目需要(鏈接)
  • 李四(鏈接)已加入的建築師團隊(鏈接)兒童
  • 李四(鏈接)成爲朋友與丹麥人多伊(鏈接)
  • 項目兒童(鏈接)發佈了新的照片(照片) ...

所以它類似於Facebook的牆。問題是如何將這個存儲在Azure上?目前我們正在使用Azure SQL,並且我們將某些字段存儲在JSON中,然後基於我們呈現該活動的另一個字段。但我們無法搜索那些非常糟糕的數據等。

我檢查了Table Services這是完美的。唯一的問題是性能和訂購。許多人表示,通過非索引字段搜索非常緩慢+我們需要排序(我不知道這裏的默認排序是什麼,可能是ASC - 我們需要DESC的地方,其他ASC)。

其他人建議擁有Lucene.net,只是爲了在某處存儲數據並使lucene索引數據。然後,我們可以輕鬆搜索和訂購。唯一的問題是更新索引(當我們在平臺上做某些事情時,它必須立即顯示,所以我們不能在1小時左右重建索引)。我知道我們可以更新索引並重新索引某些日期較年輕的記錄。它可以工作。

第三個選項是安裝nosql數據庫,如mongodb。但在網上閱讀,沒有人確認它是否有效。但我注意到Azure商店中有一個mongodb。

你有什麼建議?有沒有人有類似的問題,你是如何解決它的?

回答

0

lucene.net是一個不錯的解決方案,它可以爲您提供近實時搜索。請閱讀一本名爲「Lucene in action」的書。雖然它的意思是Java版本,但大多數的東西在.net版本中都是一樣的。看看它是否可以幫助你。

0

實際上,關係數據庫表上的索引本身就是子表。考慮到這一點,在Azure表存儲中維護索引實際上是具有用作索引的附加表或行的問題。你放棄NoSQL範式的確是關係數據庫的ACID特性,這是你在應用中需要關注的東西。 (如何做到這一點超出了這個答案的範圍,並取決於你的要求)。

回答您的問題,您需要存儲兩個鏈接以啓用高效查詢。例如,你的朋友鏈接需要有兩個關聯;他們可以在同一個或兩個單獨的表格中。像John Doe - Dane Doe,Friend和Dana Doe - John Doe,朋友。然後,你可以在John和Dana上找到一個索引,並且可以通過有效的查詢獲得所有的朋友。

如果您確實沒有任何可擴展性需求,我建議使用Azure SQL路線而不是表格存儲路線。 ACID屬性很難在應用層實現,而ACID使關係數據庫如此可靠。