【问题标题】:Azure table storage with different PartitionKey but same object?具有不同 PartitionKey 但对象相同的 Azure 表存储?
【发布时间】:2012-06-24 17:57:44
【问题描述】:

如果我有一个对象“学生”,它将与 2 个“课程”对象相关联,我想我需要先使用分区键“Class1_Student1”将学生添加到 Azure 表,然后再使用“Class2_Student1” '。

考虑到这是除了 PartitionKey 之外的相同 Student 对象,这是 azure 中的重复对象吗?或者这是否以某种方式(可能被 RowKey 识别?)作为同一个对象?

因此,如果我将那个学生从任何课程的 azure 表中拉出来并更新它,我希望我能获得任何其他课程请求的更新版本。

Azure 如何处理这个问题,我需要做些什么来获得我想要的功能吗?

【问题讨论】:

    标签: azure-table-storage


    【解决方案1】:

    在 Windows Azure 表中,实体的标识是它的分区键和行键,因此对于 Windows Azure,您有两个完全不相关的学生。

    如果你更新一个,它不会影响另一个。

    我可以想出两种策略来获得我认为你想要的东西:

    1. 标准化。在关系数据库领域,这是标准做法。在每个“课程”中,您将只有一个对 Student1 的reference。在“学生”表中,每个学生只会出现一次。
    2. 自行维护非规范化方案。因为 Windows Azure 表中没有跨分区事务,所以这很棘手。我建议使用队列...每个更改(“将 Student1 的地址更新为 foo”)都需要在队列中进行,并且队列消息仅在 所有 更新完成后才被删除(在所有相关课程)。这样,如果您的进程在更新学生的过程中死机,则可以稍后继续完成工作。

    【讨论】:

    • 好的,所以后续问题 - 似乎我通常(在 sql 世界中)会让学生包含课程的 fk。但是你说每门课程都会参考每个学生?无论哪种方式,我想问题是如何添加参考?如果您的意思是每个课程(或学生)对象都有一个对其对应的引用作为对象的属性,那么我知道该怎么做。但是,如果通过引用您的意思是其他一些我不知道的天蓝色的东西。或者也许这些类型的关系意味着我应该使用 SQL azure?
    • 我的意思是不要存储整个学生,而是存储密钥。很像关系数据库中的外键,但没有关系数据库对外键进行的一致性检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多