如何在 Cosmos DB 中对订单进行分区?

如何解决如何在 Cosmos DB 中对订单进行分区?

我正在开发一个应用程序,客户可以在其中订购产品,而制造商必须处理这些订单。我想使用 Cosmos DB,我目前正在尝试决定如何对数据建模。我阅读了文档中的 Modeling dataModeling and partitioning - a real-world exampleChoosing a partition key 文章,我想我理解了那里描述的概念,但是我在将它们应用于我的数据模型时遇到了麻烦,尤其是用作 Orders 的分区键。

Orders 是由 Customers 创建的,所以我首先认为 CustomerId 会成为一个很好的分区键。这将使显示属于客户的所有订单变得容易。 但是,我还需要其他查询:制造商需要显示给定时间范围内的所有订单(例如,了解哪些订单应该在下周交付并需要包装),并且为了回答我需要查询所有分区。

我想出的可能解决方案是:

  • 接受将有一些跨分区查询
  • 完全跳过分区,将所有订单存储在一个分区中。如果(可能高估)每个文档 10kb,我仍然可以存储 200 万个订单。
  • 使用更改提要将所有订单复制到按(例如)月份分区的另一个容器。这样一来,大部分时间只需要搜索一两个分区,但通常不鼓励使用基于日期的分区键。不过,我认为在我的案例中没有足够的订单来创建任何热分区。
  • 不要使用 Cosmos DB 存储订单。使用关系数据库可以轻松回答上述查询。但是,我确实喜欢将所有相关订单数据(如产品、金额、价格等)存储在一个文档中的可能性。这在关系数据库中会复杂得多。

我知道这个应用程序可能足够小,任何一种方法都可以工作,但我仍然试图从概念上“正确”地做到这一点,我想使用这个项目来学习并为更大的项目做好准备,所以任何想法表示赞赏。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?