amazon-web-services - DynamoDB 索引协助和获取我的数据
问题描述
我在所有这一切的开头都说我仍在积极学习 DynamoDB,我认为对我的问题的回答将有助于我理解一些事情。
我有一个分析微服务,我将自定义(内部)分析事件推送到 DynamoDB 表中。我们的 Dynamo 行/项目中的列包括如下数据:
- 用户身份
- IP地址
- 事件动作
- 时间戳
- 拆分测试 ID
- 拆分测试值
我们想从这个数据库中提取的主要问题之一是:
- “有多少用户看到了带有值 y 的拆分测试 x?”
我很难理解我应该如何索引我的数据库来解决这种请求?我设置了一个针对拆分测试 ID 的“仅限键”索引,收集这些的查询相当有效,但它只提取用户 ID 和拆分测试 ID。理想情况下,我想要一个高效的查询,它还返回多个其他关联值……</p>
我如何实现这一目标?我需要做一些不同的事情吗?此外,如果根据我的解释,我对 Dynamo 的任何理解在某些方面听起来完全缺乏,请指出我正确的方向!
解决方案
您将 DynamoDB 视为无模式数据库,显然它就是。但是,这并不意味着模式不重要。NoSQL 数据库中的模式通常比 SQL 数据库中的模式更重要,而且它们通常不那么简单。
确定您将如何存储数据的最重要的事情是您将如何访问它。您必须考虑访问数据的所有方式,并通过创建必要的数据列和必要的索引来确保它是可能的。在这种情况下,如果您想知道两个值以某种方式组合了多少次,您可以轻松地添加一个包含这些组合值的列(例如,splitId#splitValue
)并在索引中使用它。
如果您想了解更多关于高级模式等的信息,我建议您观看Rick Houlihan 的著名 re:invent 演讲或阅读DynamoDB 书。
最后一点,我想补充一点,切换到 SQL 服务器通常不是解决方案。选择 NoSQL 而不是 SQL 通常是基于非功能性需求。NoSQL 数据库用于需要非常低延迟地检索大型数据集中的数据的应用程序是有原因的,但与所有事情一样,权衡是游戏的名称。
推荐阅读
- supercollider - 超级对撞机 一切正常时没有声音
- nlp - 无法打开 FastText 以从存储桶加载
- xml - 如何使用 WebView2 控件对本地文件执行 XML/XSL 转换?
- python - 如何使用 Pandas .value_counts 计算事件在(a 列)中发生的次数,以及在(b 列)中说明的分组年份
- asp.net-mvc - MVCController 数据不持久
- firebase - “用户不存在” Firebase
- python - 将图像发送到后面或前面 - xlsxwriter
- javascript - 有没有办法在 discord.js 中使用所有人角色
- python - 尝试将站点分别抓取到 xml 和 json 时未找到元素/期望值
- react-native - react-native 屏幕录像机应用程序不录制后台屏幕,仅录制应用程序屏幕