数据
我们设计Parse SDKs,就是为了在使用client SDKs时不需要担心数据是如何保存的。只需将数据添加到Parse Object,它就会正确保存。
然而,有些情况下,了解在Parse平台上数据是如何存储的还是有用的。
1.数据存储
在内部,Parse将数据存储为JSON格式,因此任何可以转换为JSON的数据类型都可以存储在Parse中。请参阅本指南中的“02.对象Objects”章节的“数据类型”部分,了解特定平台的示例。
包含“$”或“.”字符的键,以及“__type”形式的键是框架中保留用于处理其他类型的,因此请勿自行使用。键名必须只包含数字,字母和下划线,必须以字母开头。值可以是JSON编码的任何内容。
2.数据类型锁定
当一个Class被创建时,它没有定义一个固有的Schema。这意味着对于该类的第一个对象,它可以包含任何类型的字段。
但是,一个字段至少一次被设定后,该字段就被锁定为已保存数据的类型。例如,如果User对象保存了String类型的name字段,则该字段将被限定为String类型(如果您尝试保存其他类型,服务器将返回错误)。
一个特殊情况是,任何字段、无论是什么类型都可以设置为null。
3.数据浏览器
数据浏览器是你可以在app中更新和创建对象的Web UI界面。在这里,您可以看到类中的每个对象保存的原始JSON值。
当使用这个界面时,请记住以下几点:
- objectId,createdAt,updatedAt字段不能被编辑(这些被自动设定)。
- 值“(empty)”表示该特定对象的该字段还未设定(这不同于null)。
- 在选中某值时,可以通过按下Delete键来删除字段的值。
数据浏览器也是测试Cloud Code Functions(如beforeSave)中Cloud Code有效性的好地方。每当从数据浏览器中更改值或删除对象时,都会运行这些Functions,效果与在客户端代码更改或删除值一样。
4.导入数据
您可以使用CSV或JSON文件将数据导入Parse应用程序。想通过CSV或JSON文件中的数据创建一个新类,请转到数据浏览器,然后单击左侧列中的“导入”按钮(译者注:Parse Server中没有这个按钮)。
这里的JSON是我们REST服务的对象数组或包含一个对象数组的results JSON 对象。它必须遵守JSON标准。一个包含常规对象的文件可能如下所示:
{ "results": [
{
"score": 1337,
"playerName": "Sean Plott",
"cheatMode": false,
"createdAt": "2012-07-11T20:56:12.347Z",
"updatedAt": "2012-07-11T20:56:12.347Z",
"objectId": "fchpZwSuGG"
}]
}
任何一种格式的对象都应该包含满足以下条件的键和值:
- 键名必须只包含数字,字母和下划线,必须以字母开头。
- 没有值,可能是包含一个硬换行' \n'。
通常,当对象保存到Parse时,将自动为之分配一个唯一的标识符到objectId字段,以及表示对象在Parse Cloud中创建时间和上次修改时间的createdAt字段和updatedAt字段。当从JSON文件导入数据时,可以手动设置这些字段。请记住以下几点:
- 使用唯一的10个字符的字母数字字符串作为objectId字段的值。
- 在为createdAt字段或updatedAt字段设置值时,请使用ISO 8601格式的UTC时间戳。
除了暴露的字段之外,Parse User类中的对象也可以设置bcryptPassword字段。该字段的值是一个在StackOverflow Answer中描述的模块化加密模式的bcrypt散列密码+salt的字符串。大多数基于OpenSSL的bcrypt实现应该具有内置方法来生成这些字符串。
包含User对象的文件可能如下所示:
{ "results":
[{
"username": "cooldude",
"createdAt": "1983-09-13T22:42:30.548Z",
"updatedAt": "2015-09-04T10:12:42.137Z",
"objectId": "ttttSEpfXm",
"sessionToken": "dfwfq3dh0zwe5y2sqv514p4ib",
"bcryptPassword": "$2a$10$ICV5UeEf3lICfnE9W9pN9.O9Ved/ozNo7G83Qbdk5rmyvY8l16MIK"
}]
}
请注意,利用CSV导入时,字段类型仅限于String、Boolean和Number。
5.导出数据
您可以随时从app的“设置”页面导出数据。数据导出的运行优先级低于生产查询,因此如果您的app仍在提供查询,生产流量将始终被赋予更高的优先级,这可能会降低数据导出的速度。
导出格式
每个Collection将以与REST API相同的JSON格式导出,并以单个压缩文件的形式传送。由于内部以JSON格式存储数据,因此我们可以确保导出的格式与数据保存到Parse中的格式非常吻合。其他格式如CSV不能全面支持Parse的所有数据类型。如果您想用CSV格式的数据,您可以使用网上广泛应用的JSON-to-CSV转换器。
离线分析
为了离线分析您的数据,我们强烈建议您使用不需要一次提取整个集合数据的其他方式。例如,您可以尝试仅导出自上次导出以来已更改的数据。这里有一些方法:
在node应用程序中使用JavaScript SDK。Parse.Query.each()将提取与查询匹配的每个对象。您可以使用日期约束来确保查询仅匹配自上次运行此应用程序以来已更新的数据。您的node应用程序可以将此数据写入磁盘进行离线分析。
在脚本中使用REST API。您可以在class的运行查询中使用skip/limit来对结果分页,然后将其写入磁盘进行离线分析。同样的,您也可以使用日期约束来确保仅提取新更新的数据。
如果上述两个选项都不符合您的需要,您可以尝试使用数据浏览器选择性导出数据。点击“漏斗”图标为需要导出的特定数据(如新更新的对象)创建一个过滤器。应用过滤器后,点击数据浏览器右上角的“导出数据”图标。这种导出操作只会包含符合条件的对象。