表格存储 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
目录
相关文章
|
3月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
670 2
|
7天前
|
JavaScript 前端开发
【JavaScript】——JS基础入门常见操作(大量举例)
JS引入方式,JS基础语法,JS增删查改,JS函数,JS对象
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
174 1
|
2月前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
100 10
|
2月前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
4月前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
103 5
一小时入门Vue.js前端开发
|
3月前
|
JavaScript 前端开发 开发工具
【Azure Developer】使用JavaScript通过SDK进行monitor-query的client认证报错问题
AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. Check to make sure you have the correct tenant ID and are signing into the correct cloud. Check with your subscription administrator, this may happen if there are no active subscriptions for the tenant.
|
3月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
3月前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
36 1
|
3月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
653 1

热门文章

最新文章