Cześć Jestem inżynierem lądowym z pewnym doświadczeniem w programowaniu, ale nie znam szerokiej gamy dostępnych obecnie opcji. Mam nadzieję, że możesz dać mi wszelkie wskazówki, jak najlepiej postępować.
Chcę utworzyć bazę danych pomiarów geodezyjnych i przeszukać ją w formie siatki. Będzie wiele pomiarów dla każdej lokalizacji siatki w różnych momentach podczas robót ziemnych, więc istnieje czwarty wymiar czasu.
Obserwacje najprawdopodobniej zostaną wczytane z pliku tekstowego. W każdym rekordzie będzie znajdować się pozycja siatki (2 x liczba całkowita) (wiersz i kolumna), poziom gruntu (zmiennoprzecinkowy) i różne kody informacji o łańcuchach (może w sumie do 30 znaków).
Siatki mogą mieć około 10000 wierszy x 10000 kolumn. Nie każda lokalizacja na siatce miałaby zapis w każdej ankiecie, ale zwykle miałaby do stu zapisów. Wiele lokalizacji na siatce nie miałoby żadnych zapisów (strona nie będzie idealnie prostokątna).
Chcę przeszukać rekordy, wyodrębnić dane i wykonać obliczenia, np. Obliczyć najniższy lub najwyższy poziom gruntu dla każdej lokalizacji sieci. Jestem przekonany, że mógłbym to zaprogramować w prosty sposób w języku takim jak FORTRAN, BASIC lub C przy użyciu tablic. Wiele elementów tablicy byłoby jednak pustych i domyślam się, że nie jest to właściwy sposób, aby to zrobić, a duże bazy danych takie jak to wymagają specjalnych narzędzi, których będę musiał nauczyć się używać.
Myślę o możliwych opcjach platformy -
Użyj programu bazy danych. Nie wiem, jak potężne mogą być, ale wyobrażam sobie, że miałyby dużo narzut z GUI.
Używać SQL? O tym niewiele wiem, ale wydaje się, że jest to język baz danych. Zawsze używałem języków imperatywnych zamiast deklaratywnych i jak rozumiem z wikipedii, że SQL jest deklaratywny, jestem nieco zaniepokojony zmianą. Nie do końca rozumiem proces korzystania z niego. Czy istnieje kompilator, który tworzy programy konsoli? Czy baza danych jest przechowywana na dysku? Przepraszam za takie głupie pytania.
Używać interfejsu API, takiego jak c-treeACE? Myślę, że może to być dobry sposób na zaoferowanie mi znajomości języka „zrób to, a następnie zrób to” (niestety tak myślę jako inżynier!). Mam jednak nadzieję, że zarządzanie pamięcią i przetwarzaniem za kulisami oferowane przez API będzie lepsze niż to, co mogłem osiągnąć dzięki ogromnym tablicom.
Czy mogę to zrobić w języku zorientowanym obiektowo i pozwolić komputerowi martwić się o wymagania dotyczące pamięci. np. jeśli zapisałem rekordy jako obiekty z metodami i właściwościami, które pomogłyby mi uzyskać potrzebne wyniki z każdego rekordu - czy byłby to ogromny rozdęty program w porównaniu do 3)
Prawdopodobnie będą setki milionów rekordów i chcę mieć możliwość zapytania i przetwarzania ich w ciągu kilku minut, a nie godzin (najlepiej sekund!) Na nowoczesnym komputerze z systemem Windows. Mówiąc ściślej, moim jest procesor i7 z ramą 6 Gb i dyskiem SSD 120 Gb z systemem Windows 7 64-bit.
Mam nadzieję, że ktoś zdąży podzielić się z nowicjuszem kilkoma mądrymi słowami.