我来自关系数据库世界,然后我发现了这个 Datastore 的东西。花了几天时间才弄明白。好吧,我有一些发现。
您一定已经知道 Datastore 是按比例构建的,而这正是它与 RDMBS 的区别所在。为了更好地扩展大型数据集,App Engine 进行了一些更改(有些意味着很多更改)。
RDBMS VS DataStore
结构
在数据库中,我们通常将数据构建在 Tables 中,Datastore 中的 Rows 变成Kinds 和 Entities。
关系
在 RDBMS 中,大多数人遵循一对一、多对一、多对多的关系,在数据存储中,因为它有“无连接”的东西,但我们仍然可以使用“ ReferenceProperty ”实现我们的规范化“例如一对一关系示例。
索引
通常在 RDMBS 中,我们制作主键、外键、唯一键和索引键等索引,以加快搜索速度并提高数据库性能。在数据存储中,您必须为每种类型创建至少一个索引(无论您喜欢与否,它都会自动生成),因为数据存储会根据这些索引搜索您的实体,相信我这是最好的部分,在 RDBMS 中,您可以使用搜索非索引字段虽然需要一些时间,但它会。在 Datastore 中,您无法使用非索引属性进行搜索。
计数
在 RDMBS 中,计数(*)要容易得多,但在数据存储中,请不要以正常方式思考它(是的,有一个计数功能),因为它有1000 个限制,并且它会花费与实体一样多的小操作不好但我们总是有好的选择,我们可以使用Shard Counters。
RDMBS 中的独特约束,我们喜欢这个功能,对吧?但是Datastore有它自己的方式。您不能将属性定义为唯一的:(。
Query
GAE Datatore 提供了一个更好的功能,非常LIKE(哦,不!数据存储没有 LIKE 关键字)SQL,即GQL。
数据插入/更新/删除/选择
这是我们都感兴趣的地方,因为在 RDMBS 中,我们需要对插入、更新、删除和选择进行一次查询,就像 RDBMS 一样,Datastore 有 put、delete、get(不要太兴奋)因为 Datastore在写入、读取、小型操作(数据存储调用的读取成本)方面进行放置或获取,这就是数据建模发挥作用的地方。您必须最小化这些操作并保持您的应用程序运行。对于减少读取操作,您可以使用Memcache。