分布式系统中的数据标识与位置无关性
1. 分布式系统的保证
分布式系统能够提供一些重要的保证,这些保证涵盖了从简单明显的,如“能读取到刚写入的数据”,到复杂强大的,如“所有节点最终收敛到相同状态”。在确保这些保证的过程中,往往需要进行权衡,放弃一些保证以换取其他保证。
我们常常期望数据有固定的位置,但在很多情况下,这种保证是无法实现的。相反,我们可以选择一种允许独立于位置访问数据的保证。当我们意识到自己做出了数据存储于特定位置的假设时,就可以选择不同的保证。
2. 身份标识的分离
实现位置无关性的首要任务是将对象的身份标识与其存储位置分离。当位置成为身份标识的一部分时,对象会与该位置的机器产生某种关联。为了达到最佳效果,用户应能够从任何位置轻松识别对象,而无需进行额外的通信。
下面来看看常见的身份标识机制,先从依赖位置的选项开始,如自增 ID 和 URL,然后再比较与位置无关的选项,如 GUID 和哈希。
3. 自增 ID
在涉及关系型数据库时,经常会使用自增 ID。大多数数据库管理系统在插入操作时会自动生成这些 ID。最常见的对象标识方式就是使用插入表时生成的数字。
自增 ID 是生成唯一主键的好方法,它单调递增,非常适合用于聚簇索引。在插入新记录时,使用递增的主键不会导致页面分裂。它也是理想的外键,比被引用表的其他列更紧凑,并且不会改变。大多数数据库管理系统会采取措施阻止或防止对自增列的更新,以保持其唯一性和作为引用的实用性。
然而,自增 ID 虽然在数据库内部表示身份方面表现出色,但在将身份扩展到数据库之外时却不是一个好选择。尽管使用方便使其成为默
超级会员免费看
订阅专栏 解锁全文

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



