Quale piattaforma per un grande database matematico basato su record?


11

Ciao, sono un ingegnere civile con una certa esperienza di programmazione, ma non ho familiarità con la vasta gamma di opzioni disponibili oggi. Spero che tu possa darmi qualche suggerimento il modo migliore per procedere.

Voglio creare e interrogare un database di misure di rilevamento a livello del suolo in un formato a griglia. Ci saranno molte misurazioni per ogni posizione della griglia in vari momenti durante il lavoro di movimento terra, quindi c'è una quarta dimensione del tempo.

Molto probabilmente le osservazioni verranno lette da un file di testo. In ogni record ci sarà una posizione della griglia (2 x numeri interi) (riga e colonna) un livello del suolo (in virgola mobile) e vari codici di informazioni sulla stringa (forse fino a 30 caratteri in totale).

Le griglie potrebbero essere circa 10000 righe x 10000 colonne. Non tutte le posizioni sulla griglia avrebbero un record in ogni sondaggio, ma in genere avrebbero un massimo di cento record. Molte posizioni della griglia non avrebbero alcun record (il sito non sarà perfettamente rettangolare).

Voglio cercare i record, estrarre i dati ed eseguire calcoli, ad esempio calcolare il livello del suolo più basso o più alto per ogni posizione della griglia. Sono abbastanza sicuro che avrei la possibilità di programmarlo abbastanza semplicemente in una lingua come FORTRAN, BASIC o C usando array. Molti elementi dell'array sarebbero vuoti e suppongo che questo non sia il modo giusto per farlo e che grandi database come questo necessitano di strumenti speciali che dovrò imparare come usare.

Sto pensando a possibili opzioni per la piattaforma -

  1. Utilizzare un programma di database. Non ho familiarità con quanto possono essere potenti, ma immagino che avrebbero un sacco di sovraccarico con la GUI.

  2. Usa SQL? Questo non lo so molto ma sembra essere la lingua per i database. Ho sempre usato linguaggi imperativi piuttosto che dichiarativi e, come ho capito da Wikipedia, che SQL è dichiarativo, sono un po 'nervoso per il cambiamento. Non capisco perfettamente il processo per usarlo. Esiste un compilatore che crea programmi console? Il database è archiviato su disco? Ci scusiamo per domande così stupide.

  3. Utilizzare un'API come c-treeACE? Penso che questo potrebbe essere il modo migliore per offrirmi la familiarità di un linguaggio "fai questo, poi fallo" (sfortunatamente questo è il modo in cui penso come ingegnere!). Ma spero che la memoria dietro le quinte e la gestione dell'elaborazione offerte dall'API siano superiori a ciò che potrei ottenere con enormi array.

  4. O potrei farlo con un linguaggio orientato agli oggetti e lasciare che il computer si preoccupi dei requisiti di archiviazione. ad es. se memorizzassi i record come oggetti con metodi e proprietà che mi aiuterebbero a ottenere i risultati di cui ho bisogno da ogni record - sarebbe un enorme programma gonfio rispetto a 3)

Probabilmente ci saranno centinaia di milioni di record e voglio essere in grado di interrogarli ed elaborarli in pochi minuti, non ore (preferibilmente secondi!) Su un PC moderno con Windows. Per essere più specifici, il mio è un processore i7 con RAM da 6 GB e SSD da 120 GB con Windows 7 a 64 bit.

Spero che qualcuno abbia il tempo di condividere un paio di parole di saggezza con un principiante.


Se puoi essere online tra l'1 e le 5 del pomeriggio (o anche dopo, sarebbe fantastico) ci piacerebbe averti in chat per aiutarti in questo. chat.stackexchange.com/rooms/179/the-heap (potrebbero esserci degli amici amici prima di quel momento ovviamente). Ho alcuni pensieri specifici come i sistemi di informazione geografica potrebbero essere in grado di aiutare.
jcolebrand

Risposte:


9

Esistono diverse opzioni e, per favore, non limitarti alla mia risposta qui. In particolare, potresti trovare utili database nativi di array. La mia risposta sarà specificamente sulle vostre domande su database basati su SQL.

Mi sembra che questa sia una questione di informazioni geospaziali. I database basati su SQL sono infatti utilizzati abbastanza bene in tali campi, ma questo è anche un campo specialistico all'interno dei database.

Tra i database SQL in quest'area, PostgreSQL, con il componente aggiuntivo PostGIS, è considerato uno dei migliori. Se fossi in te, è qui che inizierei. Il vantaggio principale di SQL è che mantiene la flessibilità lungo la strada per quanto riguarda il riutilizzo dei dati per usi a cui non hai ancora pensato. Fare questo con un buon supporto geospaziale significa che puoi calcolare la distanza su una vasta area senza preoccuparti delle specifiche del trigono sferico.

Naturalmente questo diventa solo un fattore con griglie molto grandi. Per griglie più piccole, in cui la curvatura della terra può essere ignorata, PostgreSQL ha anche una gamma di tipi geometrici che includono punti su un sistema di coordinate che può essere utilizzato. Lo menziono perché non è chiaro quanto sia grande il rilevamento di un'area e se si possa assumere o meno la geometria del piano.

Anche così PostGIS può comunque semplificare le cose consentendo rappresentazioni e calcoli su sistemi di coordinate geometriche tridimensionali e tridimensionali.

Nota inoltre che dici che i tuoi siti non sono necessariamente quadrati. In PostgreSQL una cosa che puoi fare (usando i tipi geometrici o PostGIS) è definire un confine non rettangolare per ogni sito in modo da poter verificare che un punto sia all'interno dei limiti del sito prima di salvare la misurazione.

Impatti linguistici dichiarativi

Questa preoccupazione penso sia esagerata. Le persone possono scrivere query SQL come se facessero parte del linguaggio imperativo del programma da cui le stanno chiamando. Per la maggior parte delle tue domande non importa.

Ciò che le persone intendono con un linguaggio dichiarativo è che all'interno di una query, la struttura dice al database quali informazioni desiderate, non come ottenerle. Questo è importante quando si desidera ottenere informazioni complesse dal database perché in pratica significa che se si può porre la domanda giusta (e i dati sono validi) si otterrà la risposta giusta.

La grande differenza che si presenta tuttavia è che le query SQL lunghe sono più facili da eseguire il debug rispetto alle subroutine imperative lunghe, semplicemente perché si può restringere più rapidamente il punto in cui si verifica il malfunzionamento.

Come funzionerebbe

È probabile che se percorri questa strada avresti un database e un programma scritti in una lingua a tua scelta. Il programma invierà query al database e otterrà le risposte. Puoi anche (in PostgreSQL e molti altri DB relazionali) inserire le tue query all'interno di funzioni che possono quindi essere richiamate dall'applicazione, fornendo più di un'interfaccia imperativa o funzionale. I dati verrebbero archiviati su disco e accessibili da un software separato rispetto al programma. È inoltre possibile connettersi con un altro programma (da MS Access a pgAdmin) ed eseguire query o generare report.

In sostanza, puoi considerare RDBMS come un "motore matematico" che gestisce i tuoi dati e il tuo programma interagisce con esso per fare ciò di cui hai bisogno.


1
scusa per la risposta in ritardo Sono stato molto impegnato. Apprezzo molto il tuo consiglio dettagliato. Sto iniziando con SQL, imparando con il libro O'Reilly e ho appena scaricato mySQl come raccomandato dal libro. Esaminerò l'uso dell'estensione GIS postgreSQL e forse accederò a SQL da C # in un secondo momento. Grazie ancora, tornerò!
user19109,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.