我有点困惑这在 DynamoDB 中是否可行。
我将给出一个 SQL 示例并解释如何优化查询,然后我将尝试解释为什么我对如何建模以及如何访问 DynamoDB 中的相同数据感到困惑。
这不是公司代码。这只是我基于 pcpartpicker 过滤器编写的一个例子。
SELECT * FROM BUILDS
WHERE CPU='Intel' AND 'OVERCLOCKED'='true'
AND Price < 3000
AND GPU='GeForce RTX 3060'
AND ...
Run Code Online (Sandbox Code Playgroud)
根据我的理解,SQL 将首先对 BUILDS 表进行扫描,然后过滤掉 CPU 使用 intel 的所有构建。然后,它从这个子集中执行另一个 WHERE 子句来过滤 'OVERCLOCEKD' = true 等等。基本上,所有附加 WHERE 子句都有较少数量的要过滤的行。
为了加速这个查询,我们可以做的一件事是在这些列上创建索引。性能的主要提高是减少了数据库查看的第一个子句对整个表的初始扫描。因此,在上面的示例中,无需扫描整个数据库来查找使用 intel 的构建,而是可以快速检索它们,因为它已建立索引。
您将如何在 DynamoDB 中对这些数据进行建模?我知道您可以创建一堆二级索引,但不要让引擎执行 WHERE 子句并传递结果以进行下一组过滤。看来这一切都必须你自己做。例如,我们需要使用二级索引来查找所有使用 intel、超频、小于 3000 以及使用特定 GPU 的构建,然后我们需要自己找到交集。有没有更好的方法来制定这种访问模式?我很难弄清楚这是否可能。
编辑:我知道我也可以只使用普通的过滤器,但似乎这会非常昂贵,因为它基本上是通过表进行强力搜索,类似于没有索引的 SQL 解决方案。
要了解我在 pcpartpicker 中的意思,请点击该页面的网站链接:https ://pcpartpicker.com/builds/
人们基本上会选择多个过滤器,因此这使得访问模式的设计变得更加困难。
我强烈建议您浏览 YouTube 上的各种 AWS 演示...
特别是,这里有AWS re:Invent 2018:使用 AWS 数据库构建:将您的工作负载与正确的数据库匹配 (DAT301)演示文稿的目的铁三角 - PIE 定理章节的链接。

DynamoDB 提供 IE - 无限规模和效率。
但您需要 P - 模式灵活性。
您需要决定是否需要 PI 还是 PE。
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |