数据

Parse SDK被设计成让开发者无需考虑数据是如何被存储的,只需要添加数据到对象,数据就会被正确的存储。

然而某些情况下,了解数据是如何被存储到云端,是很有用的。


数据存储

本质上,Parse存储的是JSON格式,所以任何可以转换成JSON的数据都可以被存储到Parse。这在对象章节有做介绍。

键名中$.以及__type是被保护的关键词,用以处理其他类型,所以不要使用它们作为键名。键名只能由数字、字母和下划线组成,并且必须以字母开头,键值可以是任何能被JSON编码的类型。


数据类型锁定

当一个class表创建完成,它还没有被定义各字段类型,这意味着你创建首个class对象的字段类型,可以是任何你希望的类型。

不过,一旦字段类型被设置了至少一次,这个字段的类型将被锁定为设置的字段类型。举个例子,加入你有一个User对象,你为其设置了String类型的name字段,那么以后name的数据类型只能是String,如果你尝试保存其他类型到这个字段,服务器会返回错误。

有一个特殊情况,就是任何类型的字段都可以被设置为null


数据浏览器

数据浏览器是用来增删查改你的应用数据的后台界面,在这里,你可以看到保存的每个对象的原始JSON值。

当你使用这个界面时,你需要注意一下几点:

  • objectIdcreatedAtupdatedAt字段不能被编辑,它们是自动设置的;
  • 值为“(empty)”的字段表示其对象字段还未被设置,这和值为null不同;
  • 你可以选中之后点击删除键删除字段的内容;

数据浏览器也是测试云代码功能(比如beforeSave)的到地方,当你从数据浏览器修改或删除一个对象,就会触发对应的云代码,就像他们被你的客户端代码修改或删除了一样。


译者注:本章的数据导入和数据导出两小节,其功能在Parse未关闭服务前,在Parse.com上可用;现在仪表盘上已经移除此功能,开发者可以使用MongoDB可视化工具导入导出数据。下面内容可跳过。

导入数据

你可以通过CSV或JSON文件导入数据到你的Parse应用。要通过一个SCV或JSON文件创建一个class表,可以进入数据浏览器,点击左栏的“import”按钮。

JSON文件的格式是我们的REST格式的对象数组,或者一个数组格式的results对象,它必须遵循混JSON规范。一个JSON文件的标准格式类似这样:

  1. { "results": [
  2. {
  3. "score": 1337,
  4. "playerName": "Sean Plott",
  5. "cheatMode": false,
  6. "createdAt": "2012-07-11T20:56:12.347Z",
  7. "updatedAt": "2012-07-11T20:56:12.347Z",
  8. "objectId": "fchpZwSuGG"
  9. }]
  10. }

两种格式的对象包含的键值应符合一下要求:

  • 键名只能包含数字、字母和下划线,并且已字母开头;
  • 键值不能包含强行换行”\n”;

通常一个对象被保存到Parse云后,会被支配一个唯一的标识符,即objectId,还有createdAtupdatedAt字段也会被创建。当你从JSON文件导入数据时,这几个字段可以手动设置。请记住以下几点:

  • objectId字段的值应是10个唯一存在的由字母和数字组成的字符串;
  • 当你设置createdAtupdatedAt字段时,值应为IOS 8601标准的时间戳;

除了公开的字段,Parse用户表中的对象还可以可以设置bryptPassword字段,它的值是bcrypt哈希后加盐得到的字符串,详情可以查看StackOverflow answer。大多数给予OpenSSL的bcrypt实现都内置了生成这个字符串的方法。

包含User对象的文件格式类似这样:

  1. { "results":
  2. [{
  3. "username": "cooldude",
  4. "createdAt": "1983-09-13T22:42:30.548Z",
  5. "updatedAt": "2015-09-04T10:12:42.137Z",
  6. "objectId": "ttttSEpfXm",
  7. "sessionToken": "dfwfq3dh0zwe5y2sqv514p4ib",
  8. "bcryptPassword": "$2a$10$ICV5UeEf3lICfnE9W9pN9.O9Ved/ozNo7G83Qbdk5rmyvY8l16MIK"
  9. }]
  10. }

导出数据

你可以在你的应用设置页导出数据。数据导出的网络优先级低于产品请求的优先级,所以可以保证应用请求的查询能被顺利完成,所以你的数据导出速度可能会比较低。

导出格式

每一个数据表会导出一个我们的REST API所使用JSON格式的压缩文件。由于数据本质上是以JSON格式存储,所以我们可以确保导出的数据和Parse保存的数据相同。其他不能表示Parse数据类型的格式,比如CSV,如果你想使用CSV格式,可以使用网上的JSON-to-CSV转换工具。

离线分析

对于离线分析,我们推荐你用交替的方法访问你的数据,以免一次提取整个数据表。比如,你可以尝试只导出自上次导出以后发生了变化的数据。这里有一些实现方法:

  • 在Node应用中使用SDK,Parse.Query.eac()允许你提取每个匹配的对象。你可以给查询条件设置为查询自上次应用运行后发生了改变的数据,你的node应用可以将这些数据写入磁盘进行离线分析。
  • 在脚本中使用REST API,你可以针对你的class表使用skip、limit来查询,然后将数据写入磁盘进行离线分析。你可以再加上只有新被修改的对象可以被提取的条件。
  • 如果上面两种方法不能满足你的需求,你可以尝试使用数据浏览器的选择性数据导出。通过点击漏洞图标为需要的数据创建一个过滤器,比如过滤出只有新被修改的数据,当过滤器被应用后,点击数据浏览器右上方的导出数据图标即可。这种导出方法只会导出符合你条件的数据。