Google 用于最小化成本和提高性能的 App Engine 数据存储实体设计

Google App Engine Datastore Entity Design for Minimizing Cost and Enhancing Performance

我一直在编写一个 App Engine 应用程序,最近开始担心 App Engine 数据扩展时的成本。

我的应用程序有员工数据。 Employee 实体有很多属性,例如名字、姓氏、生日、地址、phone、手机phone、推荐人、教育背景、培训历史、收入数据等等。未来房产总数可达100家。

起初,我认为我不应该将所有属性打包到一个实体(即 Employee 实体)中,因为每次我只想放置或更新几个属性时,我都必须获取该实体中的所有属性实体中的属性,所以我将实体以一对一关系的方式分解成许多实体,并将用户界面分为选项卡、联系信息选项卡、教育背景选项卡、收入选项卡等。当用户单击选项卡时,数据将从该特定实体加载,并且先前关闭的选项卡上的数据将自动保存。为了性能和成本效率,我将一个大实体分成许多小的一对一关系实体。我这样做也是为了提高分页效率,只为员工列表页面获取最小 属性 数字的小实体。

看完App Engine定价模型后,它是根据每个实体的写入和读取次数来收费的,这意味着我设计实体的方式会增加写入和读取次数。我认为我的设计具有成本效益并且具有更好的性能。我每次获得实体时使用的 CPU 和带宽较少,因为我不需要所有属性一次显示在同一页面上。

或者我应该将实体压缩为一个或几个实体以提高我的应用程序性能并降低成本。对于分页功能,我可以创建一个特定用途的实体来手动处理分页。

如果您的 Employee 实体有许多索引属性,您的方法是正确的。每次更新实体时,都会为每个索引 属性 产生写入成本。因此,将一个实体拆分成更小的部分将显着降低写入成本实体生命周期。换句话说,第一次写入所有这些数据的初始成本可能会略高,但后续每次更新都会便宜得多。

类似的逻辑适用于读取。仅当您的用户会为每个员工单击每个选项卡时,多个实体才会稍微贵一些,这是极不可能的。大多数时候,他们会在需要读取数据或进行更改时转到特定选项卡。

注意:我还必须观察到,除非您拥有数十万用户,否则这些方法之间的美元差异可能不值得您花时间。