【问题标题】:Storing nonrelational data on Azure在 Azure 上存储非关系数据
【发布时间】:2012-11-23 10:47:12
【问题描述】:

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

  • 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。

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

【问题讨论】:

    标签: azure nosql azure-sql-database


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        您是否使用过像 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/

        【讨论】:

          猜你喜欢
          • 2019-01-13
          • 2015-08-16
          • 1970-01-01
          • 2011-06-16
          • 2021-09-15
          • 2018-01-28
          • 2012-07-30
          • 2013-08-25
          • 2011-05-15
          相关资源
          最近更新 更多