0

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

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

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

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

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

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

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

4

3 回答 3

0

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

这是 Azure 上真实生产 neo4j 应用程序的视频:http: //blog.tatham.oddie.com.au/2012/06/18/new-talks-neo4j-in-a-net-world-and-你现在在生产什么/

于 2012-11-23T02:47:12.210 回答
0

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

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

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

于 2012-11-22T19:20:31.560 回答
0

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

于 2012-11-22T11:07:32.353 回答