0

我有一张桌子,里面有一个单调递增的字段,我想把它放入索引中。但是,最佳实践guide表示不会将单调递增的数据放入非交错索引。当我尝试将数据放入交错索引时,我无法在其父表中交错索引。如何索引表中单调递增的数据?

换句话说,我希望Cloud Spanner等价于这个MySQL模式。

CREATE TABLE `my_table` (
    'id' bigint(20) unsigned NOT NULL, 
    'monotonically_increasing' int(10) unsigned DEFAULT '0', 
    PRIMARY KEY ('id'), 
    KEY 'index_name' ('monotonically_increasing') 
) 

回答

3

这实际上取决于您编写单调递增/递减值的比率。

小写负载

我不知道每秒扳手服务器可以处理之前,你会热点(这取决于你的数据)写的确切范围,但如果你正在写< 500行每秒你应该可以用这种模式。如果您的写入负载高于单个Spanner服务器可以轻松自行处理,这只是一个问题。

大负荷写

如果你的写入速率较大,或相对无限的(例如,用你的系统/网站人气最高可扩展至),那么你就需要寻找替代品。这些替代方案真的取决于您的确切用例来确定您愿意采取哪些权衡。

一种通用的方法是手动分割索引。比方说,例如,您知道您的峰值写入负载将为每秒1740次插入。如果我们可以通过4个Spanner服务器(每个服务器的写入次数为435次/秒)将这个负载分解,我们可以避免使用热点。

在Cloud Spanner中使用INT64类型允许最大值为9,223,372,036,854,775,808。一种示例性的方式是通过将random(0,3)*1,000,000,000,000,000,000添加到每个值。这将把索引关键字范围分成4个范围,可以由4个Spanner服务器提供服务。不好的一面是你需要做4次查询并在屏蔽掉x,000,000,000,000,000,000后在客户端合并结果。

注意:交错是当一个表中的数据/索引与另一个表中的日期交错时。你不能只交错一个表。