You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@phoenix.apache.org by Simon Mottram <Si...@cucumber.co.nz> on 2021/02/22 04:51:48 UTC
Advice wanted on supporting a tag feature for searching an HBase
Table via Phoenix
The requirement is to be able to search from a list of tags, each record can have a possible large number of tags. There would be more than one tag field.
An example might 3 different hashtag fields. They do have to be different; we can't have just one tag cloud.
The data size is large so we need to be able to search the tag clouds over large numbers. Millions but not billions (for now)
e.g:
I was wondering what the best method would be
1) a column per tag value.
ID, name, some_attributes..., type1_tag_1, type1_tag_2
While hbase is happy with many columns I can't see how to index this
2) A tag join table. Maybe just a single row key ID + single tag. Then it becomes a straight join of ID + tag. Thus it would be indexed.
3) Is there a crafty way of using column families? Could that be indexed efficiently?
Any tips/tricks gratefully received
Simon
Re: Advice wanted on supporting a tag feature for searching an HBase
Table via Phoenix
Posted by Simon Mottram <Si...@cucumber.co.nz>.
Hey Josh
Thanks much for the feedback. Sounds good
S
________________________________
From: Josh Elser <el...@apache.org>
Sent: 23 February 2021 9:14 AM
To: user@phoenix.apache.org <us...@phoenix.apache.org>
Subject: Re: Advice wanted on supporting a tag feature for searching an HBase Table via Phoenix
I had a similar sort of issues (granted, less data scale), and I went
with option 2.
If you put the rowkey of your "data" table plus the tag itself into the
rowkey for your other table/index, you should be able to grow without
running into HBase scalability (though, pulling 10GB of tags for one
lookup would be crazy slow :P). It's a fast rowkey, prefix scan to pull
all the tags for the "data record".
Just don't forget that hbase won't split a single row across multiple
Regions. That's the important part in designing this table.
On 2/21/21 11:51 PM, Simon Mottram wrote:
> The requirement is to be able to search from a list of tags, each record
> can have a possible large number of tags. There would be more than one
> tag field.
>
> An example might 3 different hashtag fields. They do have to be
> different; we can't have just one tag cloud.
>
> The data size is large so we need to be able to search the tag clouds
> over large numbers. Millions but not billions (for now)
>
> e.g:
>
> I was wondering what the best method would be
>
> 1) a column per tag value.
> ID, name, some_attributes..., type1_tag_1, type1_tag_2
>
> While hbase is happy with many columns I can't see how to index this
>
> 2) A tag join table. Maybe just a single row key ID + single tag.
> Then it becomes a straight join of ID + tag. Thus it would be indexed.
>
> 3) Is there a crafty way of using column families? Could that be
> indexed efficiently?
>
> Any tips/tricks gratefully received
>
> Simon
Re: Advice wanted on supporting a tag feature for searching an HBase
Table via Phoenix
Posted by Josh Elser <el...@apache.org>.
I had a similar sort of issues (granted, less data scale), and I went
with option 2.
If you put the rowkey of your "data" table plus the tag itself into the
rowkey for your other table/index, you should be able to grow without
running into HBase scalability (though, pulling 10GB of tags for one
lookup would be crazy slow :P). It's a fast rowkey, prefix scan to pull
all the tags for the "data record".
Just don't forget that hbase won't split a single row across multiple
Regions. That's the important part in designing this table.
On 2/21/21 11:51 PM, Simon Mottram wrote:
> The requirement is to be able to search from a list of tags, each record
> can have a possible large number of tags. There would be more than one
> tag field.
>
> An example might 3 different hashtag fields. They do have to be
> different; we can't have just one tag cloud.
>
> The data size is large so we need to be able to search the tag clouds
> over large numbers. Millions but not billions (for now)
>
> e.g:
>
> I was wondering what the best method would be
>
> 1) a column per tag value.
> ID, name, some_attributes..., type1_tag_1, type1_tag_2
>
> While hbase is happy with many columns I can't see how to index this
>
> 2) A tag join table. Maybe just a single row key ID + single tag.
> Then it becomes a straight join of ID + tag. Thus it would be indexed.
>
> 3) Is there a crafty way of using column families? Could that be
> indexed efficiently?
>
> Any tips/tricks gratefully received
>
> Simon