我正在为我的 dynamodb 设计使用单一表方法。
看看这里(单表结构示例)。无需阅读所有页面。这个想法是将几种不同类型的实体存储在同一个表中。(例如,订单、产品、客户等)。
我使用 dynamoose,我有以下模式:
const schema_1 = {
PK: { type: String, hashKey: true },
SK: { type: String, rangeKey: true },
someAttribute: { type: String, required: true }
};
const schema_2 = {
PK: { type: String, hashKey: true },
SK: { type: String, rangeKey: true },
someOtherAttribute: { type: String, required: true }
};
我使用以下内容创建表:
const ExampleModel = dynamoose.model('TestTable', schema_1);
const AnotherModel = dynamoose.model('TestTable', schema_2, {create: false});
问题是,当我运行此代码时,我得到一个无法对不存在的表执行操作的错误。
注意:该表已创建,但也引发了错误。
但是,如果我在两次通话之间添加睡眠时间,问题就会消失。
const ExampleModel = dynamoose.model('TestTable', schema_1);
await new Promise(resolve => setTimeout(resolve, 1000));
const AnotherModel = dynamoose.model('TestTable', schema_2, {create: false});
(注意:我在异步代码中运行它- 以下是完整代码)
我认为这种等待不应该存在,并且在我运行代码的环境中,使模型创建异步产生另一个错误,因为需要模式的代码是在初始化之前执行的。
希望您能够帮助我。
完整代码在这里:
let testFunction = async () => {
dynamoose.aws.sdk.config.update({
region: 'local.region',
});
dynamoose.aws.ddb.local();
const schema_1 = {
PK: { type: String, hashKey: true },
SK: { type: String, rangeKey: true },
someAttribute: { type: String, required: true }
};
const schema_2 = {
PK: { type: String, hashKey: true },
SK: { type: String, rangeKey: true },
someOtherAttribute: { type: String, required: true }
};
const ExampleModel = dynamoose.model('TestTable', schema_1);
//await new Promise(resolve => setTimeout(resolve, 1000));
const AnotherModel = dynamoose.model('TestTable', schema_2, {create: false});
}
testFunction();
所需的依赖项是:
- 发电机:
npm install dynamoose
- 本地 dynamodb:(见此页)
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -inMemory