我正在开发一个 Web 应用程序,用户将在其中将大量文档上传到系统,并对文档执行不同类型的操作,包括聚合。然而,每个用户上传的文件数量差异很大——有些可能会上传十几个文件,有些可能会上传一百万个文件。
文件看起来像这样:
doc{
_id: <self generated UUID>,
uid: <id of user who uploaded the document>,
ctime: <creation timestamp>,
....
<other attributes, etc>
....
}
现在是选择分片键的问题:
1、如果我选择UUID作为分片键,同一个用户上传的文档不太可能最终在同一个分片中,聚合操作会很昂贵。
2.如果我使用uid作为shard key,那么shards中存储的数据就不会是偶数了。
谁能建议实现这一目标的最佳方法?
我对分区和分片非常陌生,我对谷歌以及堆栈溢出的研究没有产生任何结果。如果需要,我可以更改文档的架构,因为项目仍处于设计阶段。