Dies ist eine einfache Lösung, in Fällen, in denen die Datengröße nicht zu groß ist und die Leistungsanforderungen nicht zu hoch sind.
Zuerst erstellen wir unsere Tabelle. Wir werden eine ID-Spalte und eine Datenspalte haben, aber Sie können Spalten haben, die Sie für Ihre spezielle Situation benötigen.
CREATE TABLE capped_collection (
id integer NOT NULL,
data text);
Jetzt erstellen wir eine Sequenz, die für unsere Primärschlüssel, stellen Sie die MAXVALUE
die gewünschte Größe unserer capped Sammlung zu sein, und wir nutzen die CYCLE
Option, so dass die Sequenz bis zu MAXVALUE
zählen und dann Neustart bei wieder 1.
CREATE SEQUENCE capped_collection_id_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
CACHE 1
CYCLE
OWNED BY capped_collection.id;
im nächsten Schritt (hier nicht dargestellt), sollten Sie die Tabelle mit MAXVALUE
Aufzeichnungen Vorkeimdaten. Wir machen das so, dass jeder ID-Wert eine Zeile hat und wir uns keine Gedanken darüber machen müssen, ob wir eine INSERT- oder UPDATE-Operation ausführen sollen, nur um die Dinge einfach und leistungsfähig zu halten.
Nun, da unser Tisch eingerichtet ist, wenn wir eine neue Zeile einfügen wollen, müssen wir stattdessen wie ein UPDATE tun so
UPDATE capped_collection
SET data = 'your data here'
WHERE id = (SELECT nextval('capped_collection_id_seq'))
Der nextval
Befehl ruft uns die nächste id, und weil wir es angegeben CYCLE
wird um 1 zurückgehen, sobald es MAXVALUE
erreicht. Das Endergebnis ist, dass Sie nur MAXVALUE
Zeilen in der Tabelle haben werden, wobei die ältesten Einträge ausgeklammert werden.
(von http://www.rigelgroupllc.com/blog/2014/10/14/capped-collections-in-postgres/)
Partitionierung Implementieren und programmatisch die älteren Partitionen löschen und nur halten die jüngste funktionieren könnte. Theoretisch sollte es viel besser funktionieren als das Löschen von Zeilen aus der Tabelle. – Marquez