在HBase中,當我在列中存儲值或者使用值本身作爲列名時,在性能或任何其他方面有什麼區別?當一個值用作列名時,HBase性能有任何區別嗎?
例如:
<table>:<Column-Family>:<Column-Name>=<value>
vs
<table>:<Column-Family>:<Column-Name>:<value>=1
什麼建議在什麼情況下使用?
在HBase中,當我在列中存儲值或者使用值本身作爲列名時,在性能或任何其他方面有什麼區別?當一個值用作列名時,HBase性能有任何區別嗎?
例如:
<table>:<Column-Family>:<Column-Name>=<value>
vs
<table>:<Column-Family>:<Column-Name>:<value>=1
什麼建議在什麼情況下使用?
它取決於數據和你需要從中提取的東西!如果您遇到這樣的設備及其相關的傳感器列表的數據庫:
ID - LABEL - 傳感器
1 - K200 - 1,2
2 - K300 - 1,2 ,3ID - LABEL - SENSOR_1 - SENSOR_2 - SENSOR_3
1 - K200 - 1 - 1 - 0
2 - K300 - 1 - 1 - 1
在我看來,第一個設計更好,你不必像第二個設計那樣存儲0,但它取決於你需要提取哪些信息。如果您只想檢查哪些設備正在集成傳感器類型1,則第二種設計會更好,因爲您要讀取每行中的一列,而第一種設計則需要處理數據......但是,只是詢問每種設備可以使用哪種類型的傳感器,第一種設計更好......嘗試列出您需要從數據中知道的內容,並據此設計您的設計!
這取決於表的設計和必要性,更通用的
<table>:<Column-Family>:<Column-Name>=<value>
是比較常用的通用存儲,但在某些情況下 <table>:<Column-Family>:<Column-Name>:<value>=1
可以更加貼合,如場景:
- 您需要將值與列名一起過濾
- 您希望有一個具有多個值的列,並避免序列化
- 您需要檢查列是否經常非常快速地檢查特定值
還有更多的案例可以從後期設計中獲益,但它又一次回到了你需要的東西