gpt4 book ai didi

c# - GAE 数据存储 - 如何创建非索引实体属性

转载 作者:行者123 更新时间:2023-11-30 21:36:39 24 4
gpt4 key购买 nike

我正在使用 GAE 灵活环境、.Net 和数据存储。我遇到的问题是我无法弄清楚如何删除 Datastore 自动添加到实体的每个属性的索引。

我知道我可以查看 GCP 站点上的实体并从那里删除索引,但它只会删除该特定实体的索引。添加的任何已知实体仍会索引该属性。

对于某些其他受支持的语言,您可以将一些属性添加到类中,这些属性会告诉 Datastore 不要为该属性编制索引。一定有办法用 .Net 做到这一点,但我还没有找到。

这是一个示例类:

public class MeetingRoom
{
[Key]
[Required]
public long Id { get; set; }

[Required]
public string Name { get; set; }

[DataType(DataType.MultilineText)]
public string Description { get; set; }

public ICollection<Notification> Notifications { get; set; }
}

假设 Notifications 属性永远不会在查询中使用。因此,我不必为每个通知支付拥有子实体的成本,而是简单地 JsonConvert 属性并将其存储为字符串。

生成的实体如下所示:

MeetingRoom room = GetMeetingRoom(34);
Entity entity = new Entity ()
{
Key = room.Id.ToKey(),
["Name"] = room.Name,
["Description"] = room.Description,
["Notifications"] = JsonConvert.SerializeObject(room.Notifications)
}

对于此示例,通知会在一个月后过期并从列表中删除。因此,实体永远不会达到 Datastore 施加的 1MiB 限制。但是,由于 Notifications 是一个索引字符串,因此限制为 1500 个字符。

我一直反对这个 1500 个字符的限制。如果我能弄清楚如何防止数据存储索引该属性,那么我就可以在 1MiB 实体限制内快乐地生活。

谁能帮我解决这个问题?


更新

这是根据 @QuestionAndAnswer 的回答给出的解决方案

在实体中,将 Value 属性的 ExcludeFromIndexes 设置为 true 将阻止对该属性进行索引。

根据我上面的示例,更正后的实体如下所示:

MeetingRoom room = GetMeetingRoom(34);
Entity entity = new Entity ()
{
Key = room.Id.ToKey(),
["Name"] = room.Name,
["Description"] = room.Description,
["Notifications"] = new Value()
{
StringValue = JsonConvert.SerializeObject(room.Notifications),
ExcludeFromIndexes = true
}
}

最佳答案

查看文档中的示例,您应该在实体创建步骤中传递 ExcludeFromIndexes

https://cloud.google.com/datastore/docs/concepts/indexes#unindexed_properties

关于c# - GAE 数据存储 - 如何创建非索引实体属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com