另一份测试是通过 JuiceFS 自带的 bench 工具跑的,其运行的是操作系统读写文件的接口,具体结果如下:
Redis-AlwaysRedis-EverysecTiKVMySQLetcdWrite big file565.07 MiB/s556.92 MiB/s553.58 MiB/s557.93 MiB/s542.93 MiB/sRead big file664.82 MiB/s652.18 MiB/s679.07 MiB/s673.55 MiB/s672.91 MiB/sWrite small file102.30 files/s105.80 files/s95.00 files/s87.20 files/s95.75 files/sRead small file2200.30 files/s1894.45 files/s1394.90 files/s1360.85 files/s1017.30 files/sStat file11607.40 files/s15032.90 files/s3283.20 files/s5470.05 files/s2827.80 files/sFUSE operation0.41 ms/op0.42 ms/op0.45 ms/op0.46 ms/op0.42 ms/opUpdate meta3.63 ms/op3.19 ms/op7.04 ms/op8.91 ms/op4.46 ms/op从上表可以看到,读写大文件时使用不同的元数据引擎最后性能是差不多的 。这是因为此时性能瓶颈主要在对象存储的数据读写上,元数据引擎之间虽然时延有点差异,但是放到整个业务读写的消耗上,这点差异几乎可以忽略不计 。当然,如果对象存储变得非常快(比如都用本地全闪部署),那么元数据引擎的性能差异可能又会体现出来 。另外,对于一些纯元数据操作(比如 ls,创建空文件等),不同元数据引擎的性能差别也会表现的比较明显 。
03-引擎选型的考虑要素根据上文介绍的各引擎特点,用户可以根据自己的情况去选择合适的引擎 。以下简单分享下我们在做推荐时会建议用户考虑的几个要素 。
评估需求:比如想使用 Redis,需要先评估能否接受少量的数据丢失,短期的服务中断等 。如果是存储一些临时数据或者中间数据的场景,那么用 Redis 确实是不错的选择,因为它性能够好,即使有少量的数据丢失,也不会造成很大的影响 。但如果是要存储一些关键数据,Redis 就不适用了 。另外还得评估预期数据的规模,如果在 1 亿文件左右,Redis 可以承受;如果预期会有 10 亿文件,那么显然单机 Redis 是难以承载的 。
评估硬件:比如能否连通外网,是使用托管的云服务,还是在自己机房内私有部署 。如果是私有部署,需要评估是否有足够的硬件资源去部署一些相关的组件 。无论是用哪一种元数据引擎,基本上都要求有高速的 SSD 盘去运行,不然会对其性能有比较大的影响 。
评估运维能力,这是很多人会忽视的,但是在我们来看这应该是最关键的因素之一 。对于存储系统来说,稳定性往往才是其上生产后的第一重点 。用户在选择元数据引擎的时候,应该先想想自己对它是不是熟悉,在出现问题时,能否快速定位解决;团队内是否有足够的经验或精力去把控好这个组件 。通常来说,我们会建议用户在开始时选择一个自己熟悉的数据库是比较合适的 。如果运维人员不足,那么选择 JuiceFS 公有云服务也确实是个省心的选项 。
最后,分享下社区在使用元数据引擎方面的一些统计数据 。
- 目前为止,Redis 的使用者依然占了一半以上,其次是 TiKV 和 MySQL,这两类的使用者的数量占比在逐步增长 。
- 在运行的 Redis 集群的最大文件数大概是在 1.5 亿,而且运行情况是比较稳定的,上文提到的推荐的 1 亿文件是建议值,并不是说无法超过 1 亿 。
经验总结扩展阅读
- 原神元能尖碑都在哪些地方
- 碧蓝航线核心数据怎么得
- 元素地牢全人物解锁方法
- 可控硅的关断方法
- 原神主角怎么换元素
- Docker | 容器数据卷详解
- 如何优雅的备份MySQL数据?看这篇文章就够了
- 开心消消乐重新安装数据会恢复吗
- 大数据技术之HBase原理与实战归纳分享-上
- 移动免费宽带要什么条件