
# LevelDB到GeminiDB Redis的迁移
LevelDB是一个开源的持久化KV单机数据库引擎，具有很高的随机写，顺序读/写性能，适合应用在写多读少的场景。其内部没有设计成C/S网络结构，使用时必须和服务部署在同一台服务器，对于服务的部署、使用有较大的限制。相比于在LevelDB基础上开发的RocksDB, LevelDB存在较多缺点，如无法很好地使用多核服务器的计算性能，无法支撑TB级数据存储，不支持从HDFS读取数据等。
GeminiDB Redis接口采用RocksDB作为存储引擎，兼容Redis协议，具有丰富的数据类型，可以满足LevelDB的使用需求。同时GeminiDB Redis接口对RocksDB进行深度定制，实现秒级分裂弹性扩容，扩缩容无需搬迁数据，快速而平滑，为LevelDB业务转到Redis生态提供了便利。
本章节主要介绍LevelDB到GeminiDB Redis接口的迁移方案。
#### 迁移原理
- 使用自研迁移工具leveldb-port，和LevelDB部署在相同机器上，准备好配置文件，启动迁移即可自动完成全量与增量的迁移。
- 全量迁移对LevelDB数据进行快照，然后扫描整个数据库，将数据打包成GeminiDB Redis接口识别的格式，发送到GeminiDB Redis接口，具有很高的迁移效率。
- 增量迁移解析LevelDB的wal文件，将LevelDB的操作解析出来，然后对其中的key进行分片，多线程进行发送。
 
#### 使用须知
- 迁移工具需要部署在源端，对性能有一定消耗，可通过修改配置文件进行一定的控制。
- 迁移过程读取LevelDB的源数据文件，只读操作，理论上不会有数据受损风险。
- 迁移过程不需要停服。

- 若迁移过程出现故障，需要清理GeminiDB Redis实例，重新启动迁移。
 
#### 操作步骤
如需进行LevelDB到GeminiDB Redis接口的迁移，您可以在管理控制台右上角，选择"[工单 \> 新建工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)"，联系客服进行处理。
#### 迁移性能参考
- 环境：源端LevelDB和leveldb-port部署在华为云4U16GB的弹性云服务器上，目标端为2U8GB，3节点的GeminiDB Redis实例。
- 全量迁移：预置10GB数据，迁移速度约8MB/s。
- 增量迁移：设置value值大小为1KB，迁移速度约为7000qps。
 
