Nosql 为社交网络建模azure表存储的有效方法

Nosql 为社交网络建模azure表存储的有效方法,nosql,azure-table-storage,Nosql,Azure Table Storage,我在SQLServer中有这样的表 用户 用户ID(唯一) 名字 年龄 朋友 用户ID FriendId 主题 用户ID 主题 可能有数千个用户。表中还有其他几个属性 我可以查询得到以下答案 给我用户“汤姆”的所有朋友 给我“汤姆”创造的所有主题 给我汤姆的朋友们创建的主题中包含“abc”的所有主题 如果要在Azure表存储中执行此操作,我应该如何构造表? 我已经经历过,我希望有人在Azure表存储建模方面有更多的经验,能够提供一些见解。1和2非常简单。您创建了两个Azure表—按用

我在SQLServer中有这样的表

用户

  • 用户ID(唯一)
  • 名字
  • 年龄
朋友

  • 用户ID
  • FriendId
主题

  • 用户ID
  • 主题
可能有数千个用户。表中还有其他几个属性

我可以查询得到以下答案

  • 给我用户“汤姆”的所有朋友
  • 给我“汤姆”创造的所有主题
  • 给我汤姆的朋友们创建的主题中包含“abc”的所有主题
  • 如果要在Azure表存储中执行此操作,我应该如何构造表?
    我已经经历过,我希望有人在Azure表存储建模方面有更多的经验,能够提供一些见解。

    1和2非常简单。您创建了两个Azure表—按用户id(键中包含用户id)索引的朋友和主题

    第三个问题对于Azure表来说要困难得多,尤其是“主题中包含'abc'的”部分

    Azure表不支持全文搜索。基本上,只有使用精确的键或使用“startswith”操作符才能有效地检索值(或值的范围)。比如“给我所有记录,其中key等于‘key-value’”。或者“给我所有键大于‘键下限’且小于‘键上限’的记录”

    也可以使用“startswith”按记录的任何非键字段进行筛选,但这将涉及表扫描,效率低下。使用“contains”进行类似的过滤是不可能的


    因此,我认为您需要在此处提供全文搜索支持。

    感谢您的回复。1用户将有许多朋友并创建许多主题。在这种情况下,我不能将UserId作为行键,可以吗?谢谢全文搜索提示。我会研究这个[链接]()好的,你需要在键中加入其他东西,比如创建时间。键是字符串,因此需要确保它们是可排序的。因此,密钥看起来类似于“000016962620120301T200000”。然后,要查询某个用户和时间范围的所有记录,您可以使用范围[“0000169646,rangestart”,“0000169646,rangeend”]中的键查询所有记录。查询用户请求最大时间范围的所有记录