代码之家  ›  专栏  ›  技术社区  ›  Jayendran

何时使用dynamoDB-用例

  •  7
  • Jayendran  · 技术社区  · 8 年前

    我试图找出适合Amazon dynamoDB的最佳用例。

    当我在谷歌上搜索时,大多数博客都说DyanmoDb将只用于大量数据(BigData)。

    我有关系数据库的背景。NoSQL DB对我来说是新的。所以当我试图把它和正常关系数据库知识联系起来。

    与DynamoDb相关的大多数概念是使用分区键/排序键创建一个无模式表。并尝试根据密钥查询它们。此外,没有这样的存储过程概念可以使查询更容易和简单。

    如果我们管理如此庞大的数据,每次都进行如此复杂的查询来检索数据,那么没有存储过程,这将是正确的方法吗?

    笔记 :我可能对这个概念有错误的理解。所以,请任何人澄清我的想法

    提前感谢
    杰伊

    1 回复  |  直到 8 年前
        1
  •  12
  •   Egor    8 年前

    简而言之,像DynamoDB这样的系统旨在通过水平扩展来支持大数据集(太大,无法容纳单个服务器)和高写/读吞吐量,而不是垂直扩展,这在历史上是关系数据库更常见的方法。

    支持水平可扩展性的主要方法是对数据进行分区,即将数据集拆分为多个部分并分布在多个服务器之间。这样一来,它可能会使用更多的存储和更高的IOPS,从而允许更大的数据集和更高的读/写吞吐量。

    然而,由于数据分布在多个物理服务器之间,因此数据分区很难支持复杂的查询,例如连接等。至于存储过程,由于同样的原因,它们不受支持-从历史上看,存储过程背后的思想是数据局部性,即它们在数据附近的服务器上运行,而不需要网络操作,但是,如果数据分布在多个服务器上,这一好处就会消失(至少以存储过程的形式)。

    因此,从此类系统中查询数据的最有效方法是通过记录键,因为数据分区基于键,并且很容易找出给定键的记录在物理上的位置。虽然许多这样的系统也支持二级索引,但它们通常在某种程度上受到限制或成本高昂,可能不足以满足复杂软件解决方案中的要求。一种非常常见的方法是有一个互补的索引/查询解决方案(我见过基于Elasticsearch和Solr的解决方案),它允许在一些记录片段上运行复杂的查询,以找出一个记录键,然后用于加载记录。