我正在使用Google App Engine Python SDK开发我的第一个Web应用程序。
我知道GAE处理扩展,但我只是想知道我是否正确地考虑数据库设计。
例如,如果我有一个存储所有用户名的用户类,哈希pw等,我想,一旦我有很多用户,从这个用户类读取就会很慢。
我没有拥有一个巨大的用户数据库,而是将其拆分,以便我有一个UserA类,它存储以A开头的用户名的所有用户信息?所以我有一个UserA类,UserB类等。这会让用户的阅读/写作更有效吗?
如果我在我的应用程序上销售衣服,而不是只有一个服装类,我会按类别拆分,所以我有一个仅存储衬衫的ShirtsClothing类,只存储裤子的PantsClothing类等?
我在这里走在正确的轨道上吗?
答案 0 :(得分:2)
我想,一旦我有很多用户,请阅读此User类 会很慢。
不,读取一定数量的条目需要相同的时间,无论有多少其他未读条目,只有少数或数十亿条。
相反,如果在给定查询中您只需要实体字段的子集,请考虑projection queries。
“Sharding”(例如,用户首字母,服装类别等)通常无法提高应用的可扩展性。如果您需要基于多个不等式的查询,则可能会出现一个例外:数据存储区本身支持每个查询仅一个字段的不等式约束,并且可能一些分片可能有助于缓解这种情况。但是,就像所有非规范化的ilks一样,这严格依赖于应用程序:您需要执行哪些查询,以及性能约束/目标。
有关可伸缩性实践的一些好建议,请考虑Google's own essays。