跳到主要内容

LeanCloud 控制台使用指南

控制台首页

下面我们具体介绍控制台的各项功能。

之前在「快速开始」一节我们已经介绍了如何在控制台首页创建应用,以及查看应用卡片和财务信息。

除了这些内容,控制台首页最上方还有一个导航栏。 导航栏左上角为 LeanCloud 图标、节点切换、应用切换右上角为语言切换、帮助链接、账号设置

  • 如前所述,点击 LeanCloud 图标 即可返回控制台首页。
  • 节点切换 下拉菜单可以切换国内版、国际版。
  • 应用切换 下拉菜单可以切换当前节点的应用。
  • 语言切换 下拉菜单可以手动选择中文、英文,默认情况下,会根据浏览器偏好显示相应的语言。
  • 帮助 下拉菜单包括帮助中心、文档、论坛、工单等链接。

帮助中心会列出开发者最常咨询的一些问题,也提供了 LeanCloud 的联系方式。 文档为面向开发者的开发指南、常见问题、最佳实践等内容。 论坛可供开发者交流 LeanCloud 相关内容,并获取社区支持,LeanCloud 工程师有空也会浏览论坛。 工单仅向商用版开放,可以直接联系 LeanCloud 工程师获取技术支持。

切换菜单下方是创建应用按钮和搜索框,可以在搜索框输入文字过滤应用列表,往下是最常访问的若干应用,再往下为所有应用列表。

用户头像和用户名处的下拉菜单可以访问账号设置和财务页面,以及登出账号。

财务

之前「快速开始」一节已经介绍了财务方面最重要的两个功能:充值和余额告警。

这里会介绍更多财务相关的内容。

概览

这里除了可以查看余额、进行充值、设置余额告警外,还可以查看充值记录和消费明细

充值记录可以看到当前节点的充值记录,以及赠送记录(赠送金额的主要来源为优惠活动和故障补偿)。

消费明细可以看到当前节点的详细消费记录。 左上角可以选择查看所有服务的消费明细和具体某项服务的消费明细。 右上角可以切换消费明细的时间范围,包括最近 7 天、本月、上月、自定义范围。

消费明细会显示扣费应用、扣费服务、单价、用量、扣费金额,以及费用发生时间和扣费时间。 注意扣费时间和费用发生时间不一定一致,因为大多数服务会延迟扣费。 例如,云引擎的资源使用量按当天最大的实例数量计算,因此只有在次日才能计算出金额,进行扣费。 再如,由于文件服务的底层供应商延迟提供日志,文件服务的扣费会延后 3 天。

消费明细可以导出为 CSV 文件(控制台右上角)。

账单和发票

控制台 > 财务 > 账单页面可以查看过去 12 月的账单,账单包括每月总费用、各服务费用。 除了在控制台查看外,每月账单也会发送至账号绑定邮箱。 国际版的账单页面提供可打印版本下载,可以作为 invoice 使用。

国内版在控制台 > 财务 > 发票页面可以申请发票,查看发票申请记录。

申请发票的注意事项:

  • 无论采取哪一种付款方式,只有当累计支付金额达到人民币 1,000 后系统才允许申请,单笔开票金额不低于人民币壹仟元
  • 普通发票申请额在人民币 1 万元以下开具增值税电子普通发票,超过 1 万元的开具增值税纸质普通发票。
  • 开具增值税普通发票必须提供纳税人识别号或统一社会信用代码。
  • 仅限通过公司账户充值(银行对公转账或支付宝企业账号)的金额可以申请开具增值税专用发票,且发票抬头需和转账充值的账号一致。
  • 电子发票将默认发送到用户绑定邮箱。如有特殊要求(比如必须要纸质发票或者发送到其他指定邮箱),请在申请发票备注栏里写明。
  • 纸质发票以快递寄送(免费寄送)。
  • 发票在申请后 5 个工作日内开出。

应用设置

提示

在控制台首页选择对应的应用进入左边栏的设置,可以看到整个应用的通用设置。

基本信息

除了编辑应用名称、描述,以及删除应用外,这里还可以切换应用类型和转让应用。

切换应用类型

可以在开发版和商用版之间切换。 开发版和商用版的区别请参考价格页面的表格。 切换后,计价方案、特性限制即时生效,存储集群物理迁移一般于次日凌晨闲时进行。 存储集群物理迁移时应用处于只读状态,时长根据应用数据量从几秒到几十分钟不等。 基本信息页面最下方会显示当前应用所在的存储集群。

因为存在固定成本,切换到商用版后需要 30 天才可降级为开发版。

转让应用

商用版应用可以转让给其他账号。

转让方需要填写受让方邮箱账号,该邮箱需要是同一节点上已注册用户绑定的邮箱。 转让方进行操作后,受让方的邮箱会收到转让邮件,在 24 小时内点击其中的链接,跳转到受让页面,点击「确认」即可完成整个转让过程。 受让当日应用产生的消费(包括商用版最低消费)由受让方承担,请注意确保余额充足,以免次日扣费后因欠费导致服务停止。 如果受让方点击受让链接时,所属账号未登录,会跳转到登录界面。 受让方登录后,重新点击受让链接进行操作即可。

受让方未确认前,转让方可以在控制台取消转让。

应用转让后,会取消之前所有协作者的权限。 换句话说,转让应用后,需要重新设置协作者。

应用凭证

在之前「快速开始」一节,我们已经简单介绍了应用凭证 页面,这里再进行更详细的介绍。

每个 LeanCloud 应用有如下三个 id/key:

  • AppID:全局唯一的应用标识符,不可变更。
  • AppKey:公开的访问密钥,适用于在公开的客户端中使用。使用 AppKey 进行的访问受到 ACL 等权限限制。
  • MasterKey:私密的访问密钥,适用于在服务器等受信任环境中使用。使用 MasterKey 进行的访问拥有最高权限,不受 ACL 等权限限制。

MasterKey 仅限在受信任环境下使用,要注意保密。 万一不慎泄露,请立即在控制台重置

某些平台(如微信小程序)要求应用开发者在后台配置域名白名单才能正常访问。 因此应用凭证 页面也列出了 LeanCloud 客户端可能用到的域名。

域名绑定

域名绑定页面可以绑定 API 域名、云引擎域名、文件域名,详见域名绑定指南

协作管理

协作管理页面可以添加个人协作者和团队协作者。 如果需要添加单个账号,可以添加个人协作者。 创建团队后,添加团队协作者可以批量添加该团队下的所有账号。

添加协作者时选择所有权限,会对协作者开放应用各服务的权限(出于安全考虑,转让应用等特定操作仍然只有应用所有者可以执行)。 选择自定义权限,则可进行详细设置。

安全

安全中心可以开启、关闭各项服务,设置 Web 安全域名,设置仅通过 AppID 初始化 Android 应用

操作日志会显示应用创建者及所有协作者的重要操作记录,方便定位故障,排查可能的恶意操作和误操作。

各项安全设置的具体说明,请参考数据安全指南

存储

控制台 > 应用 > 数据存储 提供了数据管理功能。

结构化数据

创建新的 Class

点击创建 Class 按钮,可以新建 Class,如下图所示:

storage - create class

在创建 Class 对话框,我们还可以设置 Class 权限默认 ACL.

Class 名称一栏可以填写想要创建的 Class 名。 Class 名只能包含字母、数字、下划线,而且必须以字母开头。

商用版应用在新建 Class 可以选择创建为日志表。 日志表适用于写入后不会修改的「冷数据」。

与普通表(标准的 AVObject)相比,日志表的不同之处如下:

  • 日志表只能在控制台创建,不能通过 SDK 创建。
  • SDK 可以向已建好的表内保存数据,控制台不支持保存数据。
  • 日志表的数据显示会滞后,不是实时的。
  • 日志表的列不支持 Pointer、Relation 等复杂数据类型。
  • 日志表的列只能增加,不能减少,不能重命名。
  • 日志表的数据不支持 update、delete。
  • 日志表不支持使用 LCQuery 查询,只能通过 数据仓库 功能查询分析。日志表会实时入库数据仓库,并提供查询。
  • 日志表不支持 Class 绑定。
  • 日志表不支持应用内搜索。

日志表的价格和普通表一样,基于 API 请求数和数据存储空间收费。

警告

每个应用最多可以创建 300 个 Class。

查看 Class 数据

结构化数据左栏为 Class 列表,上方的创建 Class 按钮右侧有三个显示设置按钮,可以设置按 Class 名称或数据量排序,以及隐藏空 Class。 其下的筛选框可以输入字符串筛选出名称包含该字符串的 Class 列表(大小写不敏感)。

主要区域可切换显示数据、权限、性能与索引、Hooks 四个标签页。

数据标签页上部提供了数据操作相关按钮:

  • 添加行:添加一行新数据(新建一个 LCObject)。弹出对话框中除了填写各字段的值以外,还可以设置 ACL 权限,设置是否使用 masterKey 创建(跳过权限检查,默认勾选),是否跳过云引擎 Hooks
  • 添加列:添加一个新列(新建 Class 的属性)。弹出对话框中除了填写列名称、选择列类型外, 还可以设置列的默认值,设置列只读(客户端不可修改)、客户端不可见(客户端查询、获取对象时不会返回该列)、必填(客户端新建对象时必须附上此列)。
  • 刷新:进行部分数据操作后,控制台可能需要刷新一下才能看到效果。
  • 按条件过滤:提供了简单的图形界面供查询、筛选数据。其中,选择列的最后一项是自定义 Key 可供输入含点号的嵌套字段(例如 a.b.c)。选择条件中包含了常用的操作符(具体可用的操作符取决于类类型)。可以组合多个查询条件,构造出相当复杂的查询条件。不过并非所有查询条件都能通过图形界面构造,特别复杂的查询仍然需要通过 REST API 或 SDK 查询。
  • 批量操作:详见后文批量操作一个 Class 下的数据
  • 编辑单元格:通常单元格可以直接双击修改,但编辑单元格支持复杂编辑功能,比如编辑带换行符的字符串。
  • ...:一些不那么常用的操作,详见后文批量操作一个 Class 下的数据
  • 隐藏列显示密度全屏:详见后文数据视图显示调整一节。

数据标签页下部会显示记录条数,以及跳转到上一页、下一页和指定页的按钮,你也可以设置每页显示的数据条数。

数据标签页的主要区域是数据视图,它以表格的形式显示了当前 Class 下的数据。 点击 objectId 列的 objectId 能以 JSON 格式查看数据,点击 Pointer 类型列的 objectId 则会跳转到指向的数据。 双击单元格可以直接修改字段值。 点击列名右方的下拉箭头,可以选择排序列、编辑列(参见上文关于「添加列」的说明)、固定列(参见后文数据视图显示调整一节)、删除列功能。

数据视图调整

为了方便查看字段众多的 Class,控制台提供了一些调整数据视图显示的设置项:

  • 点击数据标签页上部的「显示密度」按钮可以切换紧凑、详细模式,点击「全屏」按钮则可以全屏显示数据表格。
  • 点击数据标签页上部的「隐藏列」按钮可以隐藏不关心的列。
  • 拖拽相邻列之间的间隔线可以调整列的宽度。
  • 点击列名右方的下拉菜单中的「固定列」,可以将该列固定(pin)到表格左部。

批量操作一个 Class 下的数据

在结构化数据的 Class 数据页面,点击「...」按钮,可以看到两种批量清理数据的方式:

  • 删除所有数据:这会删除这个 Class 下的所有记录,但是 Class 以及 Class 的索引依然保留。
  • 删除 Class:除了所有数据(包含索引)之外,这会连 Class 元信息也一并删除。

除此以外,也可在点击数据列名称的下拉菜单,删除整列数据。 不过有些内置列不允许删除,比如 createdAt,再比如 _User 表的 email 列。

点击「批量操作」按钮则能以更灵活的方式批量操作一个 Class 下的数据,可以设定条件筛选数据,然后对筛选的数据进行批量更新或删除。

控制台批量操作对话框:设置条件 》 选择操作 》 运行

应用之间共享部分数据

同一个帐户下的其他应用(称为「目标应用」)下的 Class(称为「目标 Class」)绑定到当前 Class,访问当前 Class 数据,将会访问到目标应用下的目标 Class 数据,这就是我们所谓的 Class 绑定 功能,用来解决应用之间数据共享的需求。最简单的应用就是 _User 表共享,不同应用之间打通帐户,可以相互注册和登录。

在 Class 的「权限」页面,我们可以设置 Class 绑定。设置绑定时,我们可以配置相应权限(可读、可写、可以删除数据)。绑定成功后,当前 Class 绑定之前存储的数据不会丢失,而是被「隐藏」起来,在解除绑定后仍然可以访问到。

给某个 Class 数据建索引

数据查询是很普通的操作,与传统关系型数据库一样,索引的优劣对于我们查询性能的影响非常大。

提示

控制台 > 数据存储 > 结构化数据 的左栏,Class 名旁有「乌龟」图标,就意味着该 Class 有慢查询。

切换到该 Class 的性能与索引标签页,可以查看慢查询的具体详情(日期、查询条件、次数、平均响应事件),并可根据需要创建索引。

注意:

  • LeanCloud 后端会为 GeoPoint 属性列创建索引,为自增属性列(在控制台创建列时选择类型为 Number,且勾选「自增」选项)创建唯一索引。另外,LeanCloud 后端也会智能分析你的请求逻辑,自动创建一些索引,来提升数据查询性能。如果不是你创建的索引请不要进行任何变更操作。
  • 索引可以有效改善查询性能,但是对于数据插入和修改则是有负作用的,所以是否创建索引、如何创建索引,还需要全面考虑慎重选择。
  • 如果 Class 内数据很多,点击「创建」按钮后,控制台可能会显示「排队中」。这意味着索引创建操作已进入任务队列,会在集群闲时(通常是凌晨)自动进行。
  • 在创建索引对话框,点击「添加索引字段」按钮可以创建联合索引。如需为多个字段分别创建索引,需要选择单个字段后点击「添加」按钮,并在索引创建成功后重复这一过程,逐一为每个字段创建索引。
  • 数据表的默认四个字段 objectIdACLcreatedAtupdatedAt 是自带索引的,但是在勾选时,可以作为联合索引来使用。
  • 「唯一索引」适用于 uuid 等使用场景。勾选「唯一索引」但不勾选「允许缺失值」时,最多只能有一条不存在该字段的数据,否则数据就不唯一了。如果可能存在不止一条不存在该字段的数据,请同时勾选「允许缺失值」。
  • 目前索引提供 3 种排序方案:正序、倒序和 2dsphere。其中 2dsphere 用于地理位置经纬度的数据(GeoPoint)。比如移动场景中一个常见的需求是查找附近的其他用户。由于存储服务支持双向遍历索引,因此单字段索引,正序和倒序是等价的,可随意选择。但联合索引的正序、倒序的组合需要根据业务需求选择。

下面以两个字段的联合索引为例详细说明正序、倒序的选择。我们假定创建 foo、bar 双字段联合索引时, foo 字段的索引选择正序,bar 字段的索引选择倒序。显而易见,foo 正序且 bar 倒序的查询能够利用索引。又因为支持双向遍历索引,所以上述查询的翻转形式 foo 倒序且 bar 正序也能利用索引。但是,foo、bar 同序(皆正序或皆倒序)的查询无法利用索引。同样是因为支持双向遍历索引的缘故,创建 foo 字段倒序、bar 字段正序的联合索引,效果是等价的。同理,foo、bar 字段同序的联合索引,能够被 foo、bar 同序的查询利用,不能被 foo、bar 异序的查询利用。三个或更多字段的联合索引以此类推。

查看 Class 的 Hook 调用情况

Hooks 标签页可以查看云引擎生产环境、预备环境的 Hook 调用情况。 这个页面会显示 Hook 名称、所属云引擎分组、每分钟请求数。 点击云引擎分组链接会跳转到相应的云引擎分组页面。

数据仓库

数据存储是为了在线事务处理 (OLTP) 而设计,它擅长于对象的增删改查,但对于运营分析中常常遇到的遍历汇总等需求是很低效的。为此,我们特别开发设计了「数据仓库」这一功能,来支持产品和运营层面需要的数据统计与挖掘需求。

在这里,可以选择开启 Class 的入库与同步。数据入库后,可支持在线的 SQL 查询分析。控制台还会保存最近使用的查询语句以便于交互查询。

还可以基于 SQL 语句构建视图,以简化后续查询。

该功能仅向商用版应用开放。

文件

类似上一节提到的用户页面,文件页面也提供了便捷的文件浏览管理功能,也可以在这里进行文件相关配置,以及查看文件用量。

文件管理

用户管理标签页类似,在文件管理标签页可以查看文件的 objectId、文件名、图片审核、大小、类型、创建时间、URL,以及上传、搜索文件。 同样,点击每一行记录可以查看文件详情,如果是图片文件,文件详情中会显示预览。 如有需要,也可以点击右上角链接切换到 _File 表的数据视图。

文件审核

当前文件审核功能支持检测图片文件。

你可以勾选「自动审核新上传图片」,还可以批量审核指定时间范围内的图片,图片审核结果将在 文件管理 标签页展示。

如果你需要人工二次审核,可以点击每一行记录,在文件详情中选择「通过」或「封禁」。

文件设置

如果绑定了多个文件域名或者换绑了文件域名,可以在设置标签页设置文件访问地址。 注意,即时通讯聊天记录中的 URL 并不会随之更新,因此请慎重选择文件域名,尽量避免更换。

如果需要限制上传文件的 MIME 类型,可以在上传策略处设置允许的 MIME 类型。 如果需要禁止某些 MIME 类型,可以在最前面加上叹号(!)。 例如:

  • image/* 只允许上传图片
  • image/jpeg;image/png 只允许上传 JPEG 和 PNG 图片
  • !text/html;application/xml;application/xhtml+xml 不允许上传网页文件

该选项的默认值是「任意」,也就是允许所有 MIME 类型的文件上传。 出于安全性考虑,如果应用的使用场景只需要支持特定类型的文件上传,我们建议开发者在此指明允许的 MIME 类型(如果希望支持某类 MIME,可以使用 * 通配符)。 如果应用对文件类型没有特别限制,我们建议开发者将此项设置为 !text/html;application/xml;application/xhtml+xml禁止上传网页文件。 否则,恶意用户可能滥用应用的文件上传功能在开发者所有的域名下托管网页文件,这可能造成安全风险和政策性风险。 例如,恶意用户在上传网页文件后,可以分享链接诱导其他用户点击,欺骗用户提交某些信息。 由于网页位于开发者所有的域名下,其他用户可能误认为这个网页是应用官方提供的网页。 再如,恶意用户上传的网页文件可以设置跳转到某个第三方页面,这个第三方页面可能包含违法违规内容,这可能给应用开发者带来政策性风险。

文件服务自带 CDN 支持,CDN 缓存时间为一个月。 因此文件删除后的一个月内仍然可以访问。 如有需要,可以在刷新 CDN点击刷新按钮刷新 CDN 缓存。 因为底层文件服务商限制了接口调用次数,所以这一功能仅向商用版应用开放,且每天只能刷新一次。

文件用量

用量标签页可以查看文件的存储空间占用量、流量、上传和删除次数。

信息

由于底层文件服务商的限制,文件相关统计可能会有一至三天的延迟。

LiveQuery

显示 LiveQuery 服务的统计信息,有两个标签页:

  • 当前数据 显示今日当前订阅数、整个应用和各 Class 的今日累计订阅数、下行消息数。
  • 趋势 显示最近 7 天、最近 30 天、上个月的用户数、消息数、订阅数变化趋势。

全文搜索

在这里可以进行全文搜索相关的配置,包括添加、修改、停用搜索 Class,重建索引,下载、更新自定义词库。 还可以查看全文搜索的索引大小和请求数(可分 Class、请求类型查看)。

参见全文搜索开发指南

导出数据

导入导出 下有四个标签页:数据导出数据导入备份恢复备份导出

数据导出标签页点击导出按钮即可开始导出任务。 导出完成之后会发送下载链接到账号绑定邮箱。

导出还可以限定 Class、开始日期和结束日期(updatedAt)。 你也可以只导出数据的 schema。

我们还提供了数据导出的 REST API

如果导出数据仅仅是为了进行备份或在本地进行一些数据分析,没有导入数据的需求,可以使用备份导出功能。 在备份导出标签页可以选择导出备份的日期(云端有最近 7 天的按天备份),以及需要导出的 Class。 备份导出的格式为 BSON,不支持导入,也不支持通过 REST API 导出。

导出用户数据的加密算法

导出的 _User 表数据会包括加密后的密码 password 字段和用于加密的随机盐 salt 字段。 LeanCloud 不会以明文保存任何用户的密码,我们也不推荐开发者以明文方式保存应用内用户的密码,这将带来极大的安全隐患。如果你要在 LeanCloud 系统之外校验用户的密码,需要将用户的传输过来的明文密码,加上导出数据里对应用户的 salt 字段,使用下文描述的加密算法进行不可逆的加密运算,其结果如果与导出数据里的 password 字段值相同,即认为密码验证通过,否则验证失败。

点击展开 用户数据的加密算法

我们通过一个 Ruby 脚本来描述这个用户密码加密算法:

  1. 创建 SHA-512 加密算法 hasher
  2. 使用 salt 和 password(原始密码) 调用 hasher.update
  3. 获取加密后的值 hv
  4. 重复 512 次调用 hasher.update(hv),每次hv都更新为最新的 hasher.digest 加密值
  5. 最终的 hv 值做 base64 编码,保存为 password

假设:

salt
h60d8x797d3oa0naxybxxv9bn7xpt2yiowz68mpiwou7gwr2
原始密码password
加密后
tA7BLW+NK0UeARng0693gCaVnljkglCB9snqlpCSUKjx2RgYp8VZZOQt0S5iUtlDrkJXfT3gknS4rRqjYsd/Ug==

实现代码:

require 'digest/sha2'
require "base64"

hasher = Digest::SHA512.new
hasher.reset
hasher.update "h60d8x797d3oa0naxybxxv9bn7xpt2yiowz68mpiwou7gwr2"
hasher.update "password"

hv = hasher.digest

def hashme(hasher, hv)
512.times do
hasher.reset
hv = hasher.digest hv
end
hv
end

result = Base64.encode64(hashme(hasher,hv))
puts result.gsub(/\n/,'')

非常感谢用户「残圆」贡献了一段 C# 语言示例代码:

/// 根据数据字符串和自定义 salt 值,获取对应加密后的字符串
/// </summary>
/// <param name="password">数据字符串</param>
/// <param name="salt">自定义 salt 值</param>
/// <returns></returns>
public static string SHA512Encrypt(string password, string salt)
{
/*
用户密码加密算法
1、创建 SHA-512 加密算法 hasher
2、使用 salt 和 password(原始密码) 调用 hasher.update
3、获取加密后的值 hv
4、重复 512 次调用 hasher.update(hv),每次hv都更新为最新的 hasher.digest 加密值
5、最终的 hv 值做 base64 编码,保存为 password
*/
password = salt + password;
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(password);
byte[] result;
System.Security.Cryptography.SHA512 shaM = new System.Security.Cryptography.SHA512Managed();
result = shaM.ComputeHash(bytes);
int i = 0;
while (i++ < 512)
{
result = shaM.ComputeHash(result);
}
shaM.Clear();
return Convert.ToBase64String(result);
}

非常感谢用户「snnui」贡献了一段 JavaScript(NodeJS) 语言示例代码:

function encrypt(password,salt) {
var hash = crypto.createHash('sha512');
hash.update(salt);
hash.update(password);
var value = hash.digest();

for (var i = 0; i < 512; i++) {
var hash = crypto.createHash('sha512');
hash.update(value);
value = hash.digest();
}

var result = value.toString('base64');
return result;
}

保留字段

注意,createdAtupdatedAt 属于保留字段,导出数据中直接编码为 UTC 时间戳字符串,和普通 Date 类型字段的编码方式不同。这一点与通过 REST API 查询这两个字段的返回结果是一致的。

{
"normalDate": {
"__type": "Date",
"iso": "2015-06-21T18:02:52.249Z"
},
"createdAt": "2015-06-21T18:02:52.249Z",
"updatedAt": "2015-06-21T18:02:52.249Z"

未包括的数据

导出数据仅包括结构化数据存储中的数据,不包括其他数据。 例如,以下数据不在导出数据的范围之内:

  • 即时通讯服务的聊天记录(可以通过 REST API 获取)
  • 文件服务托管的文件(导出数据仅包括文件的元信息,可以通过其中的 URL 下载)
  • 云引擎的代码(建议开发者自行使用 git 等工具管理)和环境变量(可通过 lean env 获取)
  • 其他各种应用配置信息

导入数据

数据导入标签页可以批量导入本地数据。

导入文件的格式要求:

  • 必须是 JSON 或者 CSV 文件
  • UTF-8 文件编码(不带 BOM)
  • 单个文件大小不能超过 30 MB。超大文件要拆分为小于 30 MB 的多个文件进行导入,只要使用同一个「Class 名称」,数据就会导入到一个表中。
  • 一次只能向一个 Class 导入数据。所以如果我们本地有多个 Class 的数据,需要按照 Class 类别分成多个文件依次导入。
警告
  • 数据文件的扩展名必须是 .csv 或者 .json 结尾,我们以此来判断导入数据的类型。
  • 数据导入不会触发任何 云引擎 hook 函数
点击展开 JSON 文件格式要求

JSON 格式要求是一个符合我们 REST 格式的 JSON 对象数组:

[
{
"likes": 2333,
"title": "讲讲明朝的那些事儿",
"isDraft": false
},
{
"likes": 233,
"title": "讲讲宋朝的那些事儿",
"isDraft": true
}
]

导入数据后,LeanCloud 会自动创建 objectIdcreatedAtupdatedAt 字段。

或者是一个包含了键名为 results、值为对象数组的 JSON 对象。例如:

{ "results": [
{
"likes": 2333,
"title": "讲讲明朝的那些事儿",
"author": {
"__type": "Pointer",
"className": "Author",
"objectId": "mQtjuMF5xk"
},
"isDraft": false,
"createdAt": "2015-11-25T17:15:33.347Z",
"updatedAt": "2015-11-27T19:05:21.377Z",
"publishedAt": {
"__type": "Date",
"iso": "2015-11-27T19:05:21.377Z"
},
"objectId": "fchpZwSuGG"
}]
}

这里,导入数据中已经包括了 objectIdcreatedAtupdatedAt 字段,LeanCloud 将沿用这些字段。

【日期】示例中,publishedAt 是一个日期型字段,其格式要求请参考 REST API · 数据类型

【密码】导入用户密码需要使用一个特殊的字段 bcryptPassword,并且完全遵循 Stackoverflow · What column type/length should I use for storing a Bcrypt hashed password in a Database? 所描述的加密算法加密后,才可以作为合法的密码进行导入。

如果导入数据中的 objectId 在当前的 Class 中已存在,那么会直接跳过,不会覆盖当前 Class 中的数据,以免数据意外丢失。 如有覆盖数据的需要,建议您通过控制台或 REST API 直接更新相应数据。 如果客户端不会请求这些数据,或者在导入期间请求不到结果是可以接受的,也可以通过控制台或 REST API 删除相应数据后重新进行导入操作。

除了上述 JSON 格式外,还支持导入如下 JSON Lines 格式的数据:

{"updatedAt":"2020-11-04T03:29:17.441Z","ACL":{"*":{"read":true,"write":true}},"objectId":"5cc6abe117b54d7448151efc","createdAt":"2019-04-29T07:46:41.687Z","likes":123}
{"updatedAt":"2020-11-04T03:15:32.943Z","ACL":{},"objectId":"5d1c81e76e9ba1007f89f2d2","createdAt":"2019-07-03T10:22:31.322Z","likes":456}

控制台导出的数据即为 JSON Lines 格式,导出文件扩展名为 .jsonl

点击展开 CSV 格式文件要求

导入 Class 的 CSV 文件格式必须符合我们的扩展要求:

  • 第一行必须是字段的类型描述,支持 intlongnumberdoublestringdatebooleanfilearrayobjectgeopoint 等。
  • 第二行是字段的名称
  • 第三行开始才是要导入的数据
string,int,string,double,date
name,age,address,account,createdAt
张三,33,北京,300.0,2014-05-07T19:45:50.701Z
李四,25,苏州,400.03,2014-05-08T15:45:20.701Z
王五,21,上海,1000.5,2012-04-22T09:21:35.701Z

导入的 geopoint 格式是一个用空格隔开经度、纬度的字符串(经度 纬度):

geopoint,string,int,string,double,date
location,name,age,address,account,createdAt
116 39,张三,33,北京,300.0,2014-05-07T19:45:50.701Z
120.5 31.2,李四,25,苏州,400.03,2014-05-08T15:45:20.701Z
121.4737 31.2304,王五,21,上海,1000.5,2012-04-22T09:21:35.701Z

CSV 导入也支持 Pointer 类型,要求类型声明为 pointer:类名,其中类名就是该 Pointer 列所指定的 className,列的值只要提供 objectId 即可,例如:

string,pointer:Player
playerName,player
张三,mQtjuMF5xk
李四,xPVrHL0W4n

注意:relation 已弃用,推荐使用中间表。以下仅供尚在使用 relation 的开发者参考:

导入 Relation 数据,比 JSON 简单一些,第一列对应 JSON 的 owningId,也就是要导入的 Class 的存在对象的 objectId,第二列对应 relatedId,对应关联 Class 的 objectId。例如:

dMEbKFJiQo,19rUj9I0cy
mQtjuMF5xk,xPVrHL0W4n

备份恢复

备份恢复标签页可以从近 7 日的备份恢复数据,详见《数据安全指南》的自动备份一节。

用量统计

用量统计包括与数据存储相关的各项统计数据,供分析性能问题、排查故障、评估成本时参考。 右上角可以切换统计数据的时间范围,例如过去 7 天、过去 30 天等。

工作线程与性能

工作线程与性能标签页展示了和性能相关的统计数据,包括工作线程数响应时间QPS。 除了平均数以外,还提供第三四分位数(75%)、第 95 百分位数(95%)、最大值。

工作线程数即服务器同时处理的请求数,假设有 60 个线程,一个请求耗时 20 ms,则一秒钟可以处理请求数为 (1000/20)*60 = 3000 个请求。 结合响应时间和 QPS(每秒请求数),可以判断工作线程数是否不足。 商用版应用如有需要,可提交工单申请调高工作线程数。

API 请求数和存储用量

API 请求数标签页汇总了应用访问量的变化趋势,支持按请求方法、平台、Class 分类展示。 切换到组成子标签页,能以饼图或柱状图的形式查看各请求方法、平台、Class 的请求数,方便查看比例和对比数据。

存储空间用量标签页以折线图的形式显示了结构化数据存储所占的空间。

状态码和错误码

HTTP 状态码API 错误码标签页分别展示了每日请求响应中不同 HTTP 状态码和 API 错误码所占的比例,以便分析应用是否异常。

API 请求日志

API 请求日志启用日志后,可以看到数据存储的写入操作日志,也就是 PUTPOSTDELETE 请求的日志。 因为 GET 请求的日志数量实在太大,因此 API 请求日志中没有包含这类请求。

日志包括请求方法、请求路径、是否使用 MasterKey、IP、UA、请求体等数据。 其中,由 LeanCloud 服务自身发起的请求(比如云引擎发起的请求),日志中的 IP 会是内网 IP。

由于日志数量巨大,通常我们会通过左上角的按条件过滤功能查找我们关心的日志。 过滤功能支持基于日期时间、关键字、objectId、Class、请求方法进行筛选。

服务设置

这里包括一些和安全、查询相关的配置项。

内建账户

内建账户页面提供了便捷的用户管理界面,也可以在这里进行用户相关的配置。

用户管理

用户管理标签页的用户视图有针对性地优化了表格结构,显示 ID(即 objectId)、用户名、邮箱、手机号、第三方登录、更新时间这些最核心的用户数据。

如有需要,也可以点击右上角在数据视图中查看,切换到结构化数据查看 _User 表的数据视图。

点击每一行记录则可以查看详情,详情页面可以进行一些管理操作,比如修改用户名、邮箱、手机号,以及发送密码重置邮件,复制 sessionToken,登出所有会话等。

点击左上角添加用户按钮可以直接添加用户。

旁边的搜索框可以通过用户名、邮箱、手机号、objectId 搜索用户,还可以使用高级搜索功能,基于复杂的查询条件搜索用户(使用方法与结构化数据按条件过滤功能类似)。

用户设置

设置标签页可以进行用户相关功能的配置,主要是登录(包括第三方登录)和安全方面的配置项。

具体选项可以查看控制台及参考 自动验证第三方平台授权信息,此不赘述。

邮件模板

邮件模板标签页可以自定义邮件验证和重置密码的邮件模板,以及相应的跳转 URL,详见自定义邮件验证和重设密码页面

云引擎

可以在这里配置和查看云引擎分组及 LeanDB。

云引擎分组

这里列出了当前应用下所有的云引擎分组,点击加号可以展开一个分组。

资源页面可以调整云引擎实例的规格和数量

部署页面可以查看预备环境、生产环境的部署状态和历史部署,也可以设置通过 git 部署代码以及在线编辑云函数

统计页面可以查看云引擎的[请求数、响应时间、CPU、内存和流量统计。

日志页面可以查看云引擎的部署和运行日志

设置页面可以设置和查看云引擎环境变量,查看出入口 IP

组管理

组管理页面可以创建和删除云引擎分组

定时任务

定时任务页面可以查看和设置定时任务

访问日志

这里可以按天导出云引擎最近 7 天的的访问日志,也会显示之前导出日志的操作时间和日志日期。

在左上角下拉菜单选择日期后,点击导出按钮即可导出日志。 导出成功后控制台会显示下载链接,下载的日志为 gzip 压缩后的文本文件。 访问日志包括 IP、请求时刻、HTTP 方法、请求路径、协议、HTTP 状态码、请求体大小、UA 等信息。

云函数

这里可以查看和运行云函数

LeanDB

LeanDB 页面可以管理 LeanCache(Redis)MySQLMongoDB 实例。

即时通讯

统计页面可以查看即时通讯的基本数据,包括用户数、连接峰值数、消息数、流量、REST API QPM 峰值。

用户页面可以输入用户 ID,查看用户相关信息,包括在线状态、未读消息数、关联设备、消息、日志,还可以测试签名

关联设备对应数据存储的 _Installation 表,包含 objectId、设备类型、deviceToken/installationId、订阅频道、更新时间。

消息包含消息 ID、内容、对话、发送时间,并支持筛选出指定时间之前的结果。 勾选「显示源代码」可以显示 JSON 格式的原始消息内容,点击消息 ID 旁的「查看详情」按钮可以查看 JSON 格式的消息数据。

注意:如果用户不存在,返回的在线状态永远是离线。

对话页面会显示对话列表,包括对话 ID、名称、创建者、成员、最近消息事件、创建时间。 如果是聊天室,名称处会标示「聊天室」,创建者、成员为空。 在左上角的搜索框可以输入对话 ID、创建者、成员,查询相应对话。 点击对话 ID 会显示详情,包括在线人数、JSON 格式的对话原始数据(对应数据存储的 _Conversation 表)、用户数、发消息用户数、消息数、消息列表、事件日志。 点击创建者或成员,则会跳转到相应的即时通讯用户页面。

发送消息页面是一个简单的 web 界面,可满足基本的测试、运营需求。 支持向单聊、群聊、聊天室发送消息,也支持通过服务号向指定用户、订阅者发送消息,还支持全局广播。 消息类型支持文本(输入文本内容)、图片(输入图片 URL 或上传图片)、自定义消息类型(输入原始 JSON 格式数据)。

日志页面可以查看事件日志,可以根据时间、事件类型、用户 ID、对话 ID、消息 ID 筛选。 不同事件显示的内容不同,例如,「登录」事件会显示 SDK 版本,「服务器收到客户端发送的消息」事件会显示相应的对话 ID、是否是暂态消息等。

设置页面可以配置即时通讯的相关选项,包括签名、对话成员角色、黑名单、是否允许 SDK 编辑和撤回消息、是否忽略 Hook 失败、敏感词过滤、服务阈值、离线推送内容、服务号消息回调。

推送

统计页面可以查看推送人次、推送成功人次、Android 活跃设备数、API 请求数、REST API QPM 峰值, 右上角可以切换不同的时间段,比如过去 7 天、过去 30 天。

在线发送页面提供了一个简单的发送推送的 web 界面,可满足基本的测试、运营需求。 除了全部推送外,还可以根据设备类型、最近活跃时间、其他 _Installation 字段筛选出推送目标。 推送内容可以是文本,也可以是 JSON,还可以在控制台上传文件推送给客户端(客户端会收到该文件的 URL)。 另外,还可以设置定时推送、过期时间、平缓推送。

推送记录页面可以输入推送 ID,查询相应的推送记录,会显示内容、状态、目标设备数、成功设备数、创建时间、完成时间。 除了根据推送 ID 查询外,也可以根据推送状态(完成推送、过期推送、等待推送、定期推送)、是否属于即时通讯离线自动推送、推送时间进行查询。

定时推送任务页面会显示定时推送列表,包括推送 ID、内容、推送时间、创建时间。 此外,还可以在这里取消还未执行的定时推送任务。

设备页面可以根据设备的 installationId 查询设备在线状态和 badge 数。

设置页面可以设置是否允许从客户端进行消息推送,频率上限,Android 厂商推送和 iOS 的 APNs 推送的相关配置。

短信

统计页面展示了短信的汇总数据,包括发送成功、验证成功、无法确认、等待回执、投递失败、调用失败的短信数量。 右上角可以选取时间范围,比如过去 7 天、过去 30 天。

在线发送页面提供了一个简单的发送短信的 web 页面,可满足基本的测试、运营需求。 填入手机号(支持多个手机号),选择签名和模板,并填入相应的模板变量后即可发送短信。

发送记录页面可以查询 2 个月内的短信发送记录,包含手机号、内容、状态、时间信息。 可根据手机号、内容、日期、状态搜索记录。

请求日志页面可以查看调用短信接口的日志,包括手机号、请求内容、返回值、时间、来源信息。 左上角可以输入手机号查询发往特定手机号的短信,右上角则可以选取时间范围。

签名与模板页面可以申请、管理短信签名和模板

设置页面可以进行短信服务的相关配置,包括是否启用通用短信验证码服务、是否启用国际短信、是否强制使用图形验证码、每日消费金额上限。 在这里还可以设置测试手机号。 测试手机号会收到固定的验证码,方便开发调试、应用审核。

Play

Play 包括多人在线对战排行榜服务。

多人在线对战

统计页面展示多人在线对战服务的基本数据,包括最大 CCU、每房间消息速率的平均值、最大房间数、流量。 右上角可以切换时间范围,最近 6 小时、最近 24 小时、最近 48 小时、最近 7 天、最近 30 天、最近 1 年。 其中,只有商用版可以切换时间范围为最近 7 天、最近 30 天、最近 1 年,因为开发版只保存最近 48 小时的数据。

Client Engine页面可以部署多人在线对战 Client Engine,查看统计信息和日志,进行相关设置,功能界面与云引擎相似。

排行榜

数据页面可以查看和新建排行榜。 新建排行榜时可以设定名称(设定后不可更改)、排序(可选择升序或降序,选定后不可更改)、更新策略、重置周期。 创建排行榜后,如需修改更新策略或重置周期,可以点击相应排行榜的编辑按钮。

统计页面展示了排行榜服务的 API 请求数(包括总请求数、Get 请求数、Put 请求数)和记录数。

设置页面可以设定是否保留前一个版本,是否只允许使用 Master Key 更新分数。