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

本文涉及的产品
表格存储 Tablestore,50GB 3个月
简介: 本文将结合电商订单场景为例,介绍表格存储 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。

varclient=require('./client');
varparams= {
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”。样例中模拟了一万条订单数据,这里不作展示。

varTableStore=require('../index.js');
varclient=require('./client');
varparams= {
tableName: "order",
condition: newTableStore.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”的记录

varTableStore=require('../index.js');
varclient=require('./client');
varparams= {
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字符串类型。关于索引字段类型的介绍请参考多元索引概述

varclient=require('./client');
varTableStore=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);
});

搜索数据

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

varclient=require('./client');
varTableStore=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”的订单,并统计了符合条件的行数。

varclient=require('./client');
varTableStore=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”之间的订单。并统计了行数。

varclient=require('../client');
varTableStore=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多元索引。

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

删除数据表

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

varclient=require('./client');
varparams= {
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

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
算法 IDE 开发工具
火爆全网开源额温枪同平台之华大HC32L136 SDK开发入门
火爆全网开源额温枪同平台之华大HC32L136 SDK开发入门
219 1
|
机器学习/深度学习 人工智能 PHP
百度AI开发平台图像增强与特效API-SDK接口PHP实战记录
百度AI开发平台图像增强与特效API-SDK接口PHP实战记录
129 0
百度AI开发平台图像增强与特效API-SDK接口PHP实战记录
|
14天前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
40 1
|
16天前
|
存储 监控 开发工具
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
22 0
|
1月前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
|
2月前
|
NoSQL 开发工具 数据库
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
|
3月前
|
API 开发工具
抖音sdk,抖音开发api接口
抖音sdk,抖音开发api接口
|
4月前
|
开发工具 CDN 容器
基于Html+腾讯云播SDK开发的m3u8播放器
周末业余时间在家无事,学习了一下腾讯的云播放sdk,并制作了一个小demo(m3u8播放器),该在线工具是基于腾讯的云播sdk开发的,云播sdk非常牛,可以支持多种播放格式。
210 1
|
10月前
|
API 开发工具 C#
一套基于 .NET Core 开发的支付SDK集 - paylink
一套基于 .NET Core 开发的支付SDK集 - paylink
105 1
|
4月前
|
Java 开发工具 Maven
Android SDK开发的那些事(1),已整理成文档
Android SDK开发的那些事(1),已整理成文档