2016-11-01 6 views
1

Ich entschied mich, aerospike zu versuchen, aber ich habe einige Probleme. Ich bin mit Aero-Spike in einem Docker:Kann die Aufzeichnung nicht vom Aerospike entfernen

companies-data: 
    image: 'aerospike/aerospike-server:3.10.0-1' 
    ports: 
     - '5310:3000' 
     - '5311:3001' 
     - '5312:3002' 
     - '5313:3003' 
    volumes: 
     - './companies-data/data:/opt/aerospike/data' 
     - './companies-data/config:/opt/aerospike/etc' 
    command: '/usr/bin/asd --foreground --config-file /opt/aerospike/etc/aerospike.conf' 

Wenn ich einen Datensatz erstellen und starten Sie die Docker Container die Daten immer noch da, so Mengen korrekt eingerichtet sind. Wenn ich jedoch einen Datensatz entferne und den Andock-Container neu starte, ist der Datensatz immer noch vorhanden, er wird nicht entfernt. Vor einem Neustart funktioniert es einwandfrei: Der Datensatz wird entfernt, aber nach dem Neustart des Docker-Containers ist er wieder da.

Ich benutze Nodejs Aerospike-Client.

let key = new Key(this.ns, this.set, id); 
client.remove(key, function (err, key) { 
    if (err) { 
     return reject(err); 
    } 
    resolve(key); 
}); 

Hier ist meine conf:

service { 
    user root 
    group root 
    paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1. 
    pidfile /var/run/aerospike/asd.pid 
    service-threads 4 
    transaction-queues 4 
    transaction-threads-per-queue 4 
    proto-fd-max 15000 
} 

logging { 

    # Log file must be an absolute path. 
    file /var/log/aerospike/aerospike.log { 
     context any info 
    } 

    # Send log messages to stdout 
    console { 
     context any info 
    } 
} 

network { 
    service { 
     address any 
     port 3000 

     # Uncomment the following to set the `access-address` parameter to the 
     # IP address of the Docker host. This will the allow the server to correctly 
     # publish the address which applications and other nodes in the cluster to 
     # use when addressing this node. 
     # access-address <IPADDR> 
    } 

    heartbeat { 

     # mesh is used for environments that do not support multicast 
     mode mesh 
     port 3002 

     # use asinfo -v 'tip:host=<ADDR>;port=3002' to inform cluster of 
     # other mesh nodes 

     interval 150 
     timeout 10 
    } 

    fabric { 
     port 3001 
    } 

    info { 
     port 3003 
    } 
} 

namespace mtm { 
    replication-factor 2 
    memory-size 1G 
    default-ttl 5d # 5 days, use 0 to never expire/evict. 

    # storage-engine memory 

    # To use file storage backing, comment out the line above and use the 
    # following lines instead. 
    storage-engine device { 
     file /opt/aerospike/data/mtm.dat 
     filesize 4G 
     data-in-memory true # Store data in memory in addition to file. 
    } 
} 

wie ein Datensatz vollständig entfernen?

Antwort

2

Der Löschmechanismus löscht den Indexeintrag in die Daten und gibt so den Indexbereich und den Speicherplatz sofort frei. Es schreibt jedoch nicht dauerhaft einen Tombstone-Marker-Datensatz in den Speicher, sodass gelöschte Datensätze mit einem vollständigen Kaltstart der Cluster- oder Netzwerkpartitionsszenarios wiederhergestellt werden können.

Dies ist von der neuesten Aerospike Blog Post über die 3.10 Release.

2 Funktionen in der Aerospike Enterprise Edition verfügbar machen dieses Verhalten Adresse:

1- Schneller Start (Index im gemeinsam genutzten Speicher erhalten). 2- Dauerhafte Löschungen (siehe oben genannten Blog-Beitrag).

Sie können mehr über das Verhalten, das Sie auf dem Aerospike Forum auf this thread erfahren haben, lesen.

+1

So offensichtlich können Sie diese grundlegende Operation nicht tun, wenn Sie für die Enterprise-Edition bezahlen. –

+1

Sie können ttl verwenden, um die Lebensdauer von Datensätzen zu verwalten (da abgelaufene Datensätze nicht beim Kaltstart geladen werden - aber Sie müssen die Lebensdauer eines Datensatzes nicht verkürzen, da sonst das gleiche Problem auftritt). Die andere Möglichkeit, dies zu umgehen, besteht darin, einen Knoten seiner Daten zu bereinigen, bevor er wieder in den Cluster eingefügt wird (wenn Sie viele Löschvorgänge durchführen). Selbst bei der Enterprise-Edition würde ein Kaltstart gelöschte Datensätze zurückholen, es sei denn, sie wurden dauerhaft gelöscht (was vor der Verwendung eigene Dinge zu berücksichtigen hat). – Meher

Verwandte Themen