2012-09-06 87 views
2

在我的情況下,我們爲init的一組查詢定義了行鍵,我們正在查詢行鍵,並將列族和列留在一起。hbase過濾器 - 性能好嗎

例如。行鍵是一樣的東西:

%userid%_%timestamp% 

我們正在做一些查詢,如

select columnFamily{A,B,C} from userid=blabla and blabla < timestamp < blabla 

的表現還算正常,因爲這是HBase的是爲建 - 行鍵擡頭。

但是,由於新需求的建立,我們需要查詢更多的字段:列。如:

select * from userid=blabla and blabla < timestamp < blabla and A=blabla and B=blabla and c=blabla 

我們開始使用hbase過濾器。我們在其中一列上嘗試了EqualFilter - A,從功能的角度來看,它工作正常。

我有一個普遍關注這裏,因爲我們有一排按鍵,

  1. 可我們只是不斷添加過濾器對所有列A,B,C,以滿足不同的查詢需求?在hbase查詢中添加的過濾器數量是否會降低閱讀性能?
  2. 如果有影響有多戲劇性?
  3. 有人可以向我解釋我們應該如何從性能角度使用最好的hbase過濾器?

回答

3

1)我們能不能針對所有列A,B,C添加過濾器以滿足不同的查詢需求?
在hbase查詢中添加的過濾器數量是否會降低閱讀性能?

是的,你可以做到這一點。它會影響性能,具體取決於數據集的大小以及您使用的過濾器。

2)如果有影響有多戲劇性?

您返回的數據越少越好。您不想獲取不需要的數據。過濾器可幫助您僅返回所需的數據。

3)有人可以向我解釋我們應該如何從性能角度使用最好的hbase過濾器?

最好使用過濾器,如前綴過濾器,與特定值(或限定符,列等)完全匹配的過濾器,或者執行類似於數據的大於/小於類型比較的過濾器。這些類型的過濾器不需要查看每行或表中的所有數據以返回正確的結果。避免使用正則表達式過濾器,因爲正則表達式必須在過濾器正在查看的每一條數據上執行,並且可能會對大型數據集進行徵稅。另外,HBase着作的作者Lars George提到,人們向協處理器的方向發展,而不是向過濾器方向發展。也許還想看看協處理器。

1

1)我們是否可以針對所有A,B,C列不斷添加過濾器以滿足不同的查詢需求? 在HBase查詢中添加的過濾器數量是否會降低閱讀性能? - 是的,您可以爲所有列添加過濾器,但如果您存儲了大量數據,它肯定會影響查詢的性能。 儘量避免使用列過濾器,因爲無論何時添加任何列過濾器,最終都會增加基於列的比較次數。

2)如果有影響有多戲劇性? -Filter可以幫助您恢復結果集,因此只有在提取時才需要數據。

3)有人可以向我解釋我們應該如何從性能角度使用最好的hbase過濾器? -In HBase rowFilter(它將包含前綴)是最有效的過濾器,因爲它們不需要查看所有記錄。因此,請使用rowkey,因爲它將包含需要頻繁查詢的組件。 - 值過濾器是最沒有效率的過濾器,因爲它必須比較列的值。 -HBase過濾器過濾器順序很重要,如果你有多個過濾器被添加到過濾器列表中,那麼添加的過濾器順序會影響性能。 我將用示例 進行說明如果您需要將三個不同的過濾器添加到查詢中,那麼當應用第一個過濾器時,下一個過濾器將有較小的數據進行查詢,並在第三個過濾器之後進行查詢。

因此,儘量先添加高效過濾器ie.rowkey相關過濾器,之後其他人