public void merge(Iterable<? extends Player> updateDatabase) {
        for (Player rhs : updateDatabase) {
            boolean matched = false;
            boolean conflict = false;

            for(String key : rhs.getIds().all()) {
                String id = rhs.getIds().get(key);

                Map<String,Player> repo = index.get(key);
                if (null != repo) {
                    Player original = repo.get(id);
                    if (null != original) {
                        matched = true;

                        if (! match(rhs,original)) {
                            conflict = true;
                        }
                    }
                }
            }

            if (conflict) {
                conflicts.add(rhs);
            } else if (matched) {
               // No-Op
            } else {
                missing.add(rhs);
            }
        }
    }