在向表中添加新项时,是否可以让DynamoDB自动生成唯一ID?
我注意到Java API提到@DynamoDBAutoGeneratedKey所以我假设有一种方法可以使用PHP.
如果是这样,应用程序代码是否会生成这些ID,还是在DynamoDB端完成?
我该如何选择Datomic的后端存储服务?
选择DynamoDB而不是Postgres是优先考虑的问题,还是每个选项都有不同的权衡?如果是这样,他们是什么?
我正在尝试为DynamoDB中的地图对象内的属性添加索引,但似乎找不到这样做的方法.这是支持的东西还是索引真的只允许标量值?围绕这个的文档似乎非常稀少.我希望索引功能类似于MongoDB,但到目前为止,我使用点语法引用属性索引的方法还没有成功.我们非常感谢您提供的任何帮助或其他信息.
我一直在浏览AWS DynamoDB文档,并且在我的生命中,无法弄清楚batchGetItem()和Query()之间的核心区别是什么.两者都根据表和索引中的主键检索项目.唯一的区别在于检索到的项目的大小,但这似乎不是突破性的差异.两者都支持条件更新.
在什么情况下我应该使用batchGetItem而不是Query,反之亦然?
我知道整个设计应该基于自然聚合(文档),但是我正在考虑为本地化(lang,key,text)实现一个单独的表,然后在其他表中使用键.但是,我无法找到任何关于这样做的例子.
任何指针可能会有所帮助!
我正在运行用Node.js编写的AWS Lambda服务,该服务与DynamoDB数据库交互.我的一种方法在DynamoDB上执行更新(AWS.DynamoDB.DocumentClient().update)以更新特定项目.但问题是,当我尝试更新项目并且该项目不存在时,更新方法会将此新项目添加到我的表格中.此行为也是文档中描述的默认行为.
我不希望我的方法创建一个新项目,如果它尚不存在.我希望这只是在记录存在时才更新.如果它不存在,它必须什么都不做.我该如何实现这一目标?我希望我能够使用ConditionalExpression来实现这一目标,但我在这方面所做的尝试并没有成功.
下面给出了我发送给更新功能的当前参数的示例.在此示例中,我想更新具有userId 123的用户,并且我想为此用户将isActive字段设置为"false"(但我只想在用户123实际存在的情况下执行此操作!)
const params = {
TableName: 'users',
Key: {
userId: '123',
},
ExpressionAttributeValues: {
':isActive': 'false'
},
UpdateExpression: 'SET isActive = :isActive',
ReturnValues: 'ALL_NEW',
};
Run Code Online (Sandbox Code Playgroud) 我目前正在使用hbase和我的Python应用程序,并想尝试使用Amazon DynamoDB.有没有办法使用Python来读取,写入和查询数据?
尽管亚马逊提供了有关如何使用Java,PHP和.Net 连接到本地dynamoDB的文档,但没有描述如何使用Python连接到localhost:8000.Web上的现有文档指向在boto.dynamodb2.layer1中使用DynamoDBConnection方法,但这会在使用boto3协议管理dynamoDB的实时环境和测试环境之间创建不兼容性.
在boto3中,您可以使用以下构造函数和设置到环境中的变量向dynamo发出请求:
client = boto3.client('dynamodb')
table = client.list_tables()
Run Code Online (Sandbox Code Playgroud)
而boto.dynamodb2.layer1包需要您构造以下内容:
client = DynamoDBConnection(
host='localhost',
port=8000,
aws_access_key_id='anything',
aws_secret_access_key='anything',
is_secure=False)
table = client.list_tables()
Run Code Online (Sandbox Code Playgroud)
尽管可以创建基于本地环境确定正确构造函数的逻辑,但我对构建一组将每个构造函数视为相同的方法持谨慎态度.相反,我更喜欢使用boto3来处理所有事情,并且能够在环境变量中设置dynamoDB的端点.不幸的是,该选项似乎目前无法使用.
有没有办法使用boto3来定义dynamoDB本地端点(就像其他语言一样)?或亚马逊计划支持此功能的任何机会?
从这段代码我得到下面的错误
require "vendor/autoload.php";
use Aws\Common\Aws;
use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Enum\ComparisonOperator;
use Aws\DynamoDb\Enum\KeyType;
use Aws\DynamoDb\Enum\Type;
$aws = Aws::factory(array(
'key' => '[clipped]',
'secret' => '[clipped]',
'region' => Region::US_WEST_1
));
$client = $aws->get("dynamodb");
$tableName = "ExampleTable";
$result = $client->createTable(array(
"TableName" => $tableName,
"AttributeDefinitions" => array(
array(
"AttributeName" => "Id",
"AttributeType" => Type::NUMBER
)
),
"KeySchema" => array(
array(
"AttributeName" => "Id",
"KeyType" => KeyType::HASH
)
),
"ProvisionedThroughput" => array(
"ReadCapacityUnits" => 5,
"WriteCapacityUnits" => 6
)
));
print_r($result->getPath('TableDescription'));
Run Code Online (Sandbox Code Playgroud)
尝试将表添加到AWS的DynamoDB时,我收到以下错误.
PHP Fatal error: Uncaught Aws\\DynamoDb\\Exception\\DynamoDbException: …Run Code Online (Sandbox Code Playgroud) 执行以下操作之间有什么区别:
async Task<T> method(){
var r = await dynamodb.GetItemAsync(...)
return r.Item;
}
Run Code Online (Sandbox Code Playgroud)
VS
async Task<T> method(){
var task = dynamodb.GetItemAsync(...)
return task.Result.Item;
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,由于某种原因,只有第二个工作.第一个似乎永远不会结束.
amazon-dynamodb ×10
python ×2
amazon ×1
async-await ×1
asynchronous ×1
aws-sdk ×1
c# ×1
clojure ×1
database ×1
datomic ×1
dynamo-local ×1
nosql ×1
php ×1
postgresql ×1
task ×1
uuid ×1