Hbase Phoenix批量插入速度非常慢
我用hbase做了一个小测试,比较了Phoenix批量插入和多个PUT。凤凰城的速度要比10000条记录的直投速度慢得多,分别是6.157秒和0.083秒 这是我的密码:Hbase Phoenix批量插入速度非常慢,hbase,phoenix,Hbase,Phoenix,我用hbase做了一个小测试,比较了Phoenix批量插入和多个PUT。凤凰城的速度要比10000条记录的直投速度慢得多,分别是6.157秒和0.083秒 这是我的密码: SingleConnectionDataSource dataSource = new SingleConnectionDataSource(); final JdbcTemplate template = new JdbcTemplate(); template.setDataSource(dataS
SingleConnectionDataSource dataSource = new SingleConnectionDataSource();
final JdbcTemplate template = new JdbcTemplate();
template.setDataSource(dataSource);
dataSource.setUrl(PhoenixZK);
dataSource.setDriverClassName("org.apache.phoenix.jdbc.PhoenixDriver");
final PlatformTransactionManager txnManager = new DataSourceTransactionManager(dataSource);
TransactionTemplate txnTemplate = new TransactionTemplate(txnManager);
txnTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
template.execute("DROP TABLE IF EXISTS stats.prod_metrics");
template.execute("CREATE TABLE stats.prod_metrics ( host char(50) not null, created_date TIMESTAMP not null,\n" +
" txn_count bigint CONSTRAINT pk PRIMARY KEY (host, created_date) ) SALT_BUCKETS=36, COMPRESSION='SNAPPY', REPLICATION_SCOPE=1");
}
});
long startTime = System.currentTimeMillis();
final Random random = new Random();
txnTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
template.batchUpdate("UPSERT INTO stats.prod_metrics VALUES (?,?,?)", new BatchPreparedStatementSetter(){
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, "localhost-" + random.nextInt());
ps.setTimestamp(2, new Timestamp(System.currentTimeMillis()));
ps.setInt(3, random.nextInt());
}
@Override
public int getBatchSize() {
return numRec;
}
});
}
});
System.out.println("elapse = " + (double)(System.currentTimeMillis() - startTime)/1000.0);
以下是pheonix的日志记录:
16:03:42.544 DEBUG MutationState Sending 10000 mutations for STATS.PROD_METRICS with 20000 key values of total size 1950000 bytes
16:03:47.784 DEBUG MutationState Total time for batch call of 10000 mutations into STATS.PROD_METRICS: 5235 ms
为什么菲尼克斯要比直插花更长的时间?我做错什么了吗
谢谢,
肖恩
10000条记录0.083秒
你怎么知道这些数字的?这是每秒10万。只有在10-20个节点运行多个多线程客户端的集群上才能获得这种性能
每秒约2K次插入?我觉得很正常。这只是一个客户端向一个RS Region服务器发送数据。与纯HBase相比,任何操作都要慢。Phoenix是一种位于HBase之上的层,用于低延迟应用程序的HBase高性能关系数据库层。>您是如何获得这些数字的?这是每秒10万。很可能它们都在客户端缓冲区中,但由于缓冲区被错误地刷新/关闭,或者有一个异常被吞没,并且从未被发现,所以HBase永远无法访问。我发现自动提交大大降低了插入的速度。我不能告诉上面你是否正在使用它。。。