暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

跨域数据库论文解读(二)

原创 魏小龙 2023-11-07
229

He3DB在实现跨域功能的过程中,实现唯一性约束将会是一个巨大的挑战。这篇文章,我们一起了解CRDB在实现唯一性约束时的做法。

几乎所有的数据库都依赖索引来执行唯一性约束,而不是通过代价高昂的全表扫描来实现。因此,分区数据库通常只能在分区级别实现唯一性约束。

在CRDB中,带有region by row属性的表,索引是按区域隐式分区的,但是CRDB可以实现不带分区列的全局唯一约束。通过将约束检查在insert或update语句之后作为事务的一部分来实现。为了优化执行检查,优化器使用一种高效的连接算法,在每一个包含数据的区域中,对分区的唯一索引中执行一次点查。为了避免跨域产生的延迟,优化器会在安全的情况下省略这些检查。用户可以通过一下几种方式来减少跨域的检查。

(1)为唯一列使用UUID类型,并让系统使用DEFAULT gen_random_uuid()生成值。由于UUID与此函数冲突的概率可以忽略不计,因此默认情况下不执行唯一性检查。

(2)在唯一性约束定义中显示包括crdb_region。

(3)将crdb_region定义为依赖于为一列的计算列。通过这种方式,相关的为一列成为分区模式中的一部分,因此分区内的唯一性意味着全局唯一性。

尽管实现全局唯一性约束会增加一些insert和update的延迟,但是可以保证全局唯一性约束。基于此,CRDB可以支持具有域内延迟的查询,即本地优化查询。当用户知道自己搜索的是唯一行,但具体位置未知时,可以使用这种优化。CRDB可以先在本地搜索,如果找到了,就不用跨域去搜索。此外,只要最大行数已知,本地优化搜索可以推广到任何有限的行数。

参考文献:Enabling the Next Generation of Multi-Region Applications with CockroachDB**

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论