lealone / Lealone

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

delete from table; hbase中数据没有删掉;再导入也不行 #36

Closed freemanhjr closed 11 years ago

codefollower commented 11 years ago

delete from table并不会使用HBase的delete的,而是用put,意思是put一条特殊的记录,用HBaseClient去查还是能查得到,用lealone-client通过select去查就没有了。

导入不行是什么不行?最好能给出一些能重现的测试例子。

freemanhjr commented 11 years ago

我们试着用hbase的bulk load给hbase导入,这样性能应该可以高些; 但是用delete之后,数据还在,重新导入也没报错,但这时就查不到数据了;

我们是想delete表中所有数据,不是一条;

codefollower commented 11 years ago

那还不如先drop table再create table

freemanhjr commented 11 years ago

你说的也没错;我是可以用drop table; 但是我的表结构没变,用delete也不该出错呀;

codefollower commented 11 years ago

lealone-client和HBaseClient混合使用会导致数据很乱的,因为lealone是对版本号严格控制的,HBaseCliet默认使用当前时间戳作为版本号,这会带来很多混乱。

freemanhjr commented 11 years ago

了解,我也发现很容易乱; 你说的lealone对版本号严格控制是什么意思?

codefollower commented 11 years ago

目前lealone的设计只支持:

  1. 对于已存在的原先使用HBaseClient写入的表,可以查询,但是对于新的写入只能使用lealone-client
  2. 对于新表的读写通过lealone-client都没问题
  3. 不支持在老表和新表中交叉使用HBaseClient和lealone-client读写数据

lealone对版本号严格控制是指每个region server维护自己独立的计数器,在region server写入记录时,记录的版本号由这个计数器提供,并不使用系统时间。

freemanhjr commented 11 years ago

也就是说,用lealoneclient建的表,在用lealone写入后,不能用hbaseclient再写入; 我现在的需求是用lealoneclient建表,但是lealone client写入比较慢; 所以用hbaseclient写入;这个可能会写入多次; 当然也会用lealoneclient写入; 这样不行吗? 那不是无法解决导入数据太慢的问题了?

codefollower commented 11 years ago

可以用lealoneclient建表,然后用hbaseclient bulk load,这样相当于是上面说的第1点

批量导入可以试试java.sql.Statement.executeBatch(),性能不如bulk load,如果数据不是千万级差不多也够用了。