MongoDB 使用 DBRef 字段分片键?
MongoDB Sharding Key with DBRef field?
我有一个包含根文档 DBRef 的集合。我有数以万计的文档 link 到我的数据集合中的单个根文档。
这就是为什么我选择不嵌套根文档的数据。
Data Collection:
_id : Auto-Created ID
ts : TimeStamp
field_1 : Whatever
...
field_n : Whatever
root : DBRef
"Root" Document Collection:
_id: Filename (unique)
field_1 : Whatever
...
field_n : Whatever
我认为对我的集合进行分片的最佳方法是使用字段 ts
和 root._id
作为复合键。
这可能吗?如果没有,最好的解决方案是什么?只需将 root._id
字段复制到数据集合中的普通字段中?
为了回答我自己的问题,这是我发现的:
显然,这是不可能的,因为在后续查询中必须在客户端检索所有 DBRef。
我摄取了一个新字段 sh_key
,它是在应用程序端导入数据时即时创建的。新字段将保存 "compound sharding key" 的值。
该值是 root._id
值以及 ts
的小时以 {root._id}:{hour of ts}
的形式串联而成。
我有一个包含根文档 DBRef 的集合。我有数以万计的文档 link 到我的数据集合中的单个根文档。 这就是为什么我选择不嵌套根文档的数据。
Data Collection:
_id : Auto-Created ID
ts : TimeStamp
field_1 : Whatever
...
field_n : Whatever
root : DBRef
"Root" Document Collection:
_id: Filename (unique)
field_1 : Whatever
...
field_n : Whatever
我认为对我的集合进行分片的最佳方法是使用字段 ts
和 root._id
作为复合键。
这可能吗?如果没有,最好的解决方案是什么?只需将 root._id
字段复制到数据集合中的普通字段中?
为了回答我自己的问题,这是我发现的:
显然,这是不可能的,因为在后续查询中必须在客户端检索所有 DBRef。
我摄取了一个新字段 sh_key
,它是在应用程序端导入数据时即时创建的。新字段将保存 "compound sharding key" 的值。
该值是 root._id
值以及 ts
的小时以 {root._id}:{hour of ts}
的形式串联而成。