【问题标题】:Relational data model to NoSQL, Amazon DynamoDBNoSQL、Amazon DynamoDB 的关系数据模型
【发布时间】:2016-11-07 22:09:18
【问题描述】:

我们即将开始一个新项目,要求之一是使用 NoSQL 解决方案。 90% 的可能性是 Amazon DynamoDB,因为我们“依赖于 AWS”。我们正在研究基于 DynamoDB 存储的 TitanDB(图表)。

数据模型包括:

  • 用户角色、权限、令牌存储
  • 具有一对多/一对一关联的更多类似数据的关系

我们要解决的任务:

  • 在数据之上构建报告。某些报告可能包含来自不同实体的字段
  • 按范围过滤(从 - 到)
  • 排序、计数、分页
  • 以上都可以同时应用

数据量:

  • 数据量不是很大,我们不是实时流式传输事件

假设: 据我了解,我们需要为我们要构建的报告创建非规范化视图(合并来自不同“表”的数据) - 将数据的副本保存在多个表中。 要么 我们需要使用 Elasticsearch 或其他解决方案进行索引。

Graph db 体验看起来很疯狂,但提供了一个清晰的数据模型,其中每个实体都相互关联。需要了解 db api 的查询限制。

问题:

  • 在非关系数据库中管理关系数据并保持一致性的最佳方法是什么?
  • 是否有任何事务支持(例如在 DynamoDB 中)以保持数据一致(在数据更新期间,由于非规范化,我们应该写入多个表)?
  • 与 Elasticsearch 集成并向其发出搜索请求,然后通过 id 从 DB 中获取数据是否是一个很好的解决方案?

【问题讨论】:

    标签: amazon-web-services transactions amazon-dynamodb consistency nosql


    【解决方案1】:

    Dynamo 上的 TitanDB 是受支持的 Amazon Web Services 解决方案,记录在 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.TitanDB.html

    对于报告和其他交互,您将使用 Apache Tikerpop (http://tinkerpop.apache.org),它不包含“报告引擎”或 JDBC 连接器,但它确实提供了许多语言的连接器,可以轻松用于构建报告:python、scala、go、.NET/C# 等。

    【讨论】:

      【解决方案2】:

      DynamoDB 中的读一致性可以是最终一致的,也可以是强一致的;请查看http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html 了解两者之间的差异的详细信息。

      将 ElasticSearch 与图结合使用仍然是一种新兴的技术组合。有一些项目(elastic-gremlin 和 unipop)正在解决这个问题。根据您的用例,您应该能够通过使用 Gremlin(它是 Tinkerpop 的一部分)遍历 Titan 图来获取数据,而无需添加额外的 ElasticSearch 层……但您可能不会。如果您想以一种简单的方式在 AWS 中试验 ES 环境,您可能需要查看 https://aws.amazon.com/elasticsearch-service/

      另外:如果您有 AWS 支持合同,您应该联系他们 - 这不仅仅是为了中断/修复。支持团队可以将您与 AWS 技术人员联系起来,他们可以帮助验证甚至测试您的计划。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多