【问题标题】:DynamoDB schema for referral data引用数据的 DynamoDB 架构
【发布时间】:2015-11-01 17:43:45
【问题描述】:

我想试用 DynamoDB 并将其用于 nginx 生成的 access.logs,稍后将用于报告仪表板,其中包括 IP、引荐 url、引荐域、浏览器等。

初始设置将是运行 nginx 和 CloudWatch 的 EC2 实例,它将使用 nginx 实例的 access.logs。

这个想法是 CloudWatch 条目将触发一个 lambda 函数,该函数将解析日志并将其放入 DynamoDB。

除了我读过的内容之外,我对 DynamoDB 不太熟悉,但我是这样考虑为此做架构的:

ID 将是 nginx 命中的 url,这是我们将报告的内容。

ReferralDomain(表格)

  • ID(密钥)
  • 域 (S)
  • 已创建(范围)

ReferralURL(表格)

  • ID(密钥)
  • 网址(S)
  • 已创建(范围)

ReferralBrowser(表格)

  • ID(密钥)
  • 浏览器 (S)
  • 已创建(范围)

对于报告的其他项目,例如 IP 或 GEO 信息(ReferralCity、ReferralCountry 等),这将继续。

对于 Dynamo 中的此类数据,这似乎是一个好的架构设计吗?最终,仪表板将用于具有日期范围操作的特定 ID,它将按 URL、浏览器等显示总计(聚合)列表,并实际列出数据。此外,其中一份报告可能列出了带有计数的唯一项目。例如,对于 ReferralDomain,“Facebook”在特定 ID 的日期范围内可能有 550 个计数。这可能需要在 EMR 中完成?

对于此类数据,Dynamo 是否有更好的架构可供使用或任何其他应考虑的因素?谢谢

【问题讨论】:

  • 我们在这里讨论了多少个 URL? (对于哈希主键部分)
  • 数百万,将用于从 nginx 提供的图像
  • 我应该补充一下,我不一定将实际 URL 作为 ID,但可能是 url (md5) 的哈希
  • 创建等于 nginx 中的条目?每个请求都将在一个“行”中表示?
  • Created 是一个日期,它只代表图像的投放时间。基本上,这样做是将 nginx access.log 映射到可以查询以进行报告的 dynamo。基于此设计示例,访问日志中的每个变量(用户代理、ip、推荐域等)在此处将是一行中的值。

标签: amazon-dynamodb elastic-map-reduce


【解决方案1】:

主键看起来很可靠,您的架构将很好地工作和扩展。

如果我正确理解 nginx/您的用例 - 我不确定您为什么要根据属性拆分表。

你可以有一张桌子:

链接(表格)

  • ID(主哈希键)
  • 已创建(主范围键)
  • referralUrl(S 属性)
  • referralDomain(S 属性)
  • referralBrowser(S 属性)
  • ...

而且由于 DynamoDB 是无模式的,您可以保留其中的一些。

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多