程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了DynamoDB 查询所有按名称排序的用户大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决DynamoDB 查询所有按名称排序的用户?

开发过程中遇到DynamoDB 查询所有按名称排序的用户的问题如何解决?下面主要结合日常开发的经验,给出你关于DynamoDB 查询所有按名称排序的用户的解决方法建议,希望对你解决DynamoDB 查询所有按名称排序的用户有所启发或帮助;

我正在对应用程序的数据进行建模以使用 DynamoDB。 我的数据模型相当简单:

用户可以是数百万,每个用户的项目可以是数千。

我的访问模式也很简单:

  1. 通过 ID 获取用户
  2. 获取按名称或创建日期排序的分页用户列表
  3. 通过 ID 获取项目
  4. 按用户按日期排序获取项目

我用于此数据模型的单个表如下:

DynamoDB 查询所有按名称排序的用户

我可以使用表 PK/SK 和 GSI 轻松实现我的所有访问模式,但我遇到了问题 2。 根据文档和最佳实践,获取分页用户的排序列表:

  • 无法使用扫描,因为不支持排序
  • 我不应该使用带有 PK 的 GSI,它会将我的所有用户放在同一个分区中(例如 GSI PK = "sorted_user",SK = "name"),因为这会使我的单个分区变热并且无法扩展
  • 我无法创建类型为“Organisation”的新实体,将所有用户放入其中,并通过 PK = "org" 进行查询,因为这将具有与上述相同的热分区问题

我可以存储用户并使用 write sharding,但我真的不知道如何实际查询分页排序的用户,因为存储桶 PK 可能需要是随机的,我必须查询所有存储桶以能够对所有用户进行排序。我还认为桶 PK 可以是字母,但这也可以打包热分区,因为字母“A”可能会受到很大影响。

我的应用程序模型相当简单。但是,在阅读了所有文档和最佳实践并观看了许多在线视频后,我发现自己陷入了 DynamoDB 似乎无法很好支持的最基本用例。我想对于几乎所有现代应用程序来说,必须在某种管理面板中获取用户列表一定很常见。

在这种情况下,其他人会怎么做?我真的很想使用 DynamoDB 带来的所有好处,尤其是在成本方面。

编辑

既然有人问我,在我的应用中,2) 的主要用例@R_197_9811@:https://stackoverflow.com/users?tab=Reputation&filter=all。 至于大小,它需要很好地扩展,至少可以扩展到数万。

解决方法

我也认为bucket PKs可以是字母,但是 也可以创建热分区,就像字母“A”一样 可能会受到很大打击。

我认为这听起来是一个合理的方法。

美国社会保障局在其网站上发布有关姓名的数据。您可以从 1879 年开始download the list of name data!我偶然发现了 data scientist and linguist Joshua falk 的一个网站,该网站绘制了来自 SSA 的婴儿姓名数据,这可以让我们了解姓名的首字母分布情况。

DynamoDB 查询所有按名称排序的用户

您的用户可能并非都来自美国,但这可以让我们了解如果按第一个字母进行分区,名称可能会如何分布。

然分布不完全均匀,但对于您的用例来说可能已经足够接近了吗?如果没有,您可以使用名称的前两个(或三个或四个...)字母作为分区键来进一步分发数据。

100 万个名字可能只相当于几 MB 的数据,这并不多。基于名称前缀的分区似乎是一种合理的方法。

您也可以虑使用 ElasticSearch 之类的工具,它可以支持您的第二种访问模式等。

大佬总结

以上是大佬教程为你收集整理的DynamoDB 查询所有按名称排序的用户全部内容,希望文章能够帮你解决DynamoDB 查询所有按名称排序的用户所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: