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後在客戶端合併結果。

注意:交錯是當一個表中的數據/索引與另一個表中的日期交錯時。你不能只交錯一個表。

相關問題