繁体   English   中英

Hbase Schema设计

[英]Hbase Schema design

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

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

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

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

您对优化这种搜索查询的HBASE表模式(行键,列族...)有何建议(考虑到我们将来会添加更多信息),写这种查询(扫描)的最佳方法是什么? ,获取MapReduce)。

谢谢

我会同意Ian Varley的观点,Solr / Lucene及其多面的查询和联接使您可以按照想要查看的方式来旋转数据-但是-我也认为您的问题可能是“计数”问题或“成员身份”题....

听起来好像您是在匹配(N)个属性的人员列表之后-您遇到的问题是,对于每个属性,您可能拥有数百万个用户ID?

当您只想计算交点/联合大小时,HBase非常适合。您的键/值对可以放入Hbase中,并且可以将用户的ID“编码”为Bloom Filter和HyperLogLog。 准确性和存储性的交易速度。 在某种类型的日志聚合的点击流上,可能每小时/每晚运行一次map / reduce样式作业。

其他人则在广告空间和在线空间中针对您正在运行的查询类型进行了此操作( “找到喜欢住在佛罗里达的红牛和流行皮特的人”

参考文献

使用Apache Hive和Amazon EMR进行内容相关广告http://aws.amazon.com/articles/2855

扩展分布式计数器: http : //whynosql.com/scaling-distributed-counters/

Google:分片计数器https://developers.google.com/appengine/articles/sharding_counters

HBase中的分布式计数器性能-第1部分http://palominodb.com/blog/2012/08/24/distributed-counter-performance-hbase-part-1

Facebook的新实时分析系统:HBase每天处理200亿个事件http://highscalability.com/blog/2011/3/22/facebooks-new-realtime-analytics-system-hbase-to-process-20.html

使用Hadoop和HBase进行实时分析-http: //www.slideshare.net/larsgeorge/realtime-analytics-with-hadoop-and-hbase

使用HBase进行日志事件处理http://tellapart.com/log-event-processing-with-hbase

BazaarVoice上的Clickstream Analytics http://www.slideshare.net/bazaarvoice_engineering/austin-scales-clickstream-analytics

使用HBase进行实时分析-http: //www.slideshare.net/alexbaranau/realtime-analytics-with-hbase-long-version

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM