云数据存储:文档存储全解析
1. 复合索引与查询性能
在数据查询中,有一种索引涉及两个属性,我们称之为复合索引。它需要用户自行定义,若没有这种索引,某些查询将无法运行,这与关系型数据库不同,关系型数据库即使没有索引,查询也能运行,只是速度可能较慢。
当数据发生变化时,索引的更新会影响查询性能。例如,更新电子邮件的属性时,所有复制该数据的索引也需要更新,这就引出了数据一致性的问题。
2. 一致性与复制
像 Gmail 这样的分布式存储系统,需要满足两个关键要求:始终可用和随结果集扩展。这意味着不仅要复制数据,还要为查询创建和维护索引。
云数据存储采用了一种名为两阶段提交的协议进行数据复制。该过程分为两个阶段:
- 准备阶段 :向一组副本发送请求,描述更改并要求副本做好应用更改的准备。
- 提交阶段 :在所有副本确认已准备好更改后,发送第二个请求,指示所有副本应用更改。在数据存储中,这个提交阶段是异步进行的,某些更改可能会处于已准备但尚未应用的状态。
这种安排导致在运行广泛查询时出现最终一致性,即实体或索引条目可能过时。而强一致性查询(如获取单个实体)会先促使副本执行所有待处理的资源提交,然后再运行查询,从而得到强一致性的结果。
在分布式系统中维护实体和索引是一项复杂的任务,因为保存操作还需要更新受影响的所有索引,并且这些索引需要在多个地方进行复制和更新。
数据存储有两种更新选项:
- 同步更新 :同步更新实体和所有索引,但确认操作所需时间
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



