- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于已经使用 dynamo db 的应用程序,从 Azure 的 DocumentDB (Cosmos db) 后台迁移到 AWS DynamoDB。
我对 DynamoDB 上的分区键感到困惑。
据我了解,分区键用于在数据增长时将数据隔离到不同的分区,但是许多人建议使用主键作为分区键,例如用户 ID、客户 ID、订单 ID。在这种情况下,我不确定如何获得更好的性能,因为我们有很多分区。因此一个查询可能需要在多个服务器中执行。
举个例子,如果我想开发一个 Multi-Tenancy 系统,我将使用单个表来存储所有租户的数据,但使用租户 ID 进行分区。我将按照下面在文档数据库中提到的那样进行操作。
使用以下架构创建对象。
Primary key: Order Id
Partition key: Tenant id
SELECT * FROM Orders o WHERE o.tenantId="tenantId"
SELECT * FROM Orders o WHERE o.Id='id' and o.tenantId="tenantId"
SELECT * FROM Orders o WHERE o.tenantId="tenantId" order by o.CreatedData
//by default all fields in document db are indexed, so order by just works
如何在 dynamo db 中实现相同的操作?
最佳答案
终于我找到了如何正确使用 dynamodb。感谢 [@Jesse Carter],他的评论对于更好地理解 dynamo db 非常有帮助。我现在正在回答我自己的问题。
与其他 NoSQL 数据库相比,DynamoDB 有点困难,因为术语太困惑,下面我提到了针对一些常见场景的简化 dynamodb 表设计。
在 dynamo db 中,主键不需要是唯一的,我知道与所有其他产品相比,这非常令人困惑,但这是事实。主键(在 dyanmodb 中)实际上是“分区键”。
您始终需要提供主键作为查询的一部分
假设您要创建一个包含 Id 和多个其他属性的表。您也仅根据 Id 属性进行查询。在这种情况下,Id 可以是主键。
|---------------------|------------------|
| User Id | Name |
|---------------------|------------------|
| 12 | value1 |
| 13 | value2 |
|---------------------|------------------|
现在假设我们要存储用户的消息,如下所示,我们将通过用户 ID 进行查询以检索用户的所有消息。
|---------------------|------------------|
| User Id | Message Id |
|---------------------|------------------|
| 12 | M1 |
| 12 | M2 |
| 13 | M3 |
|---------------------|------------------|
“用户 ID”仍然是该表的主键。请记住 dynamodb 中的主键不需要每个文档都是唯一的。消息Id可以是排序键
排序键是分区内的一种唯一键。分区键和排序键的组合必须是唯一的。
如果您使用的是 Visual Studio,您可以安装 AWS tool kit for Visual Studio 在您的计算机上创建本地表进行测试。
哈希键、范围键。 dynamo db 总是给人惊喜不是吗? :) 。其实
(Primary Key = Partition Key = Hash Key) != Your application objects primary key
根据我们的第二个场景,“消息 Id”假设是我们应用程序的主键,但是根据 DynamoDB 条款,用户 Id 成为实现分区优势的主键。
(Sort key = Range Key) = Could be a application objects primary
我们可以在分区内创建索引,这称为本地二级索引。例如,如果我们想根据消息状态检索用户的消息
|------------|--------------|------------|
| User Id | Message Id | Status |
|------------|--------------|------------|
| 12 | M1 | 1 |
| 12 | M2 | 0 |
| 13 | M3 | 2 |
|------------|--------------|------------|
主键:用户 ID
排序键:消息 ID
二级本地索引:状态
顾名思义,它是一个全局索引。如果我们想根据 id 检索单个消息,而不需要分区键(即用户 id)。然后我们将根据Message id创建一个全局索引。
关于azure - Dynamodb 中的分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46270663/
似乎有很多方法可以在 Azure 中自动使用 PowerShell。由于 ARM 模板是最新的,Azure 中的其他 PowerShell 选项是否已过时?这些工具/脚本之间有什么区别: Azure
我正在开发一个将托管在 Azure 中的 Web API。我想使用 Azure 诊断将错误记录到 Azure 表存储中。在经典门户中,我可以将日志配置为转到 Azure 表存储。 Classic Po
Azure 文件存储事件可以触发 Azure WebJob 或 Azure Function 吗? 例如,在文件夹“/todo/”中创建文件时。 最佳答案 我们目前没有任何 Azure 文件绑定(bi
我需要创建一个逻辑应用程序,我的要求是,我需要从 azure data Lake Gen2 文件夹迁移 json 文件,并根据某些值需要将该 json 转换为 xml,然后将其发送到 SQL。 因此,
我使用 VS Code 创建了 1 个 node.js 和 1 个 java Azure Function 当我使用 VS Code 将这两个函数部署到 Azure 时,我最终获得了这么多 Azure
收集 Azure 诊断数据时,暂存槽是否也会将诊断数据发送到 WadPerformanceCounters 表? 如果是这样,我该如何关闭它?或者在阅读诊断信息时如何区分暂存/生产。 我不想显示有关我
您好,我是 Azure 的新手。我有 VS 2012 和 Azure SDK 2.1,当我使用模拟器运行我的 Web 应用程序时一切正常。但是当我在 azure 上部署时出现错误消息: Could n
我很难区分 Azure 订阅和 Azure 租户有何不同?我尝试使用示例来弄清楚,但每次我得出的结论是它们在某种程度上是相同的?如果租户是组织在注册 Microsoft 云服务时接收并拥有的 Azur
如果我想在 Azure Insights 中设置自定义指标集合,并以(近)实时的方式可视化其中一些指标,并查看聚合的历史数据,我应该使用 Azure Metrics Explorer 还是 Azure
我想了解具有以下配置的 Azure 数据工厂 (ADF) 的现实示例/用例: Azure 集成运行时 (AIR) 默认值 自托管集成运行时(SHIR) 其他问题: 这两种配置(AIR 和 SHIR)是
请参阅下面来自 Azure 服务总线的指标。想要识别请求数量中的背景噪音|流量较低时的响应。假设振荡请求| session 中 amqp 握手的响应是潜在的。只是不明白这是什么类型的握手?从总线接收的
此问题与 Azure 事件中心和 Azure 服务总线之间的区别无关。 问题如下: 如果您将Azure Events Hub添加到您的应用程序中,那么您会注意到它依赖于Azure Service Bu
这两个事情是完全不同的,还是它们能完成的事情大致相同/相似? 最佳答案 Azure 辅助角色是“应用程序场”中您自己的一组虚拟机。您可以以分布式方式在它们上运行任何代码。通常,您编写业务代码以在这些服
我目前正在使用 Windows Azure 虚拟机来运行 RStudio, 我的虚拟机是 Windows Server R2 2012,它是 Azure 上的一项附加服务。 我还有一个 Azure 存
我们正在寻找托管一个网站(一些 css、js、一个 html 文件,但不是 aspx、一个通用处理程序)。 我们部署为: 1) Azure 网站 2) Azure 云服务 两种解决方案都有效。但有一个
我想从 Azure 表创建 blob。 AzCopy 支持此功能,但我找不到任何说明数据移动 API 也支持它的文档。此选项可用吗? https://azure.microsoft.com/en-us
This article表示 Azure 订阅所有者有权访问订阅中的所有资源。但是,要访问 Azure 数据库,必须是数据库中的用户,或者是 Azure Admin AD 组的成员。 无论 SQL 安
我尝试使用以下代码将 XML 文件上传到 Azure FTP 服务器: https://www.c-sharpcorner.com/article/upload-and-download-files-
除了 Azure 服务总线使用主题而 Azure 事件中心基于事件 - Azure 事件中心和 Azure 服务总线之间是否有任何根本区别? 对我来说,事件和消息之间没有真正的区别,因为两者只是不同类
我有一个通过虚拟网络网关连接到 Azure 虚拟网络的 Windows VPN 客户端。目标#1 是使用其内部 IP 地址连接到我的虚拟机。这有效。 第二个目标是使用其内部计算机名称进行连接(因为 I
我是一名优秀的程序员,十分优秀!