Jaka platforma dla dużej matematycznej bazy danych opartej na rekordach?

11

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 -

  1. Użyj programu bazy danych. Nie wiem, jak potężne mogą być, ale wyobrażam sobie, że miałyby dużo narzut z GUI.

  2. 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.

  3. 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.

  4. 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.

użytkownik19109
źródło
Jeśli możesz być online w godzinach od 1 do 5 po południu (lub nawet później, byłoby świetnie), chcielibyśmy mieć cię na czacie, aby Ci w tym pomóc. chat.stackexchange.com/rooms/179/the-heap (oczywiście przed tym czasem mogą być jeszcze inni Brytyjczycy). Mam pewne konkretne przemyślenia, takie jak Geographic Information Systems, które mogą pomóc.
jcolebrand

Odpowiedzi:

9

Istnieje wiele opcji i nie ograniczaj się do mojej odpowiedzi tutaj. W szczególności pomocne mogą być natywne macierze. Moja odpowiedź dotyczy w szczególności twoich pytań dotyczących baz danych opartych na SQL.

Wydaje mi się, że to kwestia informacji geoprzestrzennych. Bazy danych oparte na SQL są w rzeczywistości dość dobrze wykorzystywane w takich polach, ale jest to również dziedzina specjalistyczna w zakresie baz danych.

Wśród baz danych SQL w tym obszarze PostgreSQL z dodatkiem PostGIS jest uważany za jeden z najlepszych. Gdybym był tobą, od tego bym zaczął. Podstawową zaletą SQL jest to, że zachowuje elastyczność w zakresie ponownego wykorzystywania danych do zastosowań, o których jeszcze nie pomyślałeś. Robienie tego przy dobrym wsparciu geoprzestrzennym oznacza, że ​​możesz obliczyć odległość na dużym obszarze, nie martwiąc się o specyfikę wyzwalania sferycznego.

Oczywiście staje się to czynnikiem tylko przy bardzo dużych siatkach. W przypadku mniejszych siatek, w których krzywiznę ziemi można pominąć, PostgreSQL ma również szereg typów geometrycznych, w tym punkty w układzie współrzędnych, których można użyć. Wspominam o tym, ponieważ nie jest jasne, jak duży obszar jest badany i czy można założyć geometrię płaszczyzny, czy nie.

Mimo to PostGIS może nadal upraszczać rzeczy, umożliwiając reprezentacje i obliczenia na 3- i 4-wymiarowych geometrycznych układach współrzędnych.

Pamiętaj też, że twierdzisz, że Twoje witryny niekoniecznie są kwadratowe. W PostgreSQL jedną rzeczą, którą możesz zrobić (używając typów geometrycznych lub PostGIS), jest zdefiniowanie nieprostokątnej granicy dla każdej strony, dzięki czemu możesz sprawdzić, czy punkt znajduje się w granicach strony przed zapisaniem pomiaru.

Deklaratywne skutki językowe

Myślę, że ta obawa jest przesadzona. Ludzie mogą pisać zapytania SQL i robią to tak, jakby były częścią imperatywnego języka programu, z którego je wywołują. W przypadku większości zapytań nie będzie to miało znaczenia.

Co ludzie rozumieją przez język deklaratywny, to to, że w zapytaniu struktura informuje bazę danych, jakie informacje chcesz, a nie jak je zdobyć. Jest to ważne, gdy chcesz uzyskać złożone informacje z bazy danych, ponieważ w zasadzie oznacza to, że jeśli możesz zadać właściwe pytanie (a twoje dane są prawidłowe), otrzymasz właściwą odpowiedź.

Jednak duża różnica polega na tym, że długie zapytania SQL są łatwiejsze do debugowania niż długie podrzędne procedury, po prostu dlatego, że można szybciej zawęzić miejsce zapytania.

Jak to by działało

Są szanse, że jeśli pójdziesz tą drogą, będziesz mieć bazę danych i program napisany w wybranym języku. Program wysyła zapytania do bazy danych i odzyskuje odpowiedzi. Możesz także (w PostgreSQL i wielu innych relacyjnych bazach danych) umieścić zapytania w funkcjach, które następnie mogą być wywoływane przez aplikację, dając więcej imperatywnego lub funkcjonalnego interfejsu. Dane byłyby przechowywane na dysku i dostępne z oddzielnego oprogramowania niż twój program. Możesz także połączyć się z innym programem (od MS Access do pgAdmin) i uruchamiać zapytania lub generować raporty.

Zasadniczo możesz myśleć o RDBMS jako o „silniku matematycznym”, który zarządza Twoimi danymi, a Twój program współdziała z nim, aby robić to, czego potrzebujesz.

Chris Travers
źródło
1
przepraszam za spóźnioną odpowiedź. Byłem bardzo zajęty. Naprawdę doceniam twoje szczegółowe porady. Zaczynam od SQL, uczę się z książką O'Reilly i właśnie pobrałem mySQl zgodnie z zaleceniami książki. Zajmę się użyciem rozszerzenia GIS postgreSQL i być może uzyskam dostęp do SQL z C # w późniejszym terminie. Jeszcze raz dziękuję, wrócę!
user19109