Trafodion 索引

今天群里面有人问了一个问题:很多公司用Solr对HBase建二级索引,是不是如果用了Trafodion,就可以把Solr完全替代?

针对Trafodion是否可以完全代替Solr这问题,至少现在看来我觉得是不会的,Trafodion目前来说是一个SQL on HBase的关系型数据库,而Solr是一个主要用来做搜索的产品,在这一点上Trafodion目前还没有比较好的解决方案可以替代Solr,Trafodion目前也就支持LIKE这种表达式实现文本的模糊匹配,但效率是可想而知的。

针对二级索引这个问题,我倒是可以谈谈我的看法。没错,Trafodion确实支持索引,而且我们一般称之为“二级索引”。为什么这么说呢?因为Trafodion表实质上是一个HBase表,HBase本身是一个Key-Value的NoSQL数据库,Key即Row-key,因此每个Trafodion表也有一个对应HBase表Row-Key的东西,称为“聚集键(Clustering Key)”,Trafodion表中的聚集键经过编码就是HBase表的Row-Key。

因此我们通常说,Trafodion表本身也是一个索引,因为Trafodion表中的数据会在插入的时候按照聚集键排好序,存储在表中的数据也是经过排序的,因此在按照聚集键进行查询的时候效率就比较高。

那么如果希望在非聚集键上进行查询时且希望效率依然很高的情况下应该怎么办呢?这时候就需要用到Trafodion索引了,这个索引又被称为“二级索引”,这个“二”是相对于Trafodion表这个“主”索引而言的。

(注意:Trafodion的二级索引其实质是一个HBase表。)

下面通过一个例子介绍如果创建一个简单的索引并查看DDL,

--创建测试表
SQL>create table test_index(a int not null, b varchar(10),primary key (a));

--- SQL operation complete.

SQL>showddl test_index;


CREATE TABLE TRAFODION.SEABASE.TEST_INDEX
  (
    A                                INT NO DEFAULT NOT NULL NOT DROPPABLE NOT
      SERIALIZED
  , B                                VARCHAR(10) CHARACTER SET ISO88591 COLLATE
      DEFAULT DEFAULT NULL NOT SERIALIZED
  , PRIMARY KEY (A ASC)
  )
 ATTRIBUTES ALIGNED FORMAT
;

--- SQL operation complete.


--在非主键列上创建索引
SQL>create index idx_test_index_b on test_index(b);

--- SQL operation complete.

SQL>showddl test_index;


CREATE TABLE TRAFODION.SEABASE.TEST_INDEX
  (
    A                                INT NO DEFAULT NOT NULL NOT DROPPABLE NOT
      SERIALIZED
  , B                                VARCHAR(10) CHARACTER SET ISO88591 COLLATE
      DEFAULT DEFAULT NULL NOT SERIALIZED
  , PRIMARY KEY (A ASC)
  )
 ATTRIBUTES ALIGNED FORMAT
;

CREATE INDEX IDX_TEST_INDEX_B ON TRAFODION.SEABASE.TEST_INDEX
  (
    B ASC
  )
 ATTRIBUTES ALIGNED FORMAT
;

--- SQL operation complete.

--插入测试数据
SQL>insert into test_index values(1, 'A');

--- 1 row(s) inserted.

SQL>insert into test_index values(2, 'B');

--- 1 row(s) inserted.

SQL>insert into test_index values(3, 'C');

--- 1 row(s) inserted.

SQL>select * from test_index;

A           B
----------- ----------
          1 A
          2 B
          3 C

--- 3 row(s) selected.

现在通过HBase Shell查看刚刚创建的表及索引,

hbase(main):008:0> list
...
TRAFODION.SEABASE.IDX_TEST_INDEX_B
...
TRAFODION.SEABASE.TEST_INDEX
...

hbase(main):001:0> scan 'TRAFODION.SEABASE.TEST_INDEX'
ROW                                COLUMN+CELL
 \x80\x00\x00\x01                  column=#1:\x01, timestamp=1487565603006, value=\x10\xC0\x00\x00\x0C\x00\x00\x00\x14\x00\x00\x00\x0
                                   0\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00A\x00\x00\x00
 \x80\x00\x00\x02                  column=#1:\x01, timestamp=1487565613971, value=\x10\xC0\x00\x00\x0C\x00\x00\x00\x14\x00\x00\x00\x0
                                   0\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00B\x00\x00\x00
 \x80\x00\x00\x03                  column=#1:\x01, timestamp=1487565622955, value=\x10\xC0\x00\x00\x0C\x00\x00\x00\x14\x00\x00\x00\x0
                                   0\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00
3 row(s) in 0.4400 seconds

hbase(main):002:0> scan 'TRAFODION.SEABASE.IDX_TEST_INDEX_B'
ROW                                COLUMN+CELL
 \x00\x00A         \x80\x00\x00\x0 column=#1:\x01, timestamp=1487565603025, value=\x10\xC0\x00\x00\x0C\x00\x00\x00\x14\x00\x00\x00\x0
 1                                 0\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00A\x00\x00\x00
 \x00\x00B         \x80\x00\x00\x0 column=#1:\x01, timestamp=1487565613973, value=\x10\xC0\x00\x00\x0C\x00\x00\x00\x14\x00\x00\x00\x0
 2                                 0\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00B\x00\x00\x00
 \x00\x00C         \x80\x00\x00\x0 column=#1:\x01, timestamp=1487565622957, value=\x10\xC0\x00\x00\x0C\x00\x00\x00\x14\x00\x00\x00\x0
 3                                 0\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00
3 row(s) in 0.0410 seconds
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值