我想大致了解具有二级索引的写入重表的 upsert 性能。
索引有表的所有字段(其实非行键字段的个数是1,就是varbinary类型)。
我进行了粗略的测试,结果如下:
- 具有二级索引的表:4.3 分钟
- 没有二级索引的表:53 秒
测试是使用带有 PhoenixInputFormat 的 Apache Spark 程序完成的。
二级索引是全局可变的。
对我来说,与没有二级索引的表相比,结果有点太慢了。
它慢了大约 4.7 倍。我希望它会在 2 ~ 2.5 倍左右。(因为它实际上写入 2 个表)
这是典型的性能损失吗?
如果是这样,我认为我必须为写繁重的表放弃一个(全局的、可变的)二级索引。
更新
我的测试集群由 1 个名称节点和 3 个数据节点组成。(很小)
数据节点机器规格如下:(绝不强大)
- CPU:Core i7-4790(核心数:4,线程数:8)
- 内存:32GB(8GB x 4)
- 硬盘:8TB (2TB x 4)
- 网络:1Gb
软件规格:
- Hadoop:Hortonworks HDP 2.2(Hadoop 2.6)
- 阿帕奇星火:1.3.0
- 阿帕奇凤凰:4.3.1
更新的记录数约为 600 万。它只有一列(数据类型为 varbinary)而且很小。(远低于1k)