lealone / Lealone

比 MySQL 和 MongoDB 快10倍的 OLTP 关系数据库和文档数据库
Other
2.47k stars 518 forks source link

请教 次级索引支持的问题 #50

Closed xiang82 closed 11 years ago

xiang82 commented 11 years ago

我使用create index做了如下测试,有几个问题想请教一下: 按照如下步骤顺序操作

  1. CREATE TABLE IF NOT EXISTS mytest (id int primary key, name int, age int)
  2. INSERT INTO mytest(id, name, age) VALUES(1, 2, 3)
  3. create index idx on mytest(name)
  4. insert into mytest values(2,3,4) 发现mytest表中有2条数据,但索引表idx中只有1条数据:
  5. create index之后需要什么命令触发index rebuild操作吗?
  6. 我看到idx表的column=CF:C的value=0,请问现在lealone在次级索引的value是否没有启用,直接使用了idx列name的值和id、age列的值组合而成?

下面是我在hbase中看到的情况: scan表mytest有2条记录: hbase(main):008:0> scan 'MYTEST' ROW COLUMN+CELL
1 column=CF:AGE, timestamp=800052, value=\x00\x00\x00\x03
1 column=CF:ID, timestamp=800052, value=\x00\x00\x00\x01
1 column=CF:NAME, timestamp=800052, value=\x00\x00\x00\x02
1 column=CF:_LEALONE_TRANSACTIONMETA, timestamp=800052, value=PC05:36020,800050,1
2 column=CF:AGE, timestamp=800077, value=\x00\x00\x00\x04
2 column=CF:ID, timestamp=800077, value=\x00\x00\x00\x02
2 column=CF:NAME, timestamp=800077, value=\x00\x00\x00\x03
2 column=CF:_LEALONE_TRANSACTIONMETA, timestamp=800077, value=PC05:36020,800075,1 scan索引表idx只有1条记录: hbase(main):007:0> scan 'IDX' ROW COLUMN+CELL
\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x0 column=CF:C, timestamp=800051, value=0
12
\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x0 column=CF:_LEALONE_TRANSACTIONMETA, timestamp=800051, value=PC04:36020,800049,1
12

freemanhjr commented 11 years ago

大概看了下代码,对于这种static情况(代码中是static)的;在insert时,把rowkey列也插入进去了;

codefollower commented 11 years ago

index rebuild功能目前没有实现,只会对新数据建索引,所以第一条记录没有索引。

这个功能还在考虑是否要加上,主要是对现有表进行index rebuild,会非常耗时,会把整个表全扫一遍, 然后再插入主录,在有上亿记录级别的表中进行index rebuild很耗资源。

codefollower commented 11 years ago

create index目前是用索引表实现的,索引表本身就是一个普通的HBase表, 所以这个索引表也有rowKey,此rowKey的格式是由索引子段值和主表rowkey组成的, “column=CF:C"中的这个C列理论上是不必要的,但是HBase在put记录时必须要有一个字段,所以C列只是一个伪列。

freemanhjr commented 11 years ago

在主表中id做为主键,就是rowkey,是否不应再写入到后面的CF中,这种情况下的查询效率很低,没有走rowkey

codefollower commented 11 years ago

@freemanhjr 你是指Issue #48 吧? 那边的问题已标记为bug了。