根据本人浅薄的经验,了解一个数据引擎可能涉及以下问题:
目录
1. 概念
先粗略看看是否适合自己的需求,从官网/社区/技术博客,初步了解这个KV适合哪些场景,最佳实践,不适合哪些场景(不一定完善,不完善的自己进行测试不要人云亦云)。不适合的场景也跑一跑,看看到什么程度(数据大小到什么级别,请求量到什么级别会有比较大的性能拐点)看看性能到底什么样?
2. 架构
都有哪些节点,每个节点负责什么功能,通过什么协议进行交互的
3. 部署
部署起来跑一跑:使用一下api看看基本的相应时间和支持的操作
4. 元数据
元数据管理,元数据信息分发,客户端是否有缓存?
5. 写数据链路
flush?,数据副本是同步发送还是异步发送,串行还是广播?、一致性,故障时候如何保证不丢失数据,故障到什么程度会阻止写入/读取?
6. 查询链路
数据只能从一个进程查询还是从多个服务进程查询?是否可以写在一个节点,读在另外的节点?
阶段总结
给出一句话的总结:适合什么场景,不适合什么场景。
总结就是总结,不要给长篇大论看半天 还不知道到底是否适合自己的需求
一些经常被关心的功能和特点
7. 旧数据清理
TTL,后台文件合并:HBase的compaction,Opentsdb的compaction,druid的文件合并
8. 数据的hash
数据按什么策略分到不同的进程中的?HBase可以做预分区。Es是根据分片策略进行分发
9. 离线文件导入导出
是否有工具是否支持跨集群
10. 故障恢复机制
故障恢复时间决定了这个服务大部分适合对接线上需求还是更适合离线场景
11. 对比其他引擎
和其他在应用方面类似的系统/DB进行对比:
* 数据类型支持哪些不支持哪些
* 支持哪几种api操作
* 数据导入导出是否有工具支持
* 扩容如何进行对用户是否有影响
* 底层支持的存储的数据量
* 一条数据最优大小
* 一次操作最优数据Size
* TTL:表级别?列级别? cell级别?
* 事务支持级别
* 其他独有特性:HBase支持动态列,其他引擎的二级索引
* 其他引擎有哪些性能优化的点
扩缩容机制、方案
性能瓶颈点:如何“明显”提升性能(代码或其他策略)数据结构,算法,新论文
如何判断合适该扩容,何时该缩容,是否有明确的算法
索引机制
一致性问题处理过程中的边界条件判断,极端场景的处理,