2017-03-12 37 views
3

我:檢查有效地串對於大型數據集

  • 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天內完成
      • 這將需要額外的緩存空間;此外,從緩存中刪除頻繁會產生卡桑德拉
    +0

    怎麼樣運行選項2次,並創建一個高速緩存(可以是外部資源),併爲將來的更新使用過濾機制,存儲 – HRgiger

    回答

    2

    一個更好的辦法墓碑使用起來會像SOLR我們ElasticSearch的搜索引擎。全文檢索是他們的專長。您可以輕鬆地將數據從cassandra轉儲到Elasticsearch,並在ElasticSearch之上實現您的java作業。

    編輯:

    隨着卡桑德拉您可以申請結果查詢作爲JSON和Elasticsearch只有在JSON「說話」,所以你就可以非常容易地傳輸數據。

    Elasticsearch

    SolR

    +0

    謝謝您的數據後更新緩存,你能不能更具體地說:「輕鬆地將數據從cassandra轉儲到Elasticsearch」? – Michal

    +0

    @Michal回答編輯 – mel

    相關問題