這一個有點長,所以我不能把它評論...對不起。
我知道這聽起來有點奇怪,特別是對於您的項目的後期階段 ,但事情是與索引的情況下,將不會得到 隨着時間的推移更好。我強烈建議開始製作自己的 表格,而不是將索引放在以下內容上。根據 訪問數據的頻率,您可以使用「倒排索引」。
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放入搜索表中,然後在主表中進行第二次加載。我在一些項目 上使用了這個空間是個問題,但是因爲你已經將所有主要東西編入索引 空間可能不會成爲問題,因爲你已經使用了許多比您想象的更多的 。 (我敢打賭,你也可能在空間上節省很多)
無論如何所有的索引都應該成爲表...如果一致性問題, 使用批次(不要使用物化視圖,因爲你可能會丟失數據)。
我的老實說法是,你遠離索引。我知道 這是地獄重構這個再加上它很難讓時間來重構:(但 我覺得應該是可控的。
你能想到更好的架構無需二次指數?非規範化可能的幫助。 – DineMartine
@DineMartine是基本上只是出於好奇,你可以添加數據模式和訪問查詢的問題?有足夠的材料和堆棧溢出的答案建議不要這樣做:http://stackoverflow.com/questions/43367076/cassandra -cqlsh-not-working-where-clause-on-non-partition-key –
@ marko-Švaljek我們沒有任何關於查詢的問題。現在我們在新節點引導期間索引建立緩慢,例如next 2個索引版本每次運行約2天,那麼我們可以加快這個過程嗎?: 63944d90-196e- 11e7-bfc7-f36cff62987e二級索引構建密鑰空間文檔1348751623 1377995424字節97.88% 8de03eb0-196e-11e7-bfc7-f36cff62987e二級索引構建密鑰空間文檔1145629997 1236396184字節92.66% –