【问题标题】:Querying azure table without partitionkey and rowkey查询没有partitionkey和rowkey的azure表
【发布时间】:2016-07-27 02:00:26
【问题描述】:

我有一个名为 users 的 Azure 表,其中有多个与用户相关的字段,我有 PartitionKey 作为 UserId,RowKey 作为 CompanyId,我想通过不是 PartionKey 或 RowKey 的电子邮件字段查询表,是否可以查询像这样的桌子?

如果是,那么最好在没有 PartitionKey 和 RowKey 的情况下进行查询

【问题讨论】:

    标签: c# azure azure-storage azure-table-storage azure-tablequery


    【解决方案1】:

    您可以在不使用PartitionKeyRowKey 的情况下进行查询,并且表服务不会抛出任何错误,但请记住,这将从第一个 PartitionKey/RowKey 组合开始进行全表扫描,直到找到匹配实体为止.

    如果您的桌子很小,这可能不是问题。但是,如果您的桌子变大,这将是一个问题。有可能您没有返回任何数据,而只是继续令牌,您需要使用该继续令牌再次查询您的表。

    如果您想查询电子邮件字段,我强烈建议您复制您的数据,以便电子邮件字段变为PartitionKey

    不确定您是否已经阅读过这篇文章,但我强烈建议您阅读 Azure Table Storage Design Guide: https://azure.microsoft.com/en-in/documentation/articles/storage-table-design-guide/

    【讨论】:

    • 我尝试这样做,它返回数据但速度太慢,现在我正在考虑将电子邮件字段保存在RegisteredUser Table
    • it returning the data but its too slow --> 这就是我说的表扫描的意思。如果您使用 Fiddler 之类的工具监控网络流量,您会注意到对 Azure 表存储服务进行了许多调用。
    • 谢谢先生,现在我终于可以通过RegisteredUserEmail table 完成这项工作了。
    • @GauravMantri 将电子邮件字段移动到 RowKey 不是更好吗?电子邮件字段是唯一的,因此如果您使用电子邮件作为分区键,您最终会得到只有一条数据记录的分区。如果我没记错的话,唯一键是你希望在 RowKey 中拥有的东西。顺便说一句,也可以仅在 RowKey 上进行搜索。
    • @Saturation 很可能。然而,性能将取决于PartitionKey 的选择。你对此有何建议?在一个应用程序(我被典当了)中,我说PartitionKey 被选为电子邮件域(例如 hotmail.com),RowKey 被选为电子邮件名称(例如,如果电子邮件是 something@hotmail。 com)。
    【解决方案2】:

    可以,但会是全扫描,而且是使用表存储的最坏情况。

    你应该改变你的设计并且你应该至少使用一个键。 您可以为您的公司创建存储表,并使您的电子邮件成为分区键的一部分。

    注意:图片由article拍摄

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多