我在hbase中有一个名为“xyz”的表。当我对此表执行更新操作时,它会更新一个表,即使它是同一条记录。
如何控制第二条记录不被添加。
如:
create 'ns:xyz',{NAME=>'cf1',VERSIONS => 5}
put 'ns:xyz','1','cf1:name','NewYork'
put 'ns:xyz','1','cf1:name','NewYork'
如果我检查所有版本,上面的put语句将给出两个具有不同时间戳的记录。我希望它不应该添加第二个记录,因为它有相同的值
2条答案
按热度按时间0yg35tkg1#
hbase不会检查整行并确定它是否与您要添加的数据相同。这将是一个昂贵的操作,hbase以其快速的插入速度而自豪。
如果您真的很想这样做(我想问您是否真的想这样做),您应该先执行get来查看数据是否已经存在于表中。
您也可以在每次放入数据时编写一个协处理器来执行此操作,但性能同样不理想。
0yg35tkg2#
正如@ben watson所提到的,hbase最出名的是它在write中的性能,因为它不需要检查值的存在,因为默认情况下会维护多个版本。
你可以做的一件事是,你可以使用自定义版本控制。如下面的屏幕截图所示,一个行键已有两个版本。现在,如果要插入具有相同时间戳的相同记录。hbase将仅用该值覆盖同一记录。
注意:由应用程序为特定值获取相同的时间戳。