LeanDB 是 LeanCloud 云引擎提供的数据库产品,开发者可以在 控制台 > 云引擎 > LeanDB 页面创建高可用的 Redis、MySQL、MongoDB 或 ElasticSearch 数据库实例,供云引擎程序访问使用。
为了改善开发者在本地开发调试、对线上数据进行手动操作的体验,我们在 lean-cli 的 v0.26.0 版本中对之前只能访问 LeanCache 的 lean cache
命令进行了全新升级:
- 新增的
lean db shell
可以打开一个连接到云端 LeanDB 的交互式 shell,用于执行查询。
- 新增的
lean db proxy
可以将云端 LeanDB 导出到本地的一个端口,供本地的程序或图形化的数据库客户端连接。
使用 lean db shell
前需要在本地安装对应数据库的客户端工具,如 mysql
、redis-cli
或mongo
,如果本地有安装体验更好的mycli
或iredis
则会优先被使用。
例如我们连接到应用下名为 mysqldb 的实例上进行一些操作:
$ lean db shell mysqldb
Welcome to the MySQL monitor.
Your MySQL connection id is 3450564
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test
Database changed
mysql> insert into users set name = 'leancloud';
Query OK, 1 row affected (0.04 sec)
mysql> select * from users;
+------+-----------+
| id | name |
+------+-----------+
| 1 | zhenzhen |
| 2 | leancloud |
+------+-----------+
2 rows in set (0.06 sec)
之前的 lean cache
受限于底层实现,不支持一些阻塞式的命令。而全新的 lean db shell
则提供了完整的功能,例如现在可以使用 monitor
来实时查看线上命令执行日志(对性能影响较大):
$ lean db shell myredis
127.0.0.1:5678> monitor
OK
1632823101.683689 [0 172.30.123.51:53266] "subscribe" "RLB:RPC:rYAut-production:6FwS9" "RLB:RPC:rYAut-production:6FwS9:result"
1632823101.688893 [0 172.30.90.100:55642] "set" "RDB:rYAut-production:6FwS9" "0" "PX" "30000"
1632823105.066331 [0 172.30.90.100:55642] "keys" "RDB:rYAut-production:*"
1632823105.068613 [0 172.30.90.100:55642] "mget" "RDB:rYAut-production:hj0P7" "RDB:rYAut-production:6FwS9"
1632823106.655157 [0 172.30.90.100:55642] "publish" "RLB:RPC:rYAut-production:hj0P7" "{\"caller\":\"6FwS9\",\"id\":\"qVbUZQgLLn\",\"payload\":[\"makeReservation\",\"test\"]}"
1632823106.730899 [0 172.30.169.123:55072] "publish" "RLB:RPC:rYAut-production:6FwS9:result" "{\"id\":\"qVbUZQgLLn\",\"payload\":\"7ab5cf6f-d849-4efa-804f-b368a5382ffc\"}"
1632823112.222973 [0 172.30.169.123:55072] "set" "RDB:rYAut-production:hj0P7" "1" "PX" "30000"
1632823113.890698 [0 172.30.37.176:37892] "PING"
在 lean db shell
背后其实是 lean-cli 通过长连接将云端的 LeanDB 代理到了本地,然后调用 redis-cli 去连接本地的一个端口。
我们也通过 lean db proxy
将这种更底层的能力提供给了开发者:
$ lean db proxy myredis
[INFO] Now, you can connect myredis via [redis-cli -h 127.0.0.1 -a hsdt9wIAuKcTZmpg -p 5678]
不要关闭这个终端,使用输出的地址、端口和密码在新的终端中运行 redis-cli 的 --memkeys
来统计内存占用(对性能有一定影响):
$ redis-cli -h 127.0.0.1 -a hsdt9wIAuKcTZmpg -p 5678 --memkeys
[00.00%] Biggest hash found so far '"user:1000"' with 111 bytes
[00.00%] Biggest string found so far '"name"' with 54 bytes
[00.00%] Biggest list found so far '"mylist"' with 158 bytes
[00.00%] Biggest string found so far '"bigkey"' with 208 bytes
-------- summary -------
Sampled 4 keys in the keyspace!
Total key length in bytes is 25 (avg len 6.25)
Biggest list found '"mylist"' has 158 bytes
Biggest hash found '"user:1000"' has 111 bytes
Biggest string found '"bigkey"' has 208 bytes
1 lists with 158 bytes (25.00% of keys, avg size 158.00)
1 hashs with 111 bytes (25.00% of keys, avg size 111.00)
2 strings with 262 bytes (50.00% of keys, avg size 131.00)
在本地使用 lean up
进行开发测试时,也可以使用这个功能连接到云端的 LeanDB,设置环境变量(来自前面 lean db proxy
的输出):
export REDIS_URL_myredis=redis://default:hsdt9wIAuKcTZmpg@127.0.0.1:5678
然后就可以像平时一样使用 lean up
启动调试了,同时使用线上的 LeanCache。
你还可以把 lean db proxy
输出的连接信息填到本地的 GUI 客户端中来浏览操作云端的 LeanDB:
上面两张图分别是 Sequel Pro 链接 MySQL 和 Robo 3T 连接 MongoDB。
注意:lean db
命令访问云端 LeanDB 实例仅用于本地开发和测试,连接会偶尔断开(部分客户端可以自动重连),请不要用于生产环境。