惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
L
LangChain Blog
博客园_首页
Recent Announcements
Recent Announcements
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
爱范儿
爱范儿
博客园 - 叶小钗
博客园 - 【当耐特】
The Cloudflare Blog
J
Java Code Geeks
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans

博客园 - 沙加

前端设计模式之 MPVC Part 3 前端设计模式之 MPVC Part 2 前端设计模式之 MPVC Part 1 常用跨浏览器效果 同步请求真的有那么恐怖? Google Closure 的单元测试纪要 双飞翼布局的选区问题 一个 JS 面试题目 HTML 5 之旅 part 1 - 无头苍蝇 bind, delegate, live 三者的区别 Objective-C 学习笔记 - part 12 - 多线程 Objective-C 学习笔记 - part 11 - 错误处理 Objective-C 学习笔记 - part 10 - 选择器 Objective-C 学习笔记 - part 9 - 静态标记的类型 Objective-C 学习笔记 - part 8 - 快速枚举 Objective-C 学习笔记 - part 7 - 相关引用 Objective-C 学习笔记 - part 6 - 类别与扩展 Objective-C 学习笔记 - part 5 - 申明属性 Objective-C 学习笔记 - part 4 - 协议
App Engine 缓存与数据一致性
沙加 · 2012-10-09 · via 博客园 - 沙加

数据一致性:

NDB由于是具有最终一致性特点的分布式数据存储,因此在数据存储时需要进行恰当的数据建模。在同一个实体集里面,所有根实体(无 parent )的实体在 id 分配上保证不重复,具有相同 parent 的实体也保证不会出现重复 ID,换句话说 id 的相对唯一性是由 parent 决定的。同时,在使用 multi_get 时也必需是取同一 parent 的实体。

Ancestor 和按 id 查询时保证一致性,但是对整个实体集的查询不保证一致性,因为实体的写入分两个阶段,提交阶段和应用阶段,第一阶段中,CommitLog记录成功即认为写入成功,第二阶段更新索引,在索引更新前非Ancestor或 id 查询看不到结果,Ancestor 及 id 查询即使索引未更新也能返回正确结果。

因此要正确使用 Ancestor 查询,一个典型的场景:比如多个答案属于一个问题,即可指定答案的 parent 为问题,添加新问题后立即查询问题下的所有答案将总是能看到新答案,而使用索引的,针对全部回答的按时间排序的“最新答案”有可能看不到最新添加的答案(索引未更新)。

缓存部分:

在新的NDB数据存储中,GAE提代了两级缓存,1. InProcess 2. Memcache 一级缓存只作用于当前请求过程,2级缓存会在查询时自动缓存,并能在实体属体改动后自动失效。但无论命中哪种缓存,因为是按实体查询次数计费的,因此对计费无影响,真黑 ~~~

因此有必要在程序中设计一层自己的 In-process 缓存这样可以省钱。在考虑以实体的类型+id 作为缓存键值时还应该考虑 parent 节点,以避免键冲突的可能。