gpt4 book ai didi

google-app-engine - GAE 数据存储 : Normalization?

转载 作者:行者123 更新时间:2023-12-02 08:40:19 25 4
gpt4 key购买 nike

在此上下文中,不是一般关系数据库意义上的规范化。

我收到了用户的报告。这些报告中的数据大致在同一时间生成,使得在一个请求中收集的所有报告的时间戳相同。

我对数据存储还是很陌生,我知道你可以查询属性,你必须捕获祖先实体的键才能向下遍历......所以我想知道哪个性能更好,“写/明智地阅读/等。

我应该怎么做:

选项 1:

  • User(实体,ReportBundle的祖先):一般用户信息属性
  • ReportBundle(实体,Report 的祖先):时间戳
  • 报表(实体):一般数据属性

选项 2:

  • User(实体,Report的祖先):插入一般用户信息属性
  • 报告(实体):时间戳属性和一般数据属性

最佳答案

执行选项 2:

因为,您节省了读写额外实体的时间。您还可以节省数据库操作(最终会节省资金)。

正如我从您的选项中看到的那样,无论如何您都需要检查时间戳属性,因此将其放入报告对象中就可以了,
您的代码也不那么复杂并且更易于维护。

正如 Chris 和评论中提到的,使用数据存储意味着非规范化思维。

最好将数据存储两次,然后再进行复杂的查询,数据设计的目标应该是通过 ID 获取实体。

这样做还可以节省您可能需要的索引数量。了解这一点很重要。

之所以索引数量有限,是因为反规范化。
对于您创建的每个索引,datastore 都会在后面创建一个新表,该表根据您的索引以正确的顺序保存数据。因此,当您使用索引时,您的数据已经存储了不止一次。这种行为的好处是写入速度更快,因为您可以并行写入所有索引表。也读取,因为您已经根据索引以正确的顺序读取数据。

知道这一点,如果只有这 2 个选项可用,则选项 2 会更好。

关于google-app-engine - GAE 数据存储 : Normalization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078981/

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