一个非常有用的工具,可以将mongodb的语法转化为AWS dynamodb的语法.
English | 中文
Amazon Dynamodb是一个非常棒的文档型数据库
- a) 高效率: 非常低的接口延时;
- b) 易拓展: 无需关注其底层实现,很方便的设置自动扩容;
- c) 安全稳定: 可以设置很低粒度的访问策略和备份策略
在使用Dynamodb的同时也面临一些其他的问题
- a) 查询语法过于复杂
- b) query操作需要指定索引的名称
- c) 对批量读取和写入有数量上的限制
该库主要功能:
- a) mongodb至dynamodb的语法转换
- b) dynamodb Dax组件的集成
未支持的功能:
- a) 创建表相关的功能
- b) 对Dynamodb参数ConsistentRead, Segment, TotalSegments,ReturnConsumedCapacity没有支持
安装命令:
npm install easy-dynamodb-client
用法示例:
const dynamodbClient = require("easy-dynamodb-client");
const config = {
tableConfig: {
tableName: 'user',
indexList: [
{hash_key: 'user_id'},
{hash_key: 'name', range_key: 'bundle_id', index_name: 'name-index'}
]
},
daxConfig: {endpoints: ['aws.dax.address.cache.amazonaws.com:8111']}
verbose: true
}
let tableClient = new dynamodbClient(config);
tableClient.query({name: 'yingying', bundle_id: 'com.tencent.mm'}).then((user) => {
console.log(JSON.stringify(user, null, 4));
})
const dynamodbClient = require("easy-dynamodb-client");
const config = {
tableConfig: {
tableName: 'user', // required. 表的名称
indexList: [
{hash_key: 'user_id'}, // 表的hash_key和range_key无需索引名称
{hash_key: 'name', range_key: 'bundle_id', index_name: 'name-index'}
// 二级索引的hash_key和range_key, 必须索引名称 index_name
] // 长度至少为1,包含表的hash_key和range_key
},
daxConfig: {endpoints: ['aws.dax.address.cache.amazonaws.com:8111']}, // optional. dax配置
verbose: true // 是否打印详细log
}
let tableClient = new dynamodbClient(config);
tableClient.get(Index, rtnAttrs)
tableClient.batchGet(Index, rtnAttrs)
Index: {
hash_key: 'hash_key value',
range_key: 'range_key value'
} //
rtnArrs: Array. 需要返回的字段名称列表
tableClient.query({
hour: 2018051322,
app: {$begins_with: 'weixin_msg'}
}, ["hour", "app"], {limit: 2, sort: {hour: 1}});
tableClient.query({
hour: 2018051322,
app: {$begins_with: 'weixin_msg'}
}, ["hour", "app"], {limit: 2, sort: {hour: -1}});
tableClient.query({
hour: 2018051322,
app: {$contains: 'weixin_msg'}
}, ["hour", "app"], {limit: 2, sort: {hour: 1}});
tableClient.query({
app: 'weixin_msg',
hour: {$gte: 2018051322, $lte: 2018051422}
}, ["hour", "app"], {limit: 2, sort: {hour: 1}});
tableClient.query({
app: 'weixin_msg',
hour: {$in: [2018051322, 2018051323, 2018051422]}
}, ["hour", "app"], {limit: 2, sort: {hour: 1}});
tableClient.query({
app: 'weixin_msg',
arr_data: {$size: {$gte: 2, $lte: 5}}
}, ["hour", "app"], {limit: 2, sort: {hour: 1}});