Frage

Ich brauche lange Zeichenketten in einer Datenbank zu speichern. die Zeichenfolge kann 5 oder 6 Sätze lang sein. denken Sie, das ist eine gute Design-Strategie ist. oder soll ich speichere eine ID für diese Saite und dann eine Beziehung mit einer anderen Tabelle erstellen, die den Speicherort der Datei enthält die Zeichenfolge zu speichern. könnten Sie bitte Vor- und Nachteile der beiden geben.

die Saiten wurden in der Datenbank vorverarbeitet und gespeichert. jede Änderung würde die gesamte Zeichenfolge lesen und vollständig ersetzen. so können Sie davon ausgehen, dass die Zeichenfolge unteilbar ist.

War es hilfreich?

Lösung

Es sollte in Ordnung sein die Zeichenfolge in der Datenbank zu speichern. Wenn Sie einen Dateizeiger stattdessen speichern, bedeutet, dass Sie tun Datei benötigen I / O jedes Mal, wenn die Zeichenfolge lesen möchten. Ein paar Sätze sind nicht sehr lang und man kann immer ein Langtext-Datenfeld verwenden, wenn Sie benötigen. Offensichtlich Ihre Datenbank wird ein wenig größer sein, weil Sie den Text haben, aber das ist ok. Es ist sicherlich eine bessere Alternative als mit den Dateien zu speichern.

Andere Tipps

Die Strings Sie erwähnen, sind nicht lang.

Wenn Sie refered auf „long“ Strings, ich war etwa 32kB Denken und oben - Einige Sätze sind <1 kb -. Das ist nichts heute

Ihr Trick, ein Id Speicherung macht die Dinge langsamer, da Sie einen indirekten Zugang zu machen.

Das einzige, was ich empfehlen würde, wenn die maximale Leistung benötigt wird, sollten Sie nur die Spalten auswählen, die Sie benötigen (weglassen SELECT *) - so die Textspalte auslassen, wenn sie nicht benötigt, da der Transport der Zeichenfolge vom Server zur Anwendung kostet die meiste Zeit. Es ist eine gute Praxis, keine Spalten berühren nicht erforderlich (besonders, wenn sie viele Daten enthalten könnten).

Der einzige Grund, warum ich eine separate Tabelle schaffen würde, ist, wenn diese lange Strings das gleiche für viele Datensätze sein. Ansonsten ist es nur eine zusätzliche Komplikation, die nicht wahrscheinlich ist, jede Amortisation bieten.

Fünf oder sechs Sätze ist nichts zu einem modernen DBMS! Lagern Sie den Text direkt in der Datenbank.

(Die andere Technik, die Sie erwähnt - eine ref an einen anderen Tisch zu speichern, die sich einen ref auf eine externe Datei hat den Text halten -. Wäre viel mehr umständlich zu bedienen und haben viel schlechtere Leistung)

Die Antwort hängt wirklich von der Lautstärke von Strings Sie speichern wollen, und welche DB Sie beabsichtigen, es zu speichern, zu verwenden. Wenn Sie nicht viele Strings zu speichern sind, möchten Sie vielleicht zu prüfen, sie in einer XML-oder Ressource-Datei zu speichern und laden, die in Ihre Anwendung nach vorne. Wenn Sie jedoch viele String-Daten haben, werden Sie wahrscheinlich besser dran memorywise sein, um die Zeichenfolge zu lesen, wie und wann Sie es brauchen, anstatt die Chance nehmen einen String in den Speicher zu lesen, dass Sie nicht am Ende mit.

Die Datenbank selbst hat kein wirkliches Problem mit langen Strings zu speichern. Einige Einschränkungen gelten (wie die 8k Rekord Größenbeschränkung für SQL Server), aber selbst dann könnte man Text beliebiger Länge in einer Datenbank speichern, da alle richtig diejenigen BLOB / TEXT-Datentypen mit praktisch keine Obergrenze unterstützen.

Fünf bis sechs Sätze sind nicht wirklich lang. Wenn sie zusammengehören und sollen als Ganzes abgerufen und manipuliert werden, können Sie voran gehen und speichern sie in einem CHAR-Datentyp Feld geeigneter Dimensionen.

Die Frage, ob sie trennen und eine ID befestigen sie profitiert direkt von diesem Ansatz nur, wenn Ihre Anwendung / Datenmodell entstehen, das heißt in Wirklichkeit sie verschiedene Dinge sind. In Ihrem Fall scheint es kein Grund, diesen Weg zu gehen.

Jeder hat Leistung erwähnt, aber niemand hat den anderen wichtigen Grund, warum angehobene Zeiger auf OS-Dateien ist eine schlechte Idee zu speichern: Backup und Recovery. Wenn alles in der Datenbank ist, dann haben wir einen einzigen Mechanismus zur Sicherung der Daten und einen einzigen Mechanismus für die Wiederherstellung auf. Während mit Dateien auf dem O haben wir zwei verschiedene Sicherungsmechanismen, wahrscheinlich an zwei verschiedenen Körnungen und Wiederherstellung wird ein Synchronisations Alptraum.

Es gibt einige Fälle, in denen dies nicht, wie Data Warehouse gilt, die sehr selten Transaktionen und kann ohne Redo oder Transaktionsprotokolle so überleben.

Außer in besonderen Fällen würde ich das Feld verlassen, wo es ist.

Die einzige andere Möglichkeit wäre es, die Saiten in einen anderen Tisch zu legen (die tatsächlichen Saiten dort setzen) ... sie in separaten Dateien setzen Ihre Leistung töten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top