Hallo, ich bin ein Bauingenieur mit etwas Erfahrung in der Programmierung, aber ich bin nicht mit der großen Auswahl an Optionen vertraut, die heute verfügbar sind. Ich hoffe, Sie konnten mir Hinweise geben, wie ich am besten vorgehen kann.
Ich möchte eine Datenbank mit Messungen der Bodenvermessung in einem Rasterformat erstellen und abfragen. Während des Erdbewegungsvorgangs werden für jeden Gitterstandort zu verschiedenen Zeiten viele Messungen durchgeführt, sodass eine vierte Zeitdimension vorliegt.
Die Beobachtungen werden höchstwahrscheinlich aus einer Textdatei eingelesen. In jedem Datensatz gibt es eine (2 x Ganzzahl) Gitterposition (Zeile und Spalte), eine (Gleitkomma-) Bodenebene und verschiedene Zeichenfolgeninformationscodes (möglicherweise bis zu 30 Zeichen insgesamt).
Die Gitter können ungefähr 10000 Zeilen x 10000 Spalten sein. Nicht jeder Ort im Raster würde in jeder Umfrage einen Datensatz haben, aber normalerweise würden sie bis zu hundert Datensätze haben. Viele der Rasterstandorte hätten überhaupt keine Datensätze (der Standort ist nicht perfekt rechteckig).
Ich möchte die Datensätze durchsuchen, Daten extrahieren und Berechnungen durchführen, z. B. das niedrigste oder höchste Bodenniveau für jeden Gitterstandort berechnen. Ich bin ziemlich sicher, dass ich dies ziemlich einfach in einer Sprache wie FORTRAN, BASIC oder C mithilfe von Arrays programmieren kann. Viele der Array-Elemente wären jedoch leer, und ich vermute, dass dies nicht der richtige Weg ist, und große Datenbanken wie diese benötigen spezielle Tools, die ich lernen muss, wie man sie verwendet.
Ich denke über mögliche Optionen für die Plattform nach -
Verwenden Sie ein Datenbankprogramm. Ich weiß nicht, wie leistungsfähig diese sein können, aber ich kann mir vorstellen, dass sie mit der grafischen Benutzeroberfläche viel Aufwand verursachen würden.
SQL verwenden? Ich weiß nicht viel darüber, aber es scheint die Sprache für Datenbanken zu sein. Ich habe immer imperative Sprachen anstatt deklarativ verwendet und da ich aus Wikipedia verstehe, dass SQL deklarativ ist, bin ich etwas nervös wegen der Änderung. Ich verstehe den Prozess für die Verwendung nicht vollständig. Gibt es einen Compiler, der Konsolenprogramme erstellt? Ist die Datenbank auf der Festplatte gespeichert? Entschuldigung für solche dummen Fragen.
Verwenden Sie eine API wie c-treeACE? Ich denke, dies könnte der richtige Weg sein, um mir die Vertrautheit einer "Mach das, dann mach das" -Sprache anzubieten (leider denke ich als Ingenieur so!). Ich hoffe jedoch, dass das von der API angebotene Speicher- und Verarbeitungsmanagement hinter den Kulissen dem überlegen ist, was ich mit riesigen Arrays erreichen kann.
Oder könnte ich es mit einer objektorientierten Sprache machen und den Computer über die Speicheranforderungen nachdenken lassen? zB wenn ich die Datensätze als Objekte mit Methoden und Eigenschaften speichern würde, die mir helfen würden, die Ergebnisse zu erzielen, die ich aus jedem Datensatz benötige - wäre es ein riesiges aufgeblähtes Programm im Vergleich zu 3)
Es gibt wahrscheinlich Hunderte Millionen Datensätze, und ich möchte sie in Minuten und nicht Stunden (vorzugsweise Sekunden!) Auf einem modernen PC mit Windows abfragen und verarbeiten können. Genauer gesagt handelt es sich bei mir um einen i7-Prozessor mit 6 GB RAM und 120 GB SSD unter Windows 7 64-Bit.
Hoffe, jemand hat Zeit, ein paar Worte der Weisheit mit einem Neuling zu teilen.
quelle
Antworten:
Es gibt eine Reihe von Optionen und bitte beschränken Sie sich hier nicht auf meine Antwort. Insbesondere können Array-native Datenbanken hilfreich sein. Meine Antwort bezieht sich speziell auf Ihre Fragen zu SQL-basierten Datenbanken.
Es klingt für mich so, als wäre dies eine Frage der Geoinformation. SQL-basierte Datenbanken werden in solchen Bereichen zwar recht gut verwendet, dies ist jedoch auch ein Spezialgebiet innerhalb von Datenbanken.
Unter den SQL-Datenbanken in diesem Bereich gilt PostgreSQL mit dem PostGIS-Add-On als eine der besten. Wenn ich du wäre, würde ich hier anfangen. Der Hauptvorteil von SQL besteht darin, dass die Flexibilität bei der Wiederverwendung Ihrer Daten für Anwendungen erhalten bleibt, an die Sie noch nicht gedacht haben. Wenn Sie dies mit einer guten räumlichen Unterstützung tun, können Sie die Entfernung über ein großes Gebiet berechnen, ohne sich um die Besonderheiten des sphärischen Triggers kümmern zu müssen.
Dies wird natürlich nur bei sehr großen Gittern zum Faktor. Für kleinere Gitter, bei denen die Erdkrümmung nicht berücksichtigt werden kann, verfügt PostgreSQL auch über eine Reihe von geometrischen Typen, einschließlich Punkten auf einem Koordinatensystem, die verwendet werden können. Ich erwähne dies, weil nicht klar ist, wie groß ein Bereich ist, der vermessen wird, und ob man eine ebene Geometrie annehmen kann oder nicht.
Trotzdem kann PostGIS die Dinge noch vereinfachen, indem es Darstellungen und Berechnungen auf 3- und 4-dimensionalen geometrischen Koordinatensystemen ermöglicht.
Beachten Sie auch, dass Sie sagen, dass Ihre Websites nicht unbedingt quadratisch sind. In PostgreSQL können Sie (entweder mithilfe der geometrischen Typen oder von PostGIS) eine nicht rechteckige Grenze für jede Site definieren, damit Sie überprüfen können, ob sich ein Punkt innerhalb der Grenzen der Site befindet, bevor Sie die Messung speichern.
Auswirkungen auf die deklarative Sprache
Diese Sorge ist meiner Meinung nach übertrieben. Benutzer können und schreiben SQL-Abfragen, als wären sie Teil der imperativen Sprache des Programms, aus dem sie sie aufrufen. Für die meisten Ihrer Fragen spielt es keine Rolle.
Was Menschen unter einer deklarativen Sprache verstehen, ist, dass die Struktur innerhalb einer Abfrage der Datenbank mitteilt, welche Informationen Sie möchten und nicht, wie sie abgerufen werden sollen. Dies ist wichtig, wenn Sie komplexe Informationen aus der Datenbank benötigen, da dies im Grunde bedeutet, dass Sie die richtige Antwort erhalten, wenn Sie die richtige Frage stellen können (und Ihre Daten gültig sind).
Der große Unterschied besteht jedoch darin, dass lange SQL-Abfragen einfacher zu debuggen sind als lange zwingende Unterprogramme, einfach weil man schneller eingrenzen kann, wo in der Abfrage die Fehlfunktion auftritt.
Wie das funktionieren würde
Wenn Sie diesen Weg gehen, haben Sie wahrscheinlich eine Datenbank und ein Programm in einer Sprache Ihrer Wahl. Das Programm würde Anfragen an die Datenbank senden und die Antworten zurückerhalten. Sie können Ihre Abfragen auch (in PostgreSQL und vielen anderen relationalen DBs) in Funktionen einfügen, die dann von der Anwendung aufgerufen werden können, wodurch eine zwingende oder funktionale Schnittstelle entsteht. Die Daten werden auf der Festplatte gespeichert und über eine andere Software als Ihr Programm abgerufen. Sie können sich auch mit einem anderen Programm (von MS Access bis pgAdmin) verbinden und Abfragen ausführen oder Berichte erstellen.
Im Wesentlichen können Sie sich das RDBMS als eine "mathematische Engine" vorstellen, die Ihre Daten verwaltet und mit der Ihr Programm interagiert, um das zu tun, was Sie benötigen.
quelle