Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database dynamodb中的建议引擎-查询与其他记录没有关系的记录_Database_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Database dynamodb中的建议引擎-查询与其他记录没有关系的记录

Database dynamodb中的建议引擎-查询与其他记录没有关系的记录,database,amazon-web-services,amazon-dynamodb,Database,Amazon Web Services,Amazon Dynamodb,在过去的两周里,我一直在学习dynamodb文档,并进行了数据库设计,但有一件事让我很为难,尽管我认为我对这个db引擎有很好的了解,但我无法解决以下问题 假设(为了简单起见)我有一个类似Spotify的服务,表中有以下记录: 用户记录: 主键:USR_# SK:用户 数据:名称(并不重要) 歌曲记录: 主键:SNG_# SK:宋 资料:标题 听录音 主键:USR_# SK:SNG_# 数据:日期 已听记录是数据库中的记录,表示用户已听过特定歌曲 想象一下,表中有数千个用户和数千条记录

在过去的两周里,我一直在学习dynamodb文档,并进行了数据库设计,但有一件事让我很为难,尽管我认为我对这个db引擎有很好的了解,但我无法解决以下问题

假设(为了简单起见)我有一个类似Spotify的服务,表中有以下记录:

用户记录:

  • 主键:USR_#
  • SK:用户
  • 数据:名称(并不重要)
歌曲记录:

  • 主键:SNG_#
  • SK:宋
  • 资料:标题
听录音

  • 主键:USR_#
  • SK:SNG_#
  • 数据:日期
已听记录是数据库中的记录,表示用户已听过特定歌曲

想象一下,表中有数千个用户和数千条记录

现在,要求(访问模式,如果你愿意)是向用户推荐他们从未听过的歌曲

我花了数小时研究dynamodb文档,但在我看来,建模是不可能的

我如何查询用户从未听过的歌曲

我可以想出一些非常低效的方法来建模,将用户列表添加到歌曲记录中,这在我看来显然是荒谬的,因为我必须扫描所有歌曲,并在不存在USR的地方按属性进行过滤

有没有更有效的模式来解决这个问题?

从监听记录表中保留登录用户的所有监听SNG,并将其保存在内存中(比如HashMap)。编写一个逻辑,从内存映射中不存在的歌曲记录中随机选取SNG#,并建议播放该歌曲


我相信这在应用层比数据库层处理得更好。由于Dynamodb没有连接,您需要在应用程序中构建类似连接的逻辑

如果我使用lambda函数呢?这种记忆不会持久。另外,我正在使用JavaScript。我很快检查了HashMap,它是Java的东西。我可以使用Redis,但如果出于某些原因需要清除内存,该怎么办?另外,您如何排除用户收听的记录(歌曲)?在最坏的情况下,需要对数据库进行n-1次调用,其中n是记录数。这意味着,如果我有一百万首歌曲,我将不得不为一个用户查询数据库99999次。我可以拥有成千上万个。