2017-02-23 79 views
1

請耐心等待我對以下技術缺乏瞭解。對於Hbase,在MySQL中是否有像EXPLAIN這樣的函數?

我們做了一堆查詢(60k查詢),過去需要45分鐘才能完成。現在,大約相同的數量需要3小時20分鐘。編碼它的人不在這裏了,所以我們不完全知道可能發生了什麼。

我的團隊中的領導讓我看看是否有像SQLAIN中的EXPLAIN這樣的命令來查看hbase在搜索rowkey時如何通過區域。我試圖谷歌,但它看起來並不像。 Hbase中是否有一些命令與SQL中的EXPLAIN類似?

如果對問題有幫助,我們正在存儲時間序列數據。該rowkey的格式爲:

hashOfName_elementName_epochtime 

我們認爲HBase的應該知道,從我們查詢,因此不會採取這麼長的時間查詢時間的ElementName以避免地區,但我們還不能確定。希望這個命令存在,這樣我們就可以看到Hbase是如何查詢的,所以我們知道我們是需要重新設計模式還是重做rowkey,或者它是當前存儲的影響速度的數據。

更新:我們查詢元素列表的時間範圍。數據每分鐘保存一次,用於hbase中的元素。當我們進行掃描時,我們可以掃描1小時或1天。 我可以從調試信息中看到,當我們掃描時,我們掃描那段時間。

e.g. hash_elementName_timestamp. timestamp is a 10 digit epoch time 
hash = murmur3_128 hash function of the element name 
154_eee_0000000000 
154_eee_0000000060 
154_eee_0000000120 
... 
.. 
154_eee_0000003600 

167_aaa_0000000000 
167_aaa_0000000060 
... 
... 
167_aaa_0000003600 

這是我們從掃描方法的代碼片段:

public Map<String,String> scan(String name, String columnFamilyName, String columnName, long start, long end, 
boolean reversed, int limit) throws IOException { 

Map<String,String> m = new LinkedHashMap<String,String>(); 

Table table = null; 
ResultScanner scanner = null; 

try { 

    String hash = makeHash(name,fType.getNumberOfRegion()); 
    String key = hash + "_" + name +"_"; 

    Scan scan; 
    if (reversed) { 
     //swap the start and end keys when reversed 
     scan = new Scan(Bytes.toBytes(key + end),Bytes.toBytes(key + start)); 
     scan.setReversed(true); 
    } else { 
     scan = new Scan(Bytes.toBytes(key + start),Bytes.toBytes(key + end)); 
    } 
    scan.addColumn(Bytes.toBytes(columnFamilyName), Bytes.toBytes(columnName)); 
    table = fCconnection.getTable(fTablename); 
    scanner = table.getScanner(scan); 

    int count = 0; 
    for (Result result = scanner.next(); result != null; result = scanner.next()) { 
     //if a limit was set, then only scan until we hit the limit 
     if (limit > 0 && count > limit) { 
      break; 
     } 

     m.put(Bytes.toString(result.getRow()), Bytes.toString((result.getValue(Bytes.toBytes(columnFamilyName), Bytes.toBytes(columnName))))); 
     count++; 
    } 
+0

根據我有限的知識,在hbase中沒有'explain「。也是'Wide Column Store'的Cassandra具有此功能:http://www.datastax.com/dev/博客/ tracing-in-cassandra-1-2 –

回答

0

嘛HBase的不是SQL。所以你沒有解釋。就你而言,你需要研究查詢的行爲方式並開始調整。我知道它是一個非常高層次的聲明。

您提到您有疑問。你是如何執行它們的?請添加詳細信息 - 更多信息

+0

我編輯了這個問題。希望能夠提供更多關於我們如何查詢的信息。我還會在閱讀代碼後嘗試添加代碼片段 – Classified

相關問題