ClickHouse / ClickHouse/clickhouse-java
Slow deserialization of DateTime values
- 主要语言
- Java
- 星标
- 1.6k
- 派生
- 636
- 平均合并
- 2 天 23 小时
- 30 天内合并 PR
- 29
描述
Deserialization of DateTime value seems very slow comparing to string and number.
Below are benchmarks against ClickHouse 21.8.
```
Benchmark (client) (connection) (statement) Mode Cnt Score Error Units
Query.select10kStringRows clickhouse-jdbc(0.3.1-patch) reuse normal thrpt 20 55.892 ± 3.277 ops/s
Query.select10kTimestampRows clickhouse-jdbc(0.3.1-patch) reuse normal thrpt 20 10.243 ± 0.627 ops/s
Query.select10kUInt64Rows clickhouse-jdbc(0.3.1-patch) reuse normal thrpt 20 54.420 ± 4.530 ops/s
Query.select10kStringRows clickhouse-native-jdbc-shaded(2.5.6) reuse normal thrpt 20 73.846 ± 5.486 ops/s
Query.select10kTimestampRows clickhouse-native-jdbc-shaded(2.5.6) reuse normal thrpt 20 83.446 ± 5.502 ops/s
Query.select10kUInt64Rows clickhouse-native-jdbc-shaded(2.5.6) reuse normal thrpt 20 83.512 ± 4.226 ops/s
```
`clickhouse-grpc-client`(0.3.2) with grpc compression disabled on server:
```
Benchmark (connection) (format) (mode) (protocol) (transport) Mode Cnt Score Error Units
Query.select10kStringRows reuse RowBinaryWithNamesAndTypes sync GRPC netty thrpt 20 82.786 ± 4.334 ops/s
Query.select10kStringRows reuse RowBinaryWithNamesAndTypes sync GRPC okhttp thrpt 20 70.753 ± 4.797 ops/s
Query.select10kStringRows reuse TabSeparatedWithNamesAndTypes sync GRPC netty thrpt 20 60.482 ± 4.466 ops/s
Query.select10kStringRows reuse TabSeparatedWithNamesAndTypes sync GRPC okhttp thrpt 20 52.046 ± 2.540 ops/s
Query.select10kTimestampRows reuse RowBinaryWithNamesAndTypes sync GRPC netty thrpt 20 99.147 ± 5.190 ops/s
Query.select10kTimestampRows reuse RowBinaryWithNamesAndTypes sync GRPC okhttp thrpt 20 86.454 ± 5.485 ops/s
Query.select10kTimestampRows reuse TabSeparatedWithNamesAndTypes sync GRPC netty thrpt 20 48.739 ± 3.207 ops/s
Query.select10kTimestampRows reuse TabSeparatedWithNamesAndTypes sync GRPC okhttp thrpt 20 29.759 ± 1.812 ops/s
Query.select10kUInt64Rows reuse RowBinaryWithNamesAndTypes sync GRPC netty thrpt 20 121.422 ± 6.465 ops/s
Query.select10kUInt64Rows reuse RowBinaryWithNamesAndTypes sync GRPC okhttp thrpt 20 73.226 ± 3.930 ops/s
Query.select10kUInt64Rows reuse TabSeparatedWithNamesAndTypes sync GRPC netty thrpt 20 66.267 ± 4.822 ops/s
Query.select10kUInt64Rows reuse TabSeparatedWithNamesAndTypes sync GRPC okhttp thrpt 20 56.022 ± 4.188 ops/s
```
贡献指南
调研方向
首先复现 Query.select10kTimestampRows 基准测试,并将其 DateTime 结果与 RowBinaryWithNamesAndTypes 和 TabSeparatedWithNamesAndTypes 中的 string 和 UInt64 情况进行比较。检查 Java 客户端使用的反序列化路径,以及 pull request #736 所代表的相关工作;完成标准是通过基准测试证据识别并解决 DateTime 的吞吐量差距。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- grpc, java
- 领域
- performance
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 需要澄清
- 新手友好度
- 25/100