【发布时间】:2017-09-16 17:27:21
【问题描述】:
我想有一个关于设计 Hbase 表/RowKey 以实现高效搜索的建议
这里是一个样本数据集:
| Column Families | Column Qualifiers | Row 1 | Row 2 | Row 3 |
---------------------------------------------------------------------------------------------------------
| Country | Code | US | | UK |
|
| | Full Name |United States of America| |United Kingdom |
| | Capital |Washington, DC | |London |
| | Leader | President | President |Prime minister |
|State | | Texas | | |
|District | |Houston |LA | |
|County | |Harris |Harris | Cambridge |
|City | |Houston city |Duke City | |
|Road | |Bellare | |Downing Street |
|Family | |Doe |Wade | |
|Person | Name |John Doe |Doo |Smith |
| | Location |35.00 N, 99.00 W |31.00 N , 100.00 W | |
| | Gender | |Female |Male |
| | Religion |Atheist |Maya |Christian |
注意:在上面的示例数据集中,列限定符仅针对第一个和最后一个列族进行了详细说明,以避免数据混乱。
数据概览: 它是一个分层数据集,但任何级别的信息都可能丢失 例子, 第 2 行没有国家信息 第 3 行,UK 没有 State 的概念,因此 UK 记录将缺少 State 层次结构
要求是搜索以下场景:
|Search Criteria |Returned Records |
-----------------------------------------------------------------
|All records |3 count, Row1, Row2 & Row3 |
|Country = USA |1 Record, Row 1 |
|Gender = Male |1 Record, Row 3 |
|County = Harris |2 records, Row 1 & Row 2 |
|LATITUDE > 30 and LONGITUDE < 101 |2 records, Row 1 & Row 2 |
|All Atheist for USA |1 record, Row1 |
提出的设计方案:
1。为每个级别创建八个列族,因为可以添加需要在每个级别搜索的信息(例如,领导姓名、职位、时区、级别城市、县、区、国家的区域等)
|Level one |Country |
|Level two |State |
|Level three |District |
|Level four |County |
|Level Five |City |
|Level Six |Road |
|Level Seven |Family |
|Level Eight |Person |
- 将 Rowkey 设计为复合键,所有级别代码的组合,因为搜索可以在任何级别 Level1Code:Level2Code:Level3Code:Level4Code:Level5Code:Level6Code:Level7Code:Level8Code: 例子, 美国:101:102:103:104:105:106:107
我正在考虑的其他替代方法是创建二级索引,但由于我计划使用 Hbase 作为我的 Web 应用程序的后端,因此必须在性能方面进一步探索它。
提前感谢您分享您的专业知识!
【问题讨论】: