LeanCloud数据存储

                                          LeanCloud数据存储

         数据存储(LeanStorage)是 LeanCloud 提供的核心功能之一,它的使用方法与传统的关系型数据库有诸多不同,下面我们将其与传统数据库的使用方法进行对比。

       下面这条 SQL 语句在绝大数的关系型数据库都可以执行,其结果是在 Todo 表里增加一条新数据: 

INSERT INTO Todo (title, content) VALUES ('工程师周会', '每周工程师会议,周一下午 2 点')

        使用传统的关系型数据库作为应用的数据源几乎无法避免以下步骤:

  • 插入数据之前一定要先创建一个表结构,并且随着之后需求的变化,开发者需要不停地修改数据库的表结构,维护表数据。
  • 每次插入数据的时候,客户端都需要连接数据库来执行数据的增删改查(CRUD)操作。        使用 LeanStorage,实现代码如下: 
// 声明一个 Todo 类型
  var Todo = AV.Object.extend('Todo');
  // 新建一个 Todo 对象
  var todo = new Todo();
  todo.set('title', '工程师周会');
  todo.set('content', '每周工程师会议,周一下午2点');
  todo.save().then(function (todo) {
    // 成功保存之后,执行其他逻辑.
    console.log('New object created with objectId: ' + todo.id);
  }, function (error) {
    // 失败之后执行其他逻辑
    console.log('Failed to create new object, with error message: ' + error.message);
  });

       使用 LeanStorage 的特点在于:

  • 不需要单独维护表结构。例如,为上面的 Todo 表新增一个 location 字段,用来表示日程安排的地点,那么刚才的代码只需做如下变动:
    var Todo = AV.Object.extend('Todo');
      var todo = new Todo();
      todo.set('title', '工程师周会');
      todo.set('content', '每周工程师会议,周一下午2点');
      // 只要添加这一行代码,服务端就会自动添加这个字段
      todo.set('location','会议室');
      todo.save().then(function (todo) {
        // 成功保存之后,执行其他逻辑.
      }, function (error) {
        // 失败之后执行其他逻辑
      });
     
  • 数据可以随用随加,这是一种无模式化(Schema Free)的存储方式。
  • 所有对数据的操作请求都通过 HTTPS 访问标准的 REST API 来实现。
  • 我们为各个平台或者语言开发的 SDK 在底层都是调用统一的 REST API,并提供完整的接口对数据进行增删改查。

      LeanStorage 在结构化数据存储方面,与 DB 的区别在于:

          1.Schema Free/Not free 的差异

          2.数据接口上,LeanStorage 是面向对象的(数据操作接口都是基于 Object 的),开放的(所有移动端都可以直接访问),DB 是面向结构的,封闭的(一般在 Server 内部访问);

          3.数据之间关联的方式,DB 是主键外键模型,LeanStorage 则有自己的关系模型(Pointer、Relation 等);

          LeanStorage 支持两种存储类型:    对象和文件

       下面主要说一下如何存储对象,代码如下:

// 该语句应该只声明一次
  var TestObject = AV.Object.extend('DataTypeTest');
  var number = 2014;
  var string = 'famous film name is ' + number;
  var date = new Date();
  var array = [string, number];
  var object = { number: number, string: string };
  var testObject = new TestObject();
  testObject.set('testNumber', number);
  testObject.set('testString', string);
  testObject.set('testDate', date);
  testObject.set('testArray', array);
  testObject.set('testObject', object);
  testObject.set('testNull', null);
  testObject.save().then(function(testObject) {
    // 成功
  }, function(error) {
    // 失败
  });

       现在我们保存一个TodoFolder,它可以包含多个 Todo,类似于给行程按文件夹的方式分组。我们并不需要提前去后台创建这个名为TodoFolder 的 Class 类,而仅需要执行如下代码,云端就会自动创建这个类:

// 声明类型
  var TodoFolder = AV.Object.extend('TodoFolder');
  // 新建对象
  var todoFolder = new TodoFolder();
  // 设置名称
  todoFolder.set('name','工作');
  // 设置优先级
  todoFolder.set('priority',1);
  todoFolder.save().then(function (todo) {
    console.log('objectId is ' + todo.id);
  }, function (error) {
    console.log(error);
  });

         创建完成后,打开 控制台 > 存储,点开 TodoFolder 类,就可以看到刚才添加的数据。除了 name、priority(优先级)之外,其他字段都是数据表的内置属性。

    注意:  

     属性名:

       也叫键或 key,必须是由字母、数字或下划线组成的字符串;自定义的属性名,不能以双下划线开头。

     属性值:

      可以是字符串、数字、布尔值、数组或字典。

以下为系统保留字段,不能作为属性名来使用。
acl             error            pendingKeys
ACL             fetchWhenSave    running
className       id               updatedAt
code            isDataReady      uuid
createdAt       keyValues
description     objectId

       提高代码的可读性和可维护性,建议使用驼峰式命名法(CamelCase)为类和属性来取名。类,采用大驼峰法,如CustomData.  属性,采用小驼峰法,如 imageUrl.

      注意在测试之前要把下面这行代码加入到你的index.html页面中:

<script src="http://cdn1.lncld.net/static/js/av-min-1.2.1.js"></script>

              下载到本地直接引用也可以,我是下载本地放到lib文件中按下面方式直接引用的:

<script src="../lib/av-min-1.2.1.js"></script>

     进行代码初始化后加入这行代码,就可以创建 class 或任何其他操作了。创建应用后, 可以在    控制台-应用设置    里面找到应用对应的 appId 和 appKey。然后在路由文件中添加如下代码进行初始化:

app.run(function(){
//应用ID用来识别应用
    var APP_ID = 'RaXOd37qSYs8fKCN82nbC9zd-gzGzoHsz';
//应用Key,用来校验权限(Web端可以配置安全域名来保护数据安全)
    var APP_KEY = 'SMJDrjpJOmuyEuTXjm5lW2BM';
//初始化
    AV.init({
        appId: APP_ID,
        appKey: APP_KEY
    })});

相关推荐