开发者社区> 李欣529> 正文

表格存储 Node.js SDK 开发入门

简介: 本文将结合电商订单场景为例,介绍表格存储 Tablestore Node.js SDK 的基本使用方法。
+关注继续查看

准备工作

在您开始Tablestore SDK开发前,需确保已开通表格存储服务并且已创建表格存储实例。

您需要提前获取到以下几个参数


开发简介

开发示例中将以订单场景为例,使用Tablestore SDK实现如下几个功能。

  • 订单表创建。
  • 订单插入。
  • 订单号查询。
  • 订单搜索。


字段名

字段类型

字段描述

order_id

String

主键

订单号

customer_name

String

属性列

消费者姓名

product_name

String

属性列

产品名

product_type

String

属性列

产品类型

order_time

String

属性列

下单时间

pay_time

String

属性列

支付时间

订单表

开发步骤

初始化连接

Tablestore支持Http/Https协议访问服务端,使用Node.js SDK发起请求前,您需要初始化一个OTSClinet实例,初始化需要获取到服务地址(endpoint)、实例名(instanceName)、密钥(accessKeyId、accessSecret)等信息。代码如下

var client = new TableStore.Client({

 accessKeyId: '',

 accessKeySecret: '',

 endpoint: '"https://order-instance.cn-beijing.ots.aliyuncs.com"',

 instancename: 'order-instance',

  maxRetries:20,//默认20次重试,可以省略此参数。

});

创建数据表

示例代码中创建了一张订单数据表order。

var client = require('./client');
var params = {
  tableMeta: {
    tableName: 'order',
    primaryKey: [
      {
        name: 'order_id',
        type: 'STRING'
      }
    ]
  },
  reservedThroughput: {
    capacityUnit: {
      read: 0,
      write: 0
    }
  },
  tableOptions: {
    timeToLive: -1, //数据的过期时间,单位为秒,-1代表永不过期。如果设置过期时间为一年,即为365*24*3600。
    maxVersions: 1  //保存的最大版本数,设置为1代表每列上最多保存一个版本(保存最新的版本)。
  }
};
client.createTable(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

            

写入数据

示例代码中写入了一条订单数据,订单号order_id为“o1”。样例中模拟了一万条订单数据,这里不作展示。

var TableStore = require('../index.js');
var client = require('./client');
var params = {
  tableName: "order",
  condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
  primaryKey: [{ 'order_id': 'o1' }],
  attributeColumns: [
    { 'customer_name': '消十一' },
    { 'product_name': 'iphone 6'},
    { 'product_type': '手机' },
    { 'order_time': '2021-10-25 09:20:01' },
    { 'pay_time': '2017-10-25 10:00:01') }
  ],
  returnContent: { returnType: TableStore.ReturnType.Primarykey }
};
client.putRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

                    

查询数据

示例代码中查询订单号order_id为“o1”的记录

var TableStore = require('../index.js');
var client = require('./client');
var params = {
  tableName: "order",
  primaryKey: [{ 'order_id': 'o1' }],
  maxVersions: 1 //最多可读取的版本数,设置为1即代表最多可读取1个版本。
};
client.getRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

                    

创建多元索引

示例代码中创建了一个多元索引order_index。分别设置customer_name字符串类型、order_time字符串类型、pay_time字符串类型、product_name分词类型、product_type字符串类型。关于索引字段类型的介绍请参考多元索引概述

var client = require('./client');
var TableStore = require('../../index.js');
client.createSearchIndex({
    tableName: 'order', //设置数据表名称。
    indexName: 'order_index', //设置多元索引名称。
    schema: {
        fieldSchemas: [
            {
                fieldName: "customer_name",
                fieldType: TableStore.FieldType.KEYWORD, //设置字段名和字段类型。
                index: true, //设置开启索引。
                enableSortAndAgg: true, //设置开启排序与统计聚合功能。
                store: false,
                isAnArray: false
            },
            {
                fieldName: "order_time",
                fieldType: TableStore.FieldType.KEYWORD,
                index: true,
                enableSortAndAgg: true,
                store: true,
                isAnArray: false
            },
            {
                fieldName: "pay_time",
                fieldType: TableStore.FieldType.KEYWORD,
                index: true,
                enableSortAndAgg: true,
                store: true,
                isAnArray: false
            },
            {
                fieldName: "product_name",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                store: true,
                isAnArray: false,
                analyzer: "single_word"
            },
            {
                fieldName: "pay_time",
                fieldType: TableStore.FieldType.KEYWORD,
                index: true,
                enableSortAndAgg: true,
                store: true,
                isAnArray: false
            }
        ]
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', data);
});

搜索数据

示例代码中查询产品类型为“手机”的订单,并统计了符合条件的行数。

var client = require('./client');
var TableStore = require('../../index.js');
client.search({
    tableName: 'order',
    indexName: 'order_index',
    searchQuery: {
        offset: 0,
        limit: 10, 
        query: { 
            queryType: TableStore.QueryType.TERM_QUERY,
            query: {
                fieldName: "product_type",
                term: "手机"
            }
        },
        getTotalCount: true //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。
    },
    columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

示例代码中搜索产品名包含“iphone”的订单,并统计了符合条件的行数。

var client = require('./client');
var TableStore = require('../../index.js');
client.search({
    tableName: 'order',
    indexName: 'order_index',
    searchQuery: {
        offset: 0,
        limit: 10, 
        query: { //设置查询类型为MatchQuery。
            queryType: TableStore.QueryType.MATCH_QUERY,
            query: {
                fieldName: "product_name", //设置要匹配的列。
                text: "iphone" //设置要匹配的值。
            }
        },
        getTotalCount: true //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。
    },
    columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

示例代码中查询了消费者姓名为“消十一”并且下单时间在“2021-10-24 00:00:00”之间的订单。并统计了行数。

var client = require('../client');
var TableStore = require('../../index.js');
client.search({
    tableName: "order",
    indexName: "order_index",
    searchQuery: {
        offset: 0, 
        limit: 10, 
        getTotalCount: false, //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。
        query: { //构造boolQuery4,设置查询条件为至少满足boolQuery1和boolQuery3中的一个条件。
            queryType: TableStore.QueryType.BOOL_QUERY,
            query: {
                mustQueries: [             
                    {
                        queryType:TableStore.QueryType.TERM_QUERY,
                        query: {
                            fieldName : "customer_name",
                            term: "消十一"
                        }
                    },
                    { 
        queryType: TableStore.QueryType.RANGE_QUERY,
                        query: {
                            fieldName: "order_time",
                            rangeTo: '2021-10-24 00:00:00',
                            includeUpper: false
                        }
                    }
                ]
            }
        },
    },
    columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

删除多元索引

示例代码中展示了删除订单表order中的order_index多元索引。

var client = require('./client');
client.deleteSearchIndex({
    tableName: 'order', //设置数据表名称。
    indexName: 'order_index'  //设置多元索引名称。
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', data);
});

删除数据表

示例代码中展示了删除订单表order。删除表之前需确保先删除表中的多元索引。

var client = require('./client');
var params = {
    tableName: 'order'
};
client.deleteTable(params, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', data);
});

            

更多关于Tablestore Node.js SDK的介绍请参考Tablestore Node.js SDK

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19676 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24778 0
Node.js Web 开发框架大全《路由篇》
  这篇文章与大家分享优秀的 Node.js 路由(Routers)模块。Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。
780 0
使用 Rust 开发 PostgreSQL 存储过程
pgxr 使用 Rust 来编写 PostgreSQL 的扩展函数(相当于存储过程)。 项目地址:https://github.com/clia/pgxr 使用这个星球上最快的、高效、安全、有趣的编程语言,来为世界上功能最强大的开源关系数据库编写库内的程序! 试想,当你从数据库中查询出 1000 条记录用于程序处理时,当你的程序是数据库内的程序时,你根本无需将这 1000 条结果通过 PostgreSQL 的通讯协议走网络传输到应用程序里,在应用程序里分配这么大一块内存来装这些数据,再来进行处理。
6805 0
阿里云文件存储NAS开发测试环境最佳实践
阿里云文件存储NAS开发测试环境最佳实践
1966 0
Node.js开发者有福了!Express 3.0发布
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/8114422 作者:chszs,转载需注明。
825 0
使用sublime text 开发node.js
http://blog.csdn.net/jwkfreedom/article/details/8450005 本机环境: windows7 64位 1. 下载安装sublime text, 不用注册即可完全使用,只是偶尔弹框提示购买,完全可以忍受。
666 0
+关注
李欣529
阿里云数据库表格存储 Tablestore 解决方案架构师
11
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载