前言
AWS DynamoDB 是一个支持 NoSQL 数据库的云服务,可以提供多种优化功能,例如可扩展的数据存储,高可用性和强大的 API。但是,通过 AWS SDK 使用 DynamoDB 出现了一些问题。首先,AWS SDK 实现的 API 不够友好和灵活。其次,几乎所有 DynamoDB 调用都需要至少 5 个参数,而且这些参数顺序又是固定的,这使得调用 DynamoDB 显得很冗长。为了解决这些痛点,可以使用 npm 包 dynamodb-path。
安装 dynamodb-path
dynamodb-path 可以通过 npm 一行代码进行安装:
npm install dynamodb-path --save
dynamodb-path 的简介
dynamodb-path 是一个 JavaScript 库,它可以帮助我们更方便地操作 DynamoDB,从而提高开发效率。dynamodb-path 提供了一个更直观、更人性化的 API,可以让开发人员更快地调用 DynamoDB。这个库可以帮助我们进行以下工作:
- 改变原始的 DynamoDB API 调用方式。
- 允许进行项目特定的优化。
- 从 API 中剥离查询和操作的共性部分。
- 更方便地调试和测试。
使用 dynamodb-path
连接 AWS DynamoDB
首先,需要连接到 AWS DynamoDB。可以使用 AWS SDK 来实现这个过程。下面的示例演示了如何连接到 DynamoDB:
var AWS = require("aws-sdk"); var dynamodb = new AWS.DynamoDB({region: "us-east-1"});
组装查询参数
下面,我们看看如何使用 dynamodb-path 组装查询参数。
putItem
原始 API 调用方式
以下是使用 AWS SDK 的原始方式添加一个项目时的代码。
-- -------------------- ---- ------- ------------------ ---------- ------------- ----- - ------- ----- --------- ------- ----- -------- - -- ------------- ----- - -- ----- - --------------------- -- ----- - ---- - ---------------- ---- ---------- -- ------ - ---
使用 dynamodb-path 调用方式
使用 dynamodb-path 调用 putItem
方法的代码如下所示。
-- -------------------- ---- ------- ----- - ------- - - ------------------------- --------- ---- - - ------- -------- ------- --- - -- ------------- -------------------------- ---------------- ---- ---------- -- -------- ----------------- --------------------- -- ----- ---
getItem
原始 API 调用方式
使用 AWS SDK 的原始方式获取一个项目。
-- -------------------- ---- ------- ------------------ ---------- ------------- ---- - -------------- ----- -------- - -- ------------- ----- - -- ----- - --------------------- -- ----- - ---- - ---------------- ---- ---------- -- ------ - ---
使用 dynamodb-path 调用方式
使用 dynamodb-path 的代码如下所示。
const { getItem } = require('dynamodb-path'); getItem("table_name", {primary_key: "value"}, dynamodb).then((result)=>{ console.log("Get item succeeded: ", result); }).catch((err)=>{ console.error("Error: ", err); });
scan
原始 API 调用方式
使用 AWS SDK 的原始方式进行扫描操作。
-- -------------------- ---- ------- --------------- ---------- ------------- ----------------- ---------- - ------- -------------------------- - -------- ----- -------- - -- ------------- ----- - -- ----- - --------------------- -- ----- - ---- - ----------------- ---------- -- ------ - ---
使用 dynamodb-path 调用方式
使用 dynamodb-path 的代码如下所示。
-- -------------------- ---- ------- ----- - ---- - - ------------------------- ----- ------ - - ----------------- ---------- - ------- -------------------------- - -------- ------- - -- ------------------ ------- -------------------------- ----------------- ---------- -- -------- ----------------- --------------------- -- ----- ---
执行嵌套查询
使用原始的 DynamoDB API 执行嵌套查询是十分困难的。如下例所示,我们使用 DynamoDB API 获取资产列表,并根据资产 ID 查询每个资产的历史。
-- -------------------- ---- ------- --- ---------------------- - --- --------------- ---------- -------- --------------------- ---------- -- ------------- ----- - -- ----- - --------------------- -- ----- - ---- - --- ---- ----- -- ----------- - ------------------------------- ------------------------- ------- - ---------------- ---------- --------------- ----------------------- -------- - ----------- -------------------------- - ------------ ----- ---------------- - -- ------------- ----- - -- ----- - ------------ - ---- - -------------------- - --- ---- - - --- -------------------------------------------------- ------------------------ -- ------------- - ------------------- ---
而使用 dynamodb-path,则可以轻松地实现同样的查询。
-- -------------------- ---- ------- ----- - ----- ----- - - ------------------------- ------ ----- ----- ------- - ----- -------------- ----- -------- - ----------------------- --------- ----- ------------ - ----- ---------------------- --------- -------------- ----------- -------- ------ ------------------- --- -------------------------------- ------------------------ -------------- ------------------- --- -----
结论
在使用 DynamboDB 时,dynamodb-path 是一个非常好用的工具。它可以让开发人员更快地编写代码,并且可以减少错误率。如果您习惯了原始的 DynamoDB API,使用此库肯定需要一些时间来适应。但是,一旦您开始使用,您会发现动态路径查询是一条通向更好代码的捷径。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066dad7108f76aa73ecaaa