在Azure上存储非关系数据

时间:2012-11-22 10:56:45

标签: azure nosql azure-sql-database

我们正在为慈善事业建立一个平台,我们希望记录所有正在发生的活动。例如

  • John Doe(链接)已捐赠20美元用于投射需要帮助的儿童(链接)
  • John Doe(链接)已加入团队建筑师(链接)
  • John Doe(链接)成为Dane Doe的朋友(链接)
  • Project Children(链接)发布了一张新照片(照片) ...

所以它类似于Facebook墙。问题是如何在Azure上存储它?目前我们正在使用Azure SQL,然后我们根据我们呈现活动的另一个字段将某些字段存储在JSON中。但我们无法搜索那些非常糟糕的数据等。

我已经检查了Table Services,这是完美的。唯一的问题是性能和订购。很多人说通过非索引字段进行搜索真的很慢+我们需要排序(我不知道这里的默认排序,可能是ASC - 我们需要DESC的地方,其他ASC)。

其他人建议使用Lucene.net,只是为了将数据存储在某个地方并使用lucene索引数据。然后我们可以轻松搜索和订购。唯一的问题是更新索引(当我们在平台上做某事时,它必须立即显示,所以我们不能在1小时左右重建索引)。我知道我们可以更新索引,然后重新索引某些日期更年轻的记录。它可以工作。

第三个选项是安装像mongodb这样的nosql数据库。但在线阅读,没有人确认它是否有效。但我确实注意到Azure商店中有一个mongodb。

你有什么建议?有没有人遇到类似的问题,你是如何解决的?

3 个答案:

答案 0 :(得分:0)

lucene.net是一个很好的解决方案,它可以为您提供近实时搜索。请阅读一本名为“Lucene in action”的书。虽然它适用于java版本,但大多数内容在.net版本中都是相同的。看看它是否可以帮到你。

答案 1 :(得分:0)

实际上,关系数据库表的索引本身就是子表。考虑到这一点,在Azure表存储中维护索引实际上需要有额外的表或行作为索引。您放弃使用NoSQL范例实际上是关系数据库的ACID属性,这是您在应用程序中需要注意的事项。 (如何做到这一点超出了这个答案的范围,取决于你的要求)。

回答您的问题,您需要存储这两个链接以启用高效查询。例如,您的人朋友链接需要具有两种关联;它们可以在相同或两个单独的表中。像John Doe - Dane Doe,朋友和Dana Doe - John Doe,朋友。那么你就可以获得John和Dana的索引,并且能够通过有效的查询获得他们所有的朋友。

如果您确实没有任何可扩展性需求,我建议您使用Azure SQL路由而不是表存储路由。 ACID属性很难在应用层实现,而ACID使关系数据库如此可靠。

答案 2 :(得分:0)

你看过像Neo4J这样的图形数据库吗?

这是Azure上真实生产neo4j应用的视频:http://blog.tatham.oddie.com.au/2012/06/18/new-talks-neo4j-in-a-net-world-and-youre-in-production-now-what/