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?
So offensichtlich können Sie diese grundlegende Operation nicht tun, wenn Sie für die Enterprise-Edition bezahlen. –
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