3

Ich interessiere mich für Datenbank Refactoring. Ich beschäftige mich mit mehreren Datenbanken, die keine großen Datenmengen haben, nur ein paar GB mit höchstens ein paar hunderttausend Zeilen. Sie haben jedoch Hunderte - manchmal Hunderte - von Tabellen, Ansichten, Sprocs und Funktionen. An einigen Stellen wurde eine Strategie der Aufteilung und Regel implementiert, die Schemata verwendet, die einige Probleme beim Erkennen des Besitzes/der Verwendung von Tabellen unterstützt hat. Es hat jedoch nicht wirklich zur Objektkopplung beigetragen.Wie viele Tabellen/Sprocs/Funktionen in einer Datenbank sind zu viele?

Wir alle lesen, dass integration via shared database ist keine gute Sache, aber wir wissen auch, dass es, zumindest für eine Weile, eine sehr produktive Sache ist, wie alles in der Datenbank ist. Wir wenden die Single Responsibility Principle nicht nur auf Datenbanken an, wie wir es bei Objekten tun.

Bearbeiten: Ich sollte hinzufügen, dass ich keine Datenbankleistungsprobleme habe. Die Tische sind nicht groß, der größte hat nur ein paar hunderttausend Reihen. Es gibt kein wirkliches Datenbankleistungsproblem. außer wenn das Schema/die Logik/Implementierung der Datenbank grotesk ineffizient ist (das heißt, dass ein Cursor eine Sproc-Ausführung für jede Zeile in einer Ergebnismenge ausführen muss, um Daten für einen Bericht vorzuverarbeiten). Bevor Sie sagen, dass ich diese ändern sollte, ist das der springende Punkt: Ich kann das nicht, weil die Datenbank nicht mehr in einem Zustand ist, in dem die Auswirkungen von Änderungen bewertet werden können.

Klar irgendwann sagen Sie "Genug!" und in mehrere Datenbanken teilen, die durch Nachrichten, ETL, Anwendungsebenen usw. verbunden sind.

Die Frage ist: Wie viele sind zu viele? Was ist die absolute Obergrenze für die Anzahl der Sprocs/Tabellen/Funktionen, die Sie haben können, bevor Sie verrückt werden?

Antwort

0

Ich bin mir nicht sicher, es gibt eine magische Grenze für eines der Dinge, die Sie erwähnt haben. Ich ziehe es vor, die Dinge an einem Ort zu behalten, so dass ich nicht daran denken muss, dass einige Aufzeichnungen vorhanden sind und andere Aufzeichnungen in einer anderen sind.

Ich wäre mehr interessiert zu wissen, ob all diese Arbeit Ihre Leistung beeinträchtigt? Und wenn nicht, warum dann ändern? Wenn die Leistung nicht auf schreckliche Art und Weise beeinträchtigt wird, werden Ihre Kunden keinen Nutzen aus Ihrer Arbeit ziehen, und worauf kommt es dann an?

Ihre Kunden könnten besser bedient werden, wenn Sie nur eine neue Maschine gekauft oder Ihre Datenbankserver-Software aktualisiert haben.

+0

Ich habe keine Performance-Problem in der Datenbank Begriffe haben. Das einzige Problem, dem ich gegenüberstehe, sind technische Schulden. Die Datenbank ist nicht nur komplex, sondern undurchsichtig mit vielen Feldern, die nicht länger relevant sind. –

1

Erstens, hör auf, Datenbanken in objektorientierten Begriffen zu denken. Prinzipien der objektorientierten Programmierung gelten einfach nicht für relationale Datenbanken.

Gemeinsame Datenbanken sind eine sehr gute Sache aus einer geschäftlichen Perspektive. Mehrere Datenbanken, die Informationen speichern, die zwischen ihnen übertragen werden müssen, werden schnell komplexer als Ihre vielen hundert Objekte. Daten, die zwischen Unternehmensanwendungen konsistent sind, sind unbezahlbar. Der Versuch, die Übereinstimmung von GE Corp und General Electric Corporation zwischen zwei Datenbanken auszugleichen, kann ein Albtraum sein.

Das Refactoring von Datenbanken ist ein nettes Ziel, aber es ist in Wirklichkeit sehr komplex. Tun Sie es nicht, es sei denn, Sie haben ein schwerwiegendes Leistungsproblem, das behoben werden muss, oder Sie sind bereit, sich zu einem Prozess des Identifizierens des gesamten Codes zu verpflichten, der von einer Änderung betroffen sein könnte. Denken Sie auch dann darüber nach, ob Sie den gesamten Code kennen, der sich ändern könnte (dies ist ein Grund, warum Datenbank-Menschen Hass, Hass und Hass auf dynamischen Code hassen!).

Oft ist der beste Weg zum Refactor darin, die Änderung hinzuzufügen und mit der Umstellung auf das neue Feld sp usw. zu beginnen, während das alte bis zu einem bestimmten Ablaufdatum beibehalten wird. Da Sie sich in einem jährlichen Zyklus befinden, müssen Sie diese Daten über einen langen Zeitraum verwalten.Um festzustellen, ob sps verwendet werden, können Sie diejenigen identifizieren, bei denen Sie sich nicht sicher sind, und ihnen Code hinzufügen, um sie bei jeder Ausführung in eine Tabelle einzufügen. Wenn sie nach dem ganzen Jahr nicht ausgeführt wurden, können Sie sie sicher eliminieren. Der Zyklus kann je nach Sp kürzer sein.

Wenn ich etwas schreibe, das nur jährlich ausgeführt wird, würde ich normalerweise das Wort jährlich in den SP-Namen setzen. Aber das mag nicht wahr sein, wo Sie sind, aber die Funktion des SP sollte Ihnen eine Idee geben, wenn es etwas ist, das nur periodisch ausgeführt werden sollte. Ich würde nicht erwarten, dass usp_send email proc nur einmal im Jahr läuft, aber ich könnte erwarten, dass ein usp_attendance_report nicht oft ausgeführt wird. Natürlich, wie ich schon sagte, ich hätte es eher usp_annual_attendance_report genannt, und Sie können darüber nachdenken, solche Dinge zu tun.

Aber beachten Sie, dass Refactoring, das Sie tun, in einem langen Zyklus stattfinden muss, um sicherzustellen, dass Sie nicht etwas löschen, das Sie brauchen. Wenn sich Ihr Code in einem Quellcodeverwaltungssystem befindet (und alle Datenbanktabellen, SPs, Views, UDFs, Trigger usw.), können Sie wahrscheinlich einige Dinge eliminieren, die wissen, dass Sie sie im Falle eines Fehlers schnell wieder zurücklegen können. Auch hier würde ich das Objekt untersuchen, um das mögliche Risiko zu ermitteln, das sie beseitigen würden.

Natürlich, wenn Sie gute automatisierte Tests an Ort und Stelle haben, können Sie etwas auf dem Entwickler entfernen und die Tests ausführen, um herauszufinden, ob noch auf etwas verwiesen wird.

Wenn Sie nach einer einfachen Möglichkeit zum Refactor suchen, kenne ich keine. Refactoring-Datenbanken sind eine zeitraubende, riskante Aktivität und eine, die nicht genug Verbesserung für die Mächte zeigt, die bereit sein werden, dafür zu bezahlen.

Ein gutes Buch auf Refactoring Datenbanken ist: http://www.amazon.com/Refactoring-Databases-Evolutionary-Addison-Wesley-Signature/dp/0321293533

+0

Ich weiß, ich habe das Buch über Datenbank Refactoring gelesen. Ich suchte nach einer Anleitung, welche Art von Schmerz in Produktionsdatenbanken typisch ist. Ich habe nur ein paar gesehen und sie scheinen alle schmerzhaft zu sein. Ich habe mich nur gefragt, wie schmerzhaft zu schmerzhaft ist. –

+0

Normalerweise ist es ziemlich schmerzhaft. Wenn Sie jedoch gut organisiert sind und sorgfältig arbeiten, Schritt für Schritt und Ihr gesamter Datenzugriff durch gespeicherte Prozeduren und nicht durch dynamische Abfragen gesteuert wird, ist dies machbar. Ich verstehe, dass der ORM-Zugriff ebenfalls machbar ist, aber keine Erfahrung damit hat. Ein Schlüssel ist es, alles leicht rückgängig zu machen, wenn es nötig ist, und einen Test zu testen. Es gibt auch keinen Ersatz, um Ihre Datenbank wirklich gut kennenzulernen. Beginnen Sie klein mit ein paar Dingen, von denen Sie sicher sind, dass sie nicht kritisch sind, und verwenden Sie diese, um Ihr System für das Refactoring an Ort und Stelle zu bringen. Dann mach die größten Problemzonen. – HLGEM