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

本文涉及的产品
表格存储 Tablestore,50G 2个月
简介: 本文将结合电商订单场景为例,介绍表格存储 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
目录
相关文章
|
22天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
42 1
|
14天前
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
32 13
|
20天前
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
17天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
20天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
16天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。
|
20天前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
20天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带你走进Node.js的世界,从基础到进阶,逐步解析Node.js在后端开发中的应用。我们将通过实例来理解Node.js的异步特性、事件驱动模型以及如何利用它处理高并发请求。此外,文章还会介绍如何搭建一个基本的Node.js服务器,并探讨如何利用现代前端框架与Node.js进行交互,实现全栈式开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
16 4
|
21天前
|
前端开发 JavaScript 关系型数据库
基于 Vue2.0 + Nest.js 全栈开发的后台应用
Vue2 Admin 是一个基于 Vue2 和 Ant Design Pro 开发的前端项目,配合 Nest.js 构建的后端,提供了一个完整的全栈后台应用解决方案。该项目支持动态国际化、用户权限管理、操作日志记录等功能,适合全栈开发者学习参考。线上预览地址:https://vue2.baiwumm.com/,用户名:Admin,密码:abc123456。
|
22天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
35 2

热门文章

最新文章