该问题的一个解决方案是在创建集合时使用“隐式路由器”。
比方说 - 您必须将应用程序的所有“Audit Trail”数据索引到 Solr。每天都会添加新数据。您很可能希望按年分片。
您可以在收藏集的初始设置期间执行以下操作:
admin/collections?
action=CREATE&
name=AuditTrailIndex&
router.name=implicit&
shards=2010,2011,2012,2013,2014&
router.field=year
上面的命令:
a) 创建 5 个分片 - 当前和最近 4 年各一个 2010,2011,2012,2013,2014
b) 根据“year”字段(指定为 router.field)的值将数据路由到正确的分片
在 2014 年 12 月,您可以使用 CREATESHARD API(集合 API 的一部分)添加一个新的分片,为 2015 年做准备 - 执行以下操作:
/admin/collections?
action=CREATESHARD&
shard=2015&
collection=AuditTrailIndex
上面的命令在同一个集合上创建一个新的分片。
假设您的数据的“年份”字段正确填充到 2015 年,所有数据将在 2015 年自动索引到“2015”分片中。
在 2015 年,如果您认为不需要 2010 分片(根据您的数据保留要求),您可以随时使用 DELETESHARD API 来执行此操作:
/admin/collections?
action=DELETESHARD&
shard=2015&
collection=AuditTrailIndex
附:只有在创建集合时使用“隐式路由器”时,此解决方案才有效。当您使用默认的“compositeId 路由器”时不起作用 - 即使用 numshards 参数创建的集合。
此功能真正改变了游戏规则 - 允许根据您不断增长的业务需求动态添加分片。