我正在使用Node.js和环回构建应用程序。该应用程序的一个组件将登录尝试存储到DynamoDB中。我是这个数据库的新手,并且遇到了问题。

目前,我的哈希键是一封电子邮件,而范围键是发生登录尝试时的unix时间戳。本质上,我需要从数据库获取所有数据,以生成最后一次登录尝试的列表。首先想到的是使用扫描,但是它不允许根据持续的登录尝试对列表进行排序。使用查询的问题是,我必须访问所有电子邮件,而不仅仅是访问特定电子邮件的项目。我想我可以使所有散列值都相同,但是这将基于dynamoDB存储其数据的方式在将来产生性能问题。

还有其他人遇到过此类问题并有解决方案吗?

最佳答案

像Amazon DynamoDB这样的NoSQL数据库通过以特定的主键(“哈希”)存储和检索数据来达到最佳效果。也可以通过主键加上附加值(“哈希和范围”)来标识数据。

但是,由于要扫描数据非常耗费CPU和IO,因此您想要了解“上次登录”的要求并不能很好地适合于NoSQL数据库。

一种替代方法是为每个用户创建一个条目(记录),并在用户上次登录时间的那个条目上存储一个属性(类似于“列”的概念)。这样,您只需检索一条特定记录即可发现上次登录时间。

如果您还希望保留完整的登录尝试历史记录,则可以在单独的表上完成此操作,该表具有哈希值和范围,并且每次登录尝试都有一个项目。这将与上面的表(每个用户只有一个项目)分开。

10-06 15:52
查看更多