标签: amazon-dynamodb-data-modeling

DynamoDB - AWS 上的事件存储

我正在 AWS 上设计一个 Event Store,我选择了 DynamoDB,因为它似乎是最好的选择。我的设计似乎相当不错,但我面临一些我无法解决的问题。

**该设计

事件由对唯一标识(StreamId, EventId)

  • StreamId:它与aggregateId 相同,这意味着一个聚合对应一个事件流。
  • EventId: 一个增量数字,有助于在同一事件流中保持排序

事件保留在 DynamoDb 上。每个事件都映射到表中的单个记录,其中必填字段是 StreamId、EventId、EventName、Payload(可以轻松添加更多字段)。

partitionKey 是StreamId,sortKey 是EventId。

将事件写入事件流时使用乐观锁定。为了实现这一点,我使用了 DynamoDb 条件写入。如果已经存在具有相同(StreamId,EventId)的事件,我需要重新计算聚合,重新检查业务条件,如果业务条件通过,最后再次写入。

事件流

每个事件流由 partitionKey 标识。查询所有事件的流等于查询 partitionKey=${streamId} 和 0 到 MAX_INT 之间的 sortKey。

每个事件流标识一个且仅一个聚合。如前所述,这有助于使用乐观锁定处理同一聚合上的并发写入。这也可以在重新计算聚合时提供出色的性能。

活动发布

利用 DynamoDB Streams + Lambda 的组合发布事件。

重播事件

这就是问题开始的地方。让每个事件流只映射一个聚合(这会导致有大量的事件流),没有简单的方法可以知道我需要从哪些事件流中查询所有事件。

我正在考虑在 DynamoDB 中的某处使用额外的记录,该记录将所有 StreamId 存储在一个数组中。然后我可以查询它并开始查询事件,但是如果在我重播时创建了一个新流,我就会丢失它。

我错过了什么吗?或者,我的设计是错误的吗?

distributed-computing amazon-web-services event-sourcing amazon-dynamodb amazon-dynamodb-data-modeling

7
推荐指数
2
解决办法
4477
查看次数

每个项目的 DynamoDB 生存时间

我需要使用不同的实时配置使项目过期。在某些情况下,表中的项目也不会过期。在 Cassandra 中,我们可以在记录级别写入时设置生存时间。在 DynamoDB 中,我只能在表级别看到 TimeToLive 配置(我也可能错了。)但不能在项目级别看到。

  1. 有没有办法在执行 putItem 或
  2. 在对整个系统影响最小的情况下删除记录的最佳做法是什么?

如果不可能在项目级别设置 TTL,我想回到第二个选项。

amazon-dynamodb aws-sdk amazon-dynamodb-data-modeling

4
推荐指数
1
解决办法
4178
查看次数

Modeling Relational Data in DynamoDB (nested relationship)

Entity Model:

在此处输入图片说明

I've read AWS Guide about create a Modeling Relational Data in DynamoDB. It's so confusing in my access pattern.

Access Pattern

+-------------------------------------------+------------+------------+
| Access Pattern                            | Params     | Conditions |
+-------------------------------------------+------------+------------+
| Get TEST SUITE detail and check that      |TestSuiteID |            |
| USER_ID belongs to project has test suite |   &UserId  |            |
+-------------------------------------------+------------+------------+
| Get TEST CASE detail and check that       | TestCaseID |            |
| USER_ID belongs to project has test case  |   &UserId …
Run Code Online (Sandbox Code Playgroud)

hierarchical-data amazon-dynamodb dynamodb-queries amazon-dynamodb-index amazon-dynamodb-data-modeling

3
推荐指数
1
解决办法
233
查看次数