Was ist der richtige Weg, um entfernen Sie ein element aus einer Hazelcast Karte?
Brauche ich, um ein Element zu entfernen von Hazelcast verteilte Karte, und ich benutze so etwas wie dieser code (vereinfacht):
public void realeaseBatchesById(int Id) {
Iterator<Map.Entry<Long, WorkingBatch>> it = workingMap.entrySet().iterator();
while (it.hasNext()) {
WorkingBatch value = it.next().getValue();
if (value.getServer().getId() == idd) {
it.remove();
}
}
}
aber dieser code nicht den Wert entfernen, die Größe der Karte ist die gleiche, am Anfang, wie die Größe am Ende.
Wenn ich sehe, zu Hazelcast Javadoc ich sehe, dass diese Schnittstelle definiert nur das entfernen von Schlüssel und Schlüssel mit dem Wert. Bedeutet es, ich kann nicht verwenden Sie ein standard-Weg, wie man den Wert entfernen von der Karte?
- Haben Sie versucht
equals
statt==
? - Es ist kein problem mit dem finden von Werten bestimmt, die für das entfernen - ich fand Sie. Funktioniert aber nicht entfernen Sie Sie über
it.remove()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entfernen eines Elements aus einer Karte, die Sie nicht tun können, durch einen iterator. Der iterator ist eine temporäre Kopie der entryset und änderungen auf, die es noch nicht widerspiegeln, die auf die Inhalte der Karte.
Ihr Ansatz ist nicht sehr skalierbar, da Sie die Iteration über alle Einträge in der Karte, stellen Sie sich vor Sie haben gigabytes von map-Einträgen.. etwa 50% benötigt werden, senden über die Linie, bevor Ihr Artikel gefunden wird.
Wenn Sie möchten, um ein Element zu entfernen, können Sie tun:
Aber die große Frage ist: wie finden Sie Ihren Artikel. In Sie Fall, Ihr Artikel hat offenbar irgendeine Art von server.id, so dass Sie könnten einen index erstellen, der auf diese id, so können Sie eine schnelle suchen, und kombinieren Sie es mit:
Wenn Sie erstellen ein Prädikat (das findet Sie Ihre Eingabe) und erstellen Sie ein Eingabe-Prozessor (das löschen können Sie Ihre Eingabe), können Sie eine viel mehr effiziente löschen.