Vlad and Eli, thanks for your answer and comments.

1. Normally I do query by whole Anumber, meaning country code + operator id + 
user number but as you suggested I could just reverse everything and it should 
work well if I’ll reverse number entered by user.

2. What’s the suggested number of
Regarding syntax for table splitting I haven’t found any example in Phoenix but 
only for HBase.

create ‘mytable, ‘mycolumnfamlity’, {SPLITS=›

['10000000000000000000000000000000',
'20000000000000000000000000000000',
'30000000000000000000000000000000',
'40000000000000000000000000000000',
'50000000000000000000000000000000',
'60000000000000000000000000000000']}

Do I have to use full row key when defining split?
For example in my case where first 6 bytes represent reversed user number 
followed by oeprator and country code followed by other parts of row key - 
timestamp, job id and record number:

0000000000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000010000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000020000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000030000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000040000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000050000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000060000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000070000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000080000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
0000090000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00


3. I was thinking about this solution too but problem is that let’s say for 
same IMEI there can be multiple Anumbers. Imagine someone using same phone 
(IMEI) but changing sim card (IMSI/Anumber). What I was trying yesterday was to 
enforce using of index and it worked pretty well but I read this should be only 
used if result set is rather small. I think in our case result set is typically 
few hundred records, maximum could be few thousand records but that would 
happen rarely. Is it advisable to use index enforcing for such case?

4. For TTL is there a way to set TTL to record level? Because CDR has to expire 
in 1 year since it was created and not inserted into table. And some CDRs like 
roaming are coming later so for example it can happen that you get today CDR 
which is already 1 month old and it should expire in 11 months and not 12. I 
haven’t found any examples of setting TTL in Phoenix.


Another question I have is regarding IMMUTABLE_ROWS=true. It’s suggested to use 
this for append-only table with no updates. What about deletes? Can I use 
IMMUTABLE_ROWS=true if I delete records from table?



On 06 Jul 2015, at 20:32, Vladimir Rodionov 
<[email protected]<mailto:[email protected]>> wrote:

1. Unless you do query by Anumber prefix (country code + operator id) - reverse 
it : random 6 + operator id + country code. In this case you will not need 
salting row.
2. Presplit  table. Make sure you won't need to split table during normal 
operation.
3. Keep index between Bnumber (IMEI, IMSI?) and Anumber. Get Anumber by IMEI 
then run query by Anumber. This index is going to be much smaller.

Phoenix supports any table level configuration options, so you can specify TTL 
in your DDL statement

As for capacity planning, you can read:
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.3/bk_system-admin-guide/content/ch_hbase_cluster_capacity_region_sizing.html

-Vlad

As for capacity planning, please read HBase book


On Mon, Jul 6, 2015 at 8:52 AM, Matjaž Trtnik 
<[email protected]<mailto:[email protected]>> wrote:
Hi fellow Phoenix users!

We are considering using HBase and Phoenix for CDR data retention. Number of 
records is around 50 million per day and we should keep them for about one 
year. I have played around a bit but would like to hear second opinion from 
people who have more experience so I have few questions:


  1.  Based on your experience can anyone recommend me approx number of nodes 
in cluster and hardware configuration of one node (RAM).
  2.  Regarding row key I was thinking of Anumber + timestamp + Bnumber + jobId 
+ recordIndex. Any other ideas? Do I need to use salting or no? Let’s assume 
aNumber in most cases start with first 5 digits the same (country + operator 
code), followed by 6 random digits for user number.
  3.  Searches are typically done by Anumber and timestamp but also some other 
criterias may apply, like IMEI or IMSI number. Do you suggest to have secondary 
indexes for that? I read that if using secondary index all columns in select 
statement should be included in index as well. Keeping in mind I’m returning 
almost all columns does this mean almost double of data for each index? Any 
other suggestions how to handle this?
  4.  For time stamp, do you suggest using LONG and storing epoch time or stick 
with DATE format?
  5.  Another request is that after some time we need to be able to efficiently 
delete all CDRs that are older than let’s say 1 year. Is design of row key 
still good for that as only argument here will be timestamp? Is it possible to 
use TTL with Phoenix?

Any other suggestions and advices how to design system are more than welcomed.

Thanks, Matjaz


Reply via email to