Google App Engine 数据库
在Google App Engine (GAE)中,数据库功能称为Datastore,这是一个非关系型的分布式数据库,基于Bigtable。不同于传统的SQL数据库,Datastore更像是一种对象数据库,提供高可用性和水平扩展性。在GAE中,数据模型通过继承db.Model类来定义,类似于关系数据库中的表。 1. 实体与模型: - **实体(Entity)**:在Datastore中,每个实例化后的模型类对象被视为一个实体,相当于数据库中的记录。每个实体都有一个唯一的键(Key),可以通过这个键进行操作和查询。 - **模型(Model)**:定义了数据结构,继承自db.Model的类,相当于数据库中的表。模型包含一系列的属性,这些属性定义了实体可以存储的数据类型。 2. 属性与Property子类: - **属性(Properties)**:模型中的属性定义了实体的字段,如db.StringProperty、db.DateProperty等。这些属性必须是db.Property的子类,并可以设置约束,如required=True表示该属性是必需的,choices则限制了属性的可能值。 3. 动态属性与Expando: - **动态属性(Dynamic Properties)**:如果模型继承自db.Expando,那么实体可以动态添加属性,即使这些属性在模型定义中没有声明。然而,动态属性不支持属性验证,且在查询时,只有明确声明的属性才能用于过滤。 4. 存储与更新: - **存储实体**:使用`put()`方法将实体保存到Datastore中。例如,创建一个Pet实体后,调用`put()`方法即可将其写入数据库。 - **更新实体**:对实体的属性进行修改后,再次调用`put()`方法,会覆盖原有数据。 5. 缓存机制与用户相关属性: - **模块缓存**:GAE中,模块会被缓存和重用,因此不应在模型配置中使用用户相关的数据作为属性的默认值,以防止不同用户间的数据混淆。 6. 查询与过滤: - **查询(Querying)**:Datastore提供了丰富的查询功能,包括对属性的比较、组合条件等。例如,可以使用`filter()`方法根据属性值筛选实体。 7. 数据一致性与事务: - **数据一致性(Consistency)**:GAE的Datastore提供了最终一致性的读取,这意味着在写入后,可能需要一段时间读取到最新数据。 - **事务(Transaction)**:尽管是非关系型数据库,但Datastore支持多实体的原子事务,保证了一组操作的完整性。 8. 关联与索引: - **关联(Relationships)**:在Datastore中,关联通常通过键(Key)间接实现,而不是外键。 - **索引(Indexes)**:为了支持复杂的查询,需要预先定义索引。不过,这也会增加写入操作的成本,因此需要权衡查询效率和存储成本。 9. 异常处理与性能优化: - **异常处理**:在操作Datastore时,可能会遇到如`db.Error`或`db.Timeout`等异常,需要进行适当的错误处理。 - **性能优化**:减少读写次数,合理设计模型和查询,以及使用预定义索引,都是提高Datastore性能的重要策略。 10. 负载均衡与数据分布: - **负载均衡**:由于Datastore是分布式的,能自动处理负载均衡,确保服务的高可用性。 - **数据分布**:数据自动分布在多个节点上,提高了系统的容错能力。 Google App Engine的Datastore提供了一种灵活且强大的数据存储解决方案,适合构建大规模、高并发的应用。然而,开发者需要理解和适应其非关系型特性和特定的查询语法,以便有效地利用这一服务。
剩余11页未读,继续阅读
- Kevin.Yang2013-10-31可以一用!
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助