@Override
 public Map<Integer, List<String>> splitByDataSource(Collection<String> ids) {
   Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
   for (String s : ids) {
     ObjectId oi = new ObjectId(s);
     int shard = oi.getShard();
     int datasource = shard / getShardsPerDataSource();
     List<String> list = map.get(datasource);
     if (list == null) {
       list = new ArrayList<String>();
       map.put(datasource, list);
     }
     list.add(s);
   }
   return map;
 }
 @Override
 public ExtendedDataSource getDataSourceByObjectId(String id) {
   ObjectId oi = new ObjectId(id);
   return getDataSourceByShardId(oi.getShard());
 }