我正在将不带分区的Cloudant数据库迁移到Cloudant的新分区系统,以降低ibm云帐户的成本。上下文可以总结如下:
问题是关于这种数据模型的分区,并避免尽可能多的全局查询(跨分区),这比基于分区的查询要昂贵得多。
我以为首先我会每天进行分区,但最终我会遇到一种情况,即查询在4个月内过滤特定类别Cn的电子邮件,但特定类别每天仅接收1封电子邮件,这意味着在用户界面上显示一页(共15封电子邮件),我应该进行15条不可接受的查询。
在分区到达之前,我只是使用Lucene查询引擎进行全局查询,但是由于成本原因,这已经不再了。
此外,我还考虑将所有电子邮件放在一个分区中,这样我就可以在该分区中使用相同的旧查询,并且由于它是一个分区,因此我不会按全局查询价格查询分区查询价钱。从理论上讲这是可行的,但我猜可能会有一些限制,因为有关分区的文档建议不要在单个分区中放入“太多数据”。
您对这种问题有任何建议吗?
谢谢。
答案 0 :(得分:1)
考虑到您的设计,在我看来好像没有分区键可以让您完全避免全局查询。根据经验,选择一个分区键,使您可以检索构成逻辑分组的所有数据。例如,假设有一个订单系统,其中有一组具有相关订单的客户-明显的分区键将是唯一的客户ID:然后对与每个客户相关的所有数据进行逻辑分组。
在Cloudant博客上,有关分区的文章很不错:
https://blog.cloudant.com/2019/03/05/Partition-Databases-Data-Design.html