- 400個000 000行(卡桑德拉3)
- 大約10個000關鍵字
- 兩個數據集列表的數據庫表預計時間長
我需要:
- 檢查,如果指定的列中包含關鍵字
- 金額有多少行包含在列
關鍵字應該選擇哪種方法?
方法1(二級索引):
- 創建二次SASI index on the table
- 尋找特定關鍵字的匹配 「飛」 隨時
- 不過,恐怕
- 能力問題 - 二級指標可能會消耗額外的空間,對於這樣的大型表格,它可能是t OO多
- 性能 - 我不知道,如果行的數百milions中關鍵詞的發現可以在合理的時間內實現
方法2(Java的工作 - 蠻力):
,超過的數據,連續迭代- 的Java工作
緩存是下一個迭代過程中更新
// Paginate throuh data... String page = null; do { PagingState state = page == null ? null : PagingState.fromString(page); PagedResult<DataRow> res = getDataPaged(query, status, PAGE_SIZE, state); // Iterate through the current page ... for (DataRow row : res.getResult()) { // Skip empty titles if (row.getTitle().length() == 0) { continue; } // Find match in title for (String k : keywords) { if (k.length() > row.getTitle().length()) { continue; } if (row.getTitle().toLowerCase().contains(k.toLowerCase()) { // TODO: SAVE match break; } } } status = res.getResult(); page = res.getPage(); // TODO: Wait here to reduce DB load } while (page != null);
問題
- 這可能是通過整個表進行迭代速度很慢。如果我每1000行等待一秒,那麼這個週期將在4.6天內完成
- 這將需要額外的緩存空間;此外,從緩存中刪除頻繁會產生卡桑德拉
怎麼樣運行選項2次,並創建一個高速緩存(可以是外部資源),併爲將來的更新使用過濾機制,存儲 – HRgiger