我正在做一个poc,我使用pheonix进行单次写入,在写入之后更新数据库。所以我不能批量更新写入。我得到每秒1个事务作为tps。我有3个节点的电子病历集群。我使用hbase和s3作为后端。
我试着调整参数,我在网上发现我创建了线程应用程序,但性能仍然非常缓慢。
我已经编写了一个线程程序来批量向phoenix中插入数据。我使用Phoenix是因为二级索引功能。我在写作方面的表现非常慢。
explain查询如下所示
0: jdbc:phoenix:localhost:2181:/hbase>explain select count(1)from vbql_phoenix_transcript5……………..>;+
5条答案
按热度按时间lmyy7pcs1#
------+| client 100 chunk 6838539 rows 314572800 bytes parallel 100 way full scan over vbql|phoenix|transcript|index5 | 314572800 | 6838 | | server filter by first key only
|314572800 | 6838 | |服务器聚合成单行
|314572800 | 6838 |+在hbase中使用的调整设置。问题是它很难扩展,我尝试了向hbase集群添加更多节点,也尝试了向客户机程序添加更多线程,但它的扩展速度没有超过每分钟6k,这非常慢。非常感谢您的帮助。
我创建了一个如下表
yvfmudvl2#
------+|计划
|est|bytes|read|est|+
f4t66c6m3#
------+
wribegjk4#
对于大型写入,我使用phoenix spark的spark作业,使用4个执行器,我能够达到每秒增加16k行。
计数查询非常慢是很正常的,因为正如解释计划所示,它正在进行完全扫描。这意味着它必须读取所有行才能获得实际计数。phoenix在使用primarykey或至少在其开头查询数据时非常强大。主键的开头越长,给出的速度就越快。
0: jdbc:phoenix:> explain select count(1) from TEST_TABLE;
+------------------------------------------------------------------------------+
| PLAN |
+------------------------------------------------------------------------------+
| CLIENT 1-CHUNK 0 ROWS 0 BYTES PARALLEL 1-WAY FULL SCAN OVER TEST_TABLE |
| SERVER FILTER BY FIRST KEY ONLY |
| SERVER AGGREGATE INTO SINGLE ROW |
+------------------------------------------------------------------------------+
3 rows selected (0.039 seconds)
0: jdbc:phoenix:> select count(1) from TEST_TABLE;
1 row selected (0.555 seconds)
0: jdbc:phoenix:> explain select * from TEST_TABLE where PK like 'toto';
+---------------------------------------------------------------------------------------+
| PLAN |
+---------------------------------------------------------------------------------------+
| CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN POINT LOOKUP ON 1 KEY OVER TEST_TABLE |
+---------------------------------------------------------------------------------------+
1 row selected (0.047 seconds)
0: jdbc:phoenix:> select * from TEST_TABLE where PK like 'to%';
2 rows selected (0.142 seconds)
0: jdbc:phoenix:> explain select * from TEST_TABLE where PK = 'toto';
+---------------------------------------------------------------------------------------+
| PLAN |
+---------------------------------------------------------------------------------------+
| CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN POINT LOOKUP ON 1 KEY OVER TEST_TABLE |
+---------------------------------------------------------------------------------------+
1 row selected (0.019 seconds)
0: jdbc:phoenix:> select * from TEST_TABLE where PK = 'toto';
1 row selected (0.05 seconds)
0: jdbc:phoenix:>
fruv7luv5#
------+