LeanStorage
数据存储
存储服务提供了完善的账户和 ACL,允许客户端直接调用 LeanCloud 的 API 来存取云端的对象,无需预先定义类型,也不必自己搭建服务器和编写后端接口。
LeanCloud 的数据存储为海量的对象而设计,提供可无限扩展的高可用架构,也是 LeanCloud 最核心的服务。
功能
结构化对象
一个对象就是一张表里的一条记录,字段可以随时增加。查询支持条件、排序、分页和统计,也可以按距离检索地理位置。
文件存储
可用于存放图片、文档、音视频等文件,多副本保存并通过 CDN 分发,可以按需生成缩略图。
ACL 权限控制
读写权限分别设置在整表、单列和单行三个层次上,可以开放给所有人、已登录的用户,或指定的用户与角色。
内建账户系统
用户可以用邮箱或手机号注册登录,也可以用微信、QQ、微博等第三方账户登录。围绕账户还有好友关系和状态流。
LiveQuery
客户端可以订阅一个查询,此后符合条件的数据在云端增删改,都会实时下发到客户端,不必轮询。
搜索与分析
全文搜索让用户能在应用内按关键词找到内容,结果按相关度排序;数据仓库用 SQL 对积累下来的业务数据做统计和分析。
优势和特色
多副本分布保存,提供 99.999% 的数据可靠性和超高并发访问能力。完善的备份机制确保数据万无一失。
扩展功能组件,支持朋友圈、动态消息等常见社区功能,让业务开发更简单便捷。
每天支撑超过 10 亿次请求,峰值压力堪比电商秒杀。自动应对流量高峰,服务稳定可靠。
SDK 支持
客户端 SDK 覆盖这些语言和平台,此外也可以直接调用 REST API。
JavaScript
浏览器 · Node.js · 小程序
Objective-C
iOS · macOS · tvOS · watchOS
Swift
iOS · macOS · tvOS · watchOS
Java
Android · 服务端
C#
.NET · Unity
Python
服务端
PHP
服务端
Go
服务端
Flutter
iOS · Android
Unreal
Unreal Engine
技术介绍
结构化数据实际存储在 MongoDB 集群上,集群由多个副本构成,分离查询的同时提供高可用。除了用户手动创建的索引,还有自动化分析工具来自动结合慢查询创建索引,改善查询性能。
团队最早的成员大多来自 Clojure 社区,因此服务端技术栈主要是 Clojure。服务整体由多个独立的子服务构成,共用一套基础设施:客户端的请求先到达 API Server,由它核对身份与权限,实现 LeanCloud 扩展的额外功能,再调用 MongoDB 完成实际的读写操作。
此外还有一些相对独立的组件:全文搜索基于 Elasticsearch 构建;数据仓库基于 ClickHouse 构建;LiveQuery 则会复用即时通讯的长连接。

价格方案
以中国节点的价格为例。开发版有免费额度,商用版按用量计费,另有企业版需商务洽谈。
| 开发版 | 商用版 | |
|---|---|---|
| API 请求 | 免费 3 万次 / 天,与即时通讯、消息推送等服务共享额度 | 1.0 元 / 万次 |
| 并发线程 | 免费 3 个 | 最大 200 个 |
| 数据存储空间 | 免费 1 GB | 0.10 元 / GB / 天 |
| 文件存储空间 | 免费 10 GB | 0.16 元 / GB / 月 |
| 全文搜索 | 免费 1 万次查询 / 天 | 2.5 元 / 万次 |
| LiveQuery | 免费 100 次订阅 / 天,5000 条下发消息 / 天 | 每千次订阅 4.0 元 / 天,每万条消息 2.0 元 / 天 |
更新历史
2022.05.11
2022.02.18
2021.04.09
支持导出 BSON 备份数据
备份改用 BSON 格式导出,比原有的 JSON Lines 快,可以选最近 7 天里的任意一天,也可以只导出部分 Class。
2021.01.05
2020.10.20
2020.08.07
2020.06.09
2019.08.05
推出独立部署方案
存储集群、API 集群和扩展服务集群各自独立部署,物理隔离,由单个应用独享。共享集群上的限制随之放开:并发请求数上限、批量修改和删除、建索引,以及 group by、distinct count 这类聚合查询都可以使用。离线分析和应用内搜索也有独立部署的版本,前者支持自定义函数,后者可以定制分词和排序。
同年 10 月,独立部署的 API Server 又增加了索引操作和聚合查询的 REST API,跨表 join 和 distinct 这类查询可以直接发给它。
2017.06.09
LiveQuery 正式发布
订阅一个 Query,云端数据一有变化就推给客户端,不用再轮询。支持 create、update、delete、enter、leave、login 六种事件,首批可用于 Android、JavaScript 和 iOS SDK。
2016.11.28
2016.08.05
开放 Schema 查询与 Class 遍历接口
两个需要 Master Key 的新接口:查询一个 Class 的 Schema,用来做平台管理工具和代码生成;遍历整个 Class,用来做批处理。
2015.11.10
2015.11.03
2015.01.19
离线数据分析发布
可以对应用数据跑 SQL,支持 join、group by 和聚合函数——这些都是 CQL 做不到的,此前只能每天把数据导出来自己算。次月起分析结果可以导出,或另存为一个 Class。
2014.12.12
2014.09.26
CQL 支持用 SQL 语法查询
Cloud Query Language 是 SQL 的一个子集,把
AVQuery的条件写成select ... from ... where ...的形式,它是查询 API 的一层封装。2014.05.19
应用内搜索发布
为开启搜索的 Class 建立全文索引,用类似搜索引擎的语法查询,结果按相关度排序,还可以通过 DeepLink 直接跳进应用内的对应页面。首发只提供 Android 组件,这项功能后来更名为全文搜索。
2014.03.31
推出 Class 绑定功能
一个 Class 可以绑定到同账号下另一个应用的 Class,单独授予读、写、删除权限,两张表此后共享全部数据。典型用法是把新应用的
_User绑到老应用,让老用户不必重新注册。2014.01.23
发布事件流系统
建在内建账户系统上的一组社交接口:用户之间可以关注,关注关系存在
_Follower和_Followee表里;发布的状态进入粉丝的收件箱,按时间倒序读取。动态消息、朋友圈这类功能不用自己建表和写扇出逻辑。同年 10 月,关注关系可以带上自定义属性,属性能用作查询条件和排序字段。
2014.01.16
2013.09.09
支持数据导入与导出
一个 Class 的数据可以导出成 JSON,也可以从 JSON 导入。导入接受 Parse.com 导出的格式,从 Parse 迁过来的应用可以把数据直接传上去。
2013.09.09
2013.08.30
应用支持 Master Key 超级权限
在 App Key 之外新增一个拥有超级权限的密钥,可以越过 Class 权限和对象 ACL 操作任何对象,自建的后台管理系统用它。
数据来源
功能介绍与价格参考了 LeanCloud 官网的 数据存储产品页 和 开发文档;「优势和特色」段落原文摘录自官网。
更新历史整理自 LeanCloud Blog 的产品更新汇总、月度通讯和单独发布的公告。