2014-09-22 53 views
1

我對HBase很新鮮,最近我們打算用HBase來存儲&查詢數據。但是當我嘗試創建一些演示表時遇到了幾個問題:HBase表設計

  1. ColumnFamily的用法是什麼?由於所有的列都必須屬於一個CF,而維基建議只定義CF,這使我對這個定義感到困惑?
  2. 似乎我們只能通過行鍵(如RDBMS中的主鍵)查詢數據,但如果我們不知道行鍵值,我們如何通過其他參數查詢?
  3. 如果通過非行鍵列進行查詢,性能是否會受到影響?

感謝 伊萬耿

回答

1

ColumnFamily的用法是什麼?由於所有的列都必須屬於一個CF,而維基建議只定義CF,這使我對這個定義感到困惑?

ColumnFamily可用於組織數據。但它不止於此。在物理上,所有列家族成員一起存儲在文件系統上。由於調音和存儲規範是在列族級完成的,因此建議所有列族成員具有相同的一般訪問模式和大小特徵。

似乎我們只能通過行鍵(如RDBMS中的主鍵)查詢數據,但如果我們不知道行鍵值,我們如何通過其他參數查詢?

取決於您的方案。有各種過濾器可用。請參閱:Filters in HBase 您可以將RowKey視爲內置索引過濾器。如果你在任何其他列上應用過濾器,那麼它不會被編入索引,因此性能遠不如基於RowKey的GET。

如果通過非行鍵列進行查詢,性能是否會受到影響?

如上所述,使用其他列上的過濾器進行查詢要低效得多。

+0

謝謝Venkat,我會研究過濾器。 HBase中表格設計最佳實踐的任何參考?由於我在創建表格時仍然用RDBMS的方式思考:( – 2014-09-23 01:42:45

+0

我認爲這是最好的入門指南:http://hbase.apache.org/book/schema.html – Venkat 2014-09-23 01:44:57

0

的ColumnFamily用於組織你的列(其中組),並添加一些靈活性,你可以在你想要一個列族隨時隨地,而不影響實際數據添加新列。 HBase以NoSQL爲導向,但我一直在使用Phoenix(HBase的SQL皮膚),以便在HBase數據上應用SQL查詢。使用Phoenix,你可以使用WHERE子句創建SQL查詢,並且性能很不錯,請看看HERE。否則,您可以創建一個複合鍵來對數據進行排序,但這取決於您的數據以及您將如何處理它...