我在不同的机器上(从/向另一台机器读/写)做了一些 xstream 和 hashmap 的基准测试。
我使用 Jedis(Java),我使用的 xstream 命令是
val response = jedis.xreadGroup("my-group", "consumer1",
count=4, block=1, noAck=false, new SimpleEntry(streamName, StreamEntryID.UNRECEIVED_ENTRY))
和 hashmap 命令只是
jedis.keys("*")
我尝试了一些数据,当它很小(测试中为 1k 个字符字符串)时,它们的成本都是 <1ms。
但是当它更大时(测试中为 100k 个字符字符串),我得到以下结果
2021-07-02 09:37:45 INFO RedisBaseline$:16 - put xstream len 100000 time elapsed [10.760028 ms]
2021-07-02 09:37:45 INFO RedisBaseline$:16 - put hashmap len 100000 time elapsed [12.127884 ms]
2021-07-02 09:37:45 INFO RedisBaseline$:16 - get hashmap len 100000 time elapsed [0.448862 ms]
2021-07-02 09:37:45 INFO RedisBaseline$:16 - read xstream len 100000 time elapsed [67.994358 ms]
hashmap 读取和 xstream 读取之间存在很大差距。 (我也在同一台机器上做了这个测试,但所有结果都是 <1ms 后稳定)
那么有没有简单介绍一下他们内部是如何工作的?为什么 xstream 更慢?是因为hashmap索引吗?有什么改进吗?