gpt4 book ai didi

hadoop - Hbase Schema设计

转载 作者:行者123 更新时间:2023-12-02 20:11:09 25 4
gpt4 key购买 nike

我必须设计一个 Hbase 表来存储用户信息,此信息面向社交网络,例如:年龄,性别,教育程度,爱好,看书,旅行的国家...
注意:我们将来可能会添加更多信息,我们现在不知道所有信息。

例如:
姓名:Olha,年龄:25,性别:女,教育程度:信息技术学士,教育程度:计算机科学,业余爱好:篮球,爱好:乒乓球,书籍:随风而逝,书籍:达芬奇密码,语言:英语,语言:法文,国家/地区:德国

主要思想是能够执行以下查询:
返回所有女性,年龄:22岁,说:英语,说:法语,读随风而逝的书,例如乒乓球,篮球和德语。

因此您可以将任何条件添加到搜索查询中。

您对优化这种搜索查询的HBASE表架构(行键,列族...)有何建议(考虑到我们将来会添加更多信息)
编写此类查询的最佳方法是什么(scan,get,MapReduce)。

谢谢

最佳答案

从某种意义上说,这并不是HBase的好用,因为这正是搜索索引(如Lucene)所擅长的。

一种用于存储用户及其信息的普通模式可能看起来很像一个关系数据库,因为每个用户只有1行,并将所有属性存储为列和值(age = 22,language = french等)。这对于您提到的可扩展性非常有效(您无需更改任何架构即可存储新属性)。使用这种模式,您可以通过唯一的用户ID查找任何一个用户(及其所有属性)。无论您有多少用户,这都将是非常快的事情。

但是,使用该架构,如果您要按照描述的方式进行搜索(“返回年龄在22岁以下的所有用户”),则每个查询最终都将是对整个表的扫描,因为HBase仅允许您执行以下操作:通过主键访问事物;它没有任何二级索引。这将是非常低效的(每次您要进行任何单个查询时图片都必须扫描一百万行)。

如何解决这个问题?您可以“反转”数据的顺序,并将值放入行键,然后指向具有该值的所有用户。例如,行键可以是“age:22”,然后在行的列中可以是所有22岁的用户ID。这有很多问题,其中有很多原因,其中最主要的原因是更新非常昂贵且棘手。但是,对于那些特定的查询,它的效果很好。

俩?这正是搜索索引(如Lucene)所做的事情,它比使用HBase滚动搜索要好得多。听起来像您想在这里使用的工具。

如果您必须使用HBase(正如您所说,因为这是一个研究项目),那么可能值得一起使用HBase和Lucene。谷歌的指针。

关于hadoop - Hbase Schema设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com