2017-04-14 54 views
1

我們擁有32個節點的cassandra集羣,平均節點大小約爲1TB。節點配置1x英特爾至強E3-1271v3,32GB RAM,2x3TB硬盤。 我們有一個帶有一些小表和一個大表的數據庫,它佔據了總羣集大小的90-95%。DCE Cassandra 3.9加入現有集羣期間緩慢創建二級索引

我嘗試向此羣集添加其他節點,但突然發現,將一個節點添加到現有羣集服務大約需要13-14天才能加入羣集。建立二級索引需要大部分時間,並且所有這一次我看到所有壓縮機線程都採用所有可用的CPU。

我已經改變卡桑德拉config來擴展限制:

  • concurrent_compactors:4
  • compaction_throughput_mb_per_sec:0

Cassandra full config

Schema

是約1年股份公司o我們還向該羣集添加新節點,並將其從16個節點擴展到32個節點羣集,在羣集擴展之前,平均節點大小爲1TB。 Cassandra版本是2.1。一個節點加入時間爲1-1.5天。

那麼問題我們該如何加快這個過程呢?我們錯過了什麼嗎?

感謝。

+2

你能想到更好的架構無需二次指數?非規範化可能的幫助。 – DineMartine

+1

@DineMartine是基本上只是出於好奇,你可以添加數據模式和訪問查詢的問題?有足夠的材料和堆棧溢出的答案建議不要這樣做:http://stackoverflow.com/questions/43367076/cassandra -cqlsh-not-working-where-clause-on-non-partition-key –

+0

@ marko-Švaljek我們沒有任何關於查詢的問題。現在我們在新節點引導期間索引建立緩慢,例如next 2個索引版本每次運行約2天,那麼我們可以加快這個過程嗎?: 63944d90-196e- 11e7-bfc7-f36cff62987e二級索引構建密鑰空間文檔1348751623 1377995424字節97.88% 8de03eb0-196e-11e7-bfc7-f36cff62987e二級索引構建密鑰空間文檔1145629997 1236396184字節92.66% –

回答

0

這一個有點長,所以我不能把它評論...對不起。

我知道這聽起來有點奇怪,特別是對於您的項目的後期階段 ,但事情是與索引的情況下,將不會得到 隨着時間的推移更好。我強烈建議開始製作自己的 表格,而不是將索引放在以下內容上。根據 訪問數據的頻率,您可以使用「倒排索引」。

CREATE INDEX links_by_author_url_idx ON keyspace.links_by_author (url); 


CREATE INDEX docs_url_idx ON keyspace.docs (url); 


CREATE INDEX om_master_object_id_idx ON keyspace.om (master_object_id); 


CREATE INDEX actions_pday_idx ON keyspace.actions (pday); 


CREATE INDEX authors_yauid_idx ON keyspace.authors (yauid); 

CREATE INDEX authors_login_lr_idx ON keyspace.authors (login_lr); 

CREATE INDEX authors_login_idx ON keyspace.authors (login); 

CREATE INDEX authors_email_idx ON keyspace.authors (email); 

CREATE INDEX authors_name_idx ON keyspace.authors (name); 

基本上每次你在這裏的索引,您可以「搜索」在基地 實體通過一些條件來找到它們。大部分條件都是 其實很窄,這是個好消息。但事情是索引 將變得很大(已經),特別是在文檔和作者。但我猜 doc的問題更多。

您應該考慮爲此製作單獨的表格。您創建的每個索引都將在集羣中的每個節點上存在,並且在最後的 中,您將擁有比您真正需要的數據還要多得多的數據,因爲在 之下,每個節點的數據都會相乘。當您將複製因子添加到此 系統正在使用大量空間而您甚至沒有意識到。

加入節點的問題是,當他們接收到新數據全部 時,羣集中的數據需要重建...羣集中的每個單個節點 ,這會花費您很多時間。所以基本上,你會鬆動cassandra擁有的「簡單節點加入」的所有好處。

現在你可能認爲當你寫的是規格化到新架構中的數據 位置會變成問題....

如果空間是你可以使用一個名爲技術問題倒排索引 在那裏你只需將信息的id放入搜索表中,然後在主表中進行第二次加載。我在一些項目 上使用了這個空間是個問題,但是因爲你已經將所有主要東西編入索引 空間可能不會成爲問題,因爲你已經使用了許多比您想象的更多的 。 (我敢打賭,你也可能在空間上節省很多)

無論如何所有的索引都應該成爲表...如果一致性問題, 使用批次(不要使用物化視圖,因爲你可能會丟失數據)。

我的老實說法是,你遠離索引。我知道 這是地獄重構這個再加上它很難讓時間來重構:(但 我覺得應該是可控的。