如何在 Google App Engine 中高效扩展数据库?
How to scale database efficiently in Google App Engine?
我正在使用 Google App Engine Python SDK 开发我的第一个 Web 应用程序。
我知道 GAE 处理缩放,但我只想知道我是否以正确的方式考虑数据库设计。
例如,如果我有一个存储所有用户名、散列密码等的用户 class,我想一旦我有很多用户,从这个用户 class 读取将是慢。
与其拥有一个庞大的用户数据库,不如将其拆分成一个 UserA class,它存储以 A 开头的用户名的所有用户信息?所以我有一个 UserA class、UserB class 等。这会使用户 reading/writing 更有效率吗?
如果我在我的应用程序上销售衣服,而不是只有一件衣服 class,我是否可以按类别将其拆分,以便我有一个仅存储衬衫的 ShirtsClothing class,一个 PantsClothing class 只存放裤子等?
我走的路对吗?
I'd imagine that once I have many users, reading from this User class
would be slow.
不,读取一定数量的条目需要相同的时间,无论周围有多少其他未读条目,很少或大量。
相反,如果在给定查询中您只需要实体字段的一个子集,请考虑 projection queries。
"Sharding"(例如,按用户首字母、服装类别等)通常不会提高应用的可扩展性。如果您需要基于多个不等式的查询,则可能会出现一个例外:数据存储本机支持每个查询仅对一个字段进行不等式约束,也许某些分片可能有助于缓解这种情况。但是,就像所有类似的非规范化一样,这严格来说是 application-dependent:您需要执行哪些查询,性能如何 constraints/goals。
有关可扩展性实践的一些好的技巧,请考虑 Google's own essays 这个主题。
我正在使用 Google App Engine Python SDK 开发我的第一个 Web 应用程序。
我知道 GAE 处理缩放,但我只想知道我是否以正确的方式考虑数据库设计。
例如,如果我有一个存储所有用户名、散列密码等的用户 class,我想一旦我有很多用户,从这个用户 class 读取将是慢。
与其拥有一个庞大的用户数据库,不如将其拆分成一个 UserA class,它存储以 A 开头的用户名的所有用户信息?所以我有一个 UserA class、UserB class 等。这会使用户 reading/writing 更有效率吗?
如果我在我的应用程序上销售衣服,而不是只有一件衣服 class,我是否可以按类别将其拆分,以便我有一个仅存储衬衫的 ShirtsClothing class,一个 PantsClothing class 只存放裤子等?
我走的路对吗?
I'd imagine that once I have many users, reading from this User class would be slow.
不,读取一定数量的条目需要相同的时间,无论周围有多少其他未读条目,很少或大量。
相反,如果在给定查询中您只需要实体字段的一个子集,请考虑 projection queries。
"Sharding"(例如,按用户首字母、服装类别等)通常不会提高应用的可扩展性。如果您需要基于多个不等式的查询,则可能会出现一个例外:数据存储本机支持每个查询仅对一个字段进行不等式约束,也许某些分片可能有助于缓解这种情况。但是,就像所有类似的非规范化一样,这严格来说是 application-dependent:您需要执行哪些查询,性能如何 constraints/goals。
有关可扩展性实践的一些好的技巧,请考虑 Google's own essays 这个主题。