Sollte ich jemals etwas LÖSCHEN (SQL und DB)?


7

Ich bin neugierig, sollte ich jemals etwas löschen? Im Moment baue ich eine Website (für mich selbst) auf, auf der Sie Benutzer abonnieren können, die Sie dann jedes Mal erhalten, wenn der Benutzer Inhalte hochgeladen hat.

Oder Kommentare, wenn es einen Thread gibt und jemand einen direkten Kommentar zu Ihrem Kommentar schreibt, erhalten Sie eine Nachricht, die dies sagt. Sollte ich diese jemals löschen oder einfach ausblenden?

Jedes Abonnement hat drei (64bit) int. ID, Kommentar-ID, Empfänger-ID. Über commentId können Sie in der Kommentartabelle herausfinden, wer Ihnen geschrieben hat. Wenn ich nicht löschen benutze, wird ein 4. int den Status anzeigen (anzeigen, versteckt / löschen).

Soll ich sie verlassen oder löschen? Wenn ich sie löschen sollte, warum dann? Ich kann vielleicht sehen, wenn es einen persönlichen Benutzer gibt, den Sie auf Anfrage löschen müssen, aber außer dem, den ich jemals löschen sollte?

Ich weiß nicht, welche SQL-Datenbank ich verwenden werde.

-bearbeiten-

Danke Leute. Im Moment werde ich nichts löschen, außer Dinge, die ich generieren kann. Wie das Abonnement.


1
64bit INTs? Wie viele Beiträge erwarten Sie? Ein 64-Bit-INT für einen Statuscode ist ebenfalls ein bisschen OOT. Persönlich verwende ich CHAR (1) für Statuscodes und verwende die Buchstaben D = GELÖSCHT, N = NEU, U = AKTUALISIERT usw. Es erleichtert später das Hinzufügen neuer "Zustände".
Guy

@guy, AFAIK Ich kann nur 64-Bit-Ints in sqlite3 db haben, aber ich bin sehr wahrscheinlich falsch und weiß einfach nicht, wie man sie richtig erstellt.

Antworten:


14

Das Unternehmen, für das ich arbeite, bietet Software für Personen in bestimmten regulierten Branchen an, sodass ich im Allgemeinen die Einstellung "Nie etwas löschen " habe, denn wenn Sie etwas löschen, haben Sie die Vollständigkeit Ihres Prüfpfads verloren. Markieren Sie die Informationen stattdessen als gelöscht (oder verschieben Sie sie in eine Archivversion der Tabellen) und notieren Sie, wer sie wann "gelöscht" hat.

Die einzigen Gründe, Dinge wirklich zu löschen, sind

  • wenn Ihnen der Speicherplatz ausgeht (aber die Festplatte ist heutzutage billig)
  • aus Effizienzgründen (aber wenn Ihre Datenstruktur gut indiziert und nicht stark fragmentiert ist, macht dies wenig Unterschied)
  • aus rechtlichen Gründen (wenn Sie aufgefordert werden, die Daten einer Person zu entfernen, müssen Sie diese höchstwahrscheinlich einhalten, abhängig von den örtlichen Datenschutzgesetzen oder wenn der Inhalt selbst gegen ein Gesetz verstößt)

Ihre Benutzer sind möglicherweise dankbar, dass nichts wirklich gelöscht wird, wenn sie versehentlich etwas Nützliches löschen und Sie es zurückerhalten können. Und wenn ein verärgerter Benutzer, der der Website zuvor wertvolle Informationen zur Verfügung gestellt hat, einen zischenden Anfall auslöst und alle seine Beiträge aus Rache löscht, können Sie die Löschungen einfach zurückziehen.

Ein besonders wichtiger Punkt: Sie sollten in Ihren Nutzungsbedingungen klarstellen, dass Informationen möglicherweise nicht wirklich gelöscht werden, wenn der Benutzer sie nicht mehr sehen kann, und eine Route angeben (wenn Sie nur "x @ xx per E-Mail senden und danach fragen") getan werden ") damit sie Daten wirklich löschen können, haben sie nach den einschlägigen Gesetzen das Recht, die Löschung zu beantragen.


Selbst wenn Sie etwas in eine "gelöschte" Tabelle verschieben, kann dies Ihre referenzielle Integrität beeinträchtigen. Haben Sie nur ein kleines Feld für "gelöscht" und möglicherweise einige Überwachungsinformationen (Datum / Uhrzeit gelöscht, Benutzer usw.)
Mark Henderson

2
Wenn sich der Status (gelöscht, nicht gelöscht) sehr selten ändert, können Sie die Tabellen für eine bessere Leistung auf diesen Wert partitionieren.
Philip Kelley

Normalerweise bevorzuge ich den Ansatz "Markierung gelöscht", aber manchmal (insbesondere beim Nachrüsten des Nichtlöschens von Daten in eine vorhandene Struktur, die von vielen vorhandenen Codes verwendet wird) kann eine separate Archivtabelle praktischer sein.
David Spillett

6

Typischerweise haben Sie moderne Platten der heutigen Größen und IO Leistung Mittel nicht haben , um Datensätze zu löschen , um Speicherplatz zu sparen oder die Leistung aufrechtzuerhalten. Normalerweise kann ein Feld "Datensatz gelöscht" im Datensatz den Datensatz als gelöscht (oder als andere Status) mit einem Prüfpfad markieren.

Einige Branchen schreiben vor, dass Sie aus regulatorischen Gründen niemals "Transaktionsdaten" löschen. Sie würden bereits wissen, ob Sie dies tun müssen. Wenn Zahlungsinformationen vorliegen, müssen Sie die Daten in der Regel 7 Jahre lang aufbewahren (oder verfügbar machen) (britisches Rechnungslegungsgesetz).

Für andere Zwecke gibt es tatsächlich einen guten Grund, Daten physisch zu löschen.

Wenn es nicht da ist, ist es nicht auffindbar.

Das Freedom of Information Act (in Großbritannien) besagt, dass die Daten, wenn sie auffindbar sind, in den Bereich für jede Suche aufgenommen werden. Dies umfasst "weich gelöschte" Datensätze und historische Sicherungen.

Bei einigen Systemen stellen wir sicher, dass wir alte Datensätze löschen und alte Sicherungsbänder / -dateien nach "so vielen" Monaten wiederverwenden / zerstören, um sicherzustellen, dass sie nicht für FOI-Anforderungen verfügbar sind. (Die Bearbeitung einer FOI-Anfrage, die mehrere Jahre zurückliegt und die Wiederherstellung von Hunderten alter Postfächer aus Archivsicherungen erfordert, ist SEHR kostspielig.)

Dies unterscheidet sich von OPERATIONAL-Backups. Wir speichern Backups, damit wir sie im Katastrophenfall wiederherstellen können. Wir haben auch einen "Records Store" für papierbasierte und elektronische Medien, der aufbewahrt werden muss, und wir kopieren E-Mails und dergleichen in diesen Store.


2
Darüber hinaus schreibt das Datenschutzgesetz (wieder das Vereinigte Königreich) vor, dass Daten nicht länger als erforderlich aufbewahrt werden, wenn ein Datensatz, der sich auf personenbezogene Daten bezieht, als gelöscht markiert und nicht gelöscht wird, aufbewahrt wird und per Definition nicht mehr erforderlich ist sollte also gelöscht werden.
Richard Slater

Absolut (plus lahmer Filter "Mindestanzahl von Buchstaben")
Guy

0

Mein Bauchgefühl ist, niemals etwas zu löschen. Sie wissen nie, wann Sie es brauchen könnten. Wenn ich aus irgendeinem Grund Daten aus Arbeitstabellen entfernen muss, neige ich dazu, sie in eine Archivtabelle zu verschieben.

Dies kann jedoch zu viel des Guten sein, wenn es sich um Daten für den eigenen Gebrauch handelt und es unvorstellbar ist, dass es jemals einen rechtlichen Grund gibt, alte Daten zu sehen. Sie sagen nicht so viel über Ihre Anwendung, aber könnte ein Benutzer verlangen, alte Daten zu sehen, weil eine andere Verwendung sie verleumdet hat?

JR


0

Das Löschen oder Nicht-Löschen hängt von der Menge der verfügbaren Ressourcen und der Menge der Daten ab, die Sie sammeln. Ich habe bereits an Projekten gearbeitet, bei denen Löschungen nicht zulässig sind. Es bedeutete nur, dass alle Datenelemente ein Start- und ein Enddatum erhalten. Das Datenelement wäre während dieses Zeitraums gültig, nicht vorher, nicht danach. Sie können also etwas "löschen", indem Sie das Enddatum auf heute setzen.
Leider bedeutet dies auch, dass Sie für jedes Datenelement, das Sie auswählen möchten, das aktuelle Datum mit diesem Zeitraum überprüfen müssen. Mit SQL würde dies eine zusätzliche Bedingung für Ihre Abfragen erfordern.
Um die Sache noch schlimmer zu machen, könnten Sie sogar in Betracht ziehen, Änderungen zu deaktivieren. Wenn ein Datenelement bearbeitet wird, setzen Sie einfach das Enddatum auf jetzt und erstellen ein neues Datenelement mit denselben Schlüsseln und Änderungen. Auf diese Weise sammeln Sie eine riesige Sammlung von Daten, die jedoch sehr historisch sind und nichts gelöscht werden. In diesem Fall sollten die Start- / Enddaten auch eine Zeitkomponente enthalten. (Und Sie müssen sich um die Sommerzeit sorgen, wenn die Uhren eine Stunde rückwärts gedreht werden.) Grundsätzlich würde Ihr System dann nur neue Elemente einfügen, nichts ändern oder löschen.


0

Sie müssen sich entscheiden, ob es sich lohnt, Ihre Daten für immer zu speichern! Jeder sagt, dass Festplatte billig ist, aber das ist nicht die ganze Wahrheit. Dies hängt von Ihrer Speicherlösung und Ihrer Umgebung ab.

Wenn Sie Fibre-Channel-Festplatten in einem SAN verwenden und Ihnen der Speicherplatz ausgeht, ist dies nicht mehr billig, wenn Sie aufgrund von Speicherplatzmangel in Ihrem Array ein weiteres Diskarray hinzufügen müssen.

In Ihrem Fall scheint es nicht so, als würden Sie große Datenmengen speichern, und der Speicherplatz ist möglicherweise kein Problem, aber wie relevant sind Ihre Daten in 10 Jahren?

Eine andere Sache, an die man denken sollte, ist die Gesamtleistung, nicht nur der Speicherplatz. Ich denke, es ist eine gute Idee, historische Daten in einer anderen Tabelle oder sogar in einer anderen Datenbank zu speichern. Auf diese Weise habe ich weniger Wartung usw. Ich weiß, es gibt andere Lösungen zum Archivieren historischer Daten, wie z. B. Partitionierung, aber wenn die Daten nicht regelmäßig verwendet werden, warum dann mehr Komplexität implementieren?

Ich habe in den letzten 6 Jahren in großen Datenbanken gearbeitet und die Indexierungsstrategie ist entscheidend, wenn Sie eine Tabelle mit 500 000 000 Datensätzen haben. :) Wenn Ihre Abfrage eine Indexsuche verwendet, der Index jedoch nicht alle benötigten Daten enthält, wird für jeden im Index gefundenen Datensatz eine Clustered-Index-Suche verwendet. Nehmen wir an, Sie erhalten 10% der Tabelle, und am Ende erhalten Sie 50.000 000 Clustered-Index-Lookups, und das ist überhaupt nicht billig. Es kostet Sie kein Geld, aber es kostet Sie Leistung.

/ Håkan Winther


0

Gründe, warum Sie etwas nicht löschen sollten:

  1. Vielleicht möchten Sie es später

Gründe, warum Sie etwas löschen sollten:

  1. Sie möchten sicherstellen, dass keine unbefugte Person es erneut lesen kann (z. B. eine gespeicherte Kreditkartennummer: Wenn Sie es löschen, kann ein Eindringling es nicht erhalten).
  2. Sie möchten sicherstellen, dass die Informationen nicht von Ihnen angefordert werden können (z. B. durch Anfragen nach dem Freedom of Information Act).
  3. Sie möchten die Datengröße aus Platz- oder Geschwindigkeitsgründen klein halten (eine ordnungsgemäße Indizierung und Partitionierung kann bei der Geschwindigkeitsproblematik hilfreich sein).
  4. Sie müssen es gesetzlich löschen (z. B. Datenschutzgesetze).

Es ist immer ein Kompromiss, aber die rechtlichen Auswirkungen der Aufbewahrung zu vieler Daten sind wichtig. Datenschutz und Sicherheit werden heutzutage oft übersehen. Für die tatsächliche Datenbankleistung müssen möglicherweise keine Daten gelöscht werden, es sei denn, die Datensätze sind sehr groß. Selbst eine Tabelle mit Millionen von Zeilen und Dutzenden von Spalten muss möglicherweise nicht gelöscht werden, wenn Sie sie ordnungsgemäß partitionieren und sicherstellen, dass Ihre Abfragen immer die richtigen Partitionen verwenden. Bei einem Gerichtsbeschluss oder einer FOIA-Anfrage, bei der Sie nach gespeicherten Daten gefragt werden, können nur Sie entscheiden, wie Sie sich dazu fühlen und wie sich Ihre Kunden fühlen. Ein Grund, warum ich meine Nutzung von Google Mail einschränke, ist genau dieser Grund: Meine Daten werden in den USA gespeichert (ich bin in Kanada) und US-Agenturen können möglicherweise sogar auf meine gelöschten E-Mails zugreifen.

Beachten Sie auch, dass die Datenschutz-, Sicherheits- und FOIA-Gesetze von Land zu Land unterschiedlich sind. Sie müssen diese Gesetze in jedem Land kennen, in dem Sie tätig sind. Vielleicht, wenn sich Ihre Server alle in einem Land befinden, was die Reichweite ausländischer Gesetze einschränkt, aber vielleicht nicht. Wenden Sie sich an einen Anwalt, wenn Ihre Daten sensibel sind.


0

Die Frage, die Sie sich wirklich stellen müssen, lautet: Sind die Kosten für die Aufbewahrung der Daten (erhöhte Speicherkosten, Haftung für die Aufbewahrung von Daten, die gelöscht werden können) billiger als die Kosten für das Löschen der Daten (Arbeitsstunden für das Schreiben der Löschabfrage)? Haftung für das Löschen von Daten, die aufbewahrt werden müssen, und die Möglichkeit von Ausfallzeiten oder Leistungseinbußen aufgrund der Ausführung der Löschabfrage)? Was auch immer billiger ist, machen Sie mit.


1
"Die Frage, die du dir wirklich stellen musst, ist" ... fühlst du dich glücklich, Punk? Na ja?
Chris

0

Ein Fall, in dem ich die Offline-Archivierung und / oder das Löschen von Daten sehen kann, ist, wenn Sie eine OLAP-Abfrage ausführen, um Daten zusammenzufassen und in einer Übersichtstabelle zu speichern.

Monatliche Website-Statistiken sind ein gutes Beispiel dafür. Sobald Sie eine Reihe von Seitenaufrufen für Juni 2009 generiert haben, wird sich dies nie mehr ändern. Und es ist schneller, alle Seitenaufrufe aus der Übersichtstabelle hinzuzufügen und dann die Tabelle zu scannen, die die Online-Transaktionen des aktuellen Monats enthält, als Protokolle im Wert von einem ganzen Jahr zu scannen und einen vollständigen Online-Bericht zu erstellen .

Wenn ich es wäre, würde ich sicher die Online-Tabelle nach 'Juni 2009' kopieren, die Zusammenfassungsabfrage ausführen und die Daten in der Übersichtstabelle speichern und dann die kopierte Online-Tabelle archivieren, bevor ich alle Einträge aus dem lösche Original Online-Tisch. Aber ich bin auch etwas paranoid!

Im Allgemeinen ist es überall dort, wo es effizienter ist, mit OLAP eine Zusammenfassung für Daten zu erstellen, die von diesem Zeitpunkt an statisch sind, möglich, alte Daten zu archivieren / löschen. Andernfalls verwende ich ein Löschkennzeichnungssystem, um zu vermeiden, dass die relationale Integrität mit meinen normalerweise umfangreichen Aktivitätsprotokollierungssystemen beeinträchtigt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.