Какая платформа для большой математической базы данных?


11

Привет, я инженер-строитель с некоторым опытом программирования, но я не знаком с широким спектром доступных сегодня опций. Надеюсь, вы могли бы дать мне какие-либо указатели лучший способ продолжить.

Я хочу создать и запросить базу данных измерений уровня земли в виде сетки. Во время земляных работ будет много измерений для каждого местоположения сетки в разное время, поэтому существует 4-е измерение времени.

Наблюдения, скорее всего, будут считаны из текстового файла. В каждой записи будет (2 x целое) положение сетки (строка и столбец), уровень земли (с плавающей запятой) и различные строковые информационные коды (всего может быть до 30 символов).

Сетки могут быть около 10000 строк х 10000 столбцов. Не каждое место в сетке будет иметь записи в каждом опросе, но обычно они имеют до ста записей. Во многих местах сетки не будет записей вообще (сайт не будет идеально прямоугольным).

Я хочу искать записи, извлекать данные и делать расчеты, например, рассчитать самый низкий или самый высокий уровень земли для каждого местоположения сетки. Я вполне уверен, что у меня будет возможность довольно просто программировать это на таких языках, как FORTRAN, BASIC или C, используя массивы. Хотя многие элементы массива были бы пустыми, и я предполагаю, что это неправильный способ сделать это, и большие базы данных, подобные этой, нуждаются в специальных инструментах, которые мне придется изучить, как их использовать.

Я думаю о возможных вариантах для платформы -

  1. Используйте программу базы данных. Я не знаю, насколько мощными они могут быть, но я думаю, что они будут иметь много накладных расходов с GUI.

  2. Использовать SQL? Об этом я немного знаю, но, похоже, это язык для баз данных. Я всегда использовал императивные языки, а не декларативные, и, как я понимаю из википедии, SQL является декларативным, я немного нервничаю из-за изменений. Я не совсем понимаю процесс его использования. Есть ли компилятор, который делает консольные программы? База данных хранится на диске? Извините за такие глупые вопросы.

  3. Использовать такой API, как c-treeACE? Я думаю, что это может быть способ предложить мне знакомство с языком «сделай это, затем сделай это» (к сожалению, я так думаю, как инженер!). Но я надеюсь, что негласное управление памятью и обработкой, предлагаемое API, будет превосходить то, что я мог бы достичь с огромными массивами.

  4. Или я могу сделать это на объектно-ориентированном языке и позволить компьютеру беспокоиться о требованиях к хранилищу. например, если бы я хранил записи как объекты с методами и свойствами, которые помогли бы мне получить нужные мне результаты из каждой записи - была бы это огромная раздутая программа по сравнению с 3)

Вероятно, будут сотни миллионов записей, и я хочу иметь возможность запрашивать и обрабатывать их за считанные минуты, а не часы (предпочтительно секунды!) На современном ПК с Windows. Если быть более точным, у меня есть процессор i7 с оперативной памятью 6 ГБ и твердотельный накопитель на 120 ГБ, работающий под управлением Windows 7 64 бит.

Надеюсь, у кого-то есть время, чтобы поделиться несколькими словами мудрости с новичком.


Если вы можете быть в сети где-то между 1 и 5 днем ​​(или даже позже, было бы здорово), мы будем рады пригласить вас в чат, чтобы помочь вам в этом. chat.stackexchange.com/rooms/179/the-heap (до этого времени, конечно, могут быть и некоторые другие британцы). У меня есть некоторые конкретные мысли, такие как географические информационные системы, которые могут помочь.
Jcolebrand

Ответы:


9

Есть несколько вариантов, и, пожалуйста, не ограничивайтесь моим ответом здесь. В частности, вам могут пригодиться базы данных с массивами. Мой ответ будет конкретно о ваших вопросах по базам данных на основе SQL.

Мне кажется, что это вопрос геопространственной информации. Базы данных на основе SQL на самом деле довольно хорошо используются в таких областях, но это также специальная область в базах данных.

Среди баз данных SQL в этой области PostgreSQL с надстройкой PostGIS считается одной из лучших. На твоем месте я бы начал. Основным преимуществом SQL является то, что он сохраняет гибкость в отношении повторного использования ваших данных для целей, о которых вы еще не думали. Выполнение этого при хорошей гео-пространственной поддержке означает, что вы можете рассчитать расстояние на большой площади, не беспокоясь о специфике сферического триггера.

Конечно, это становится фактором только с очень большими сетками. Для меньших сеток, где можно не принимать во внимание искривление земли, PostgreSQL также имеет ряд геометрических типов, включая точки в системе координат, которые можно использовать. Я упоминаю об этом, потому что неясно, насколько велика площадь исследуемой области и можно ли принять плоскую геометрию или нет.

Даже в этом случае PostGIS может все еще упростить вещи, позволяя представления и вычисления в 3- и 4-мерных геометрических системах координат.

Также обратите внимание, что вы говорите, что ваши сайты не обязательно квадратные. В PostgreSQL вы можете сделать одну вещь (используя геометрические типы или PostGIS) - определить непрямоугольную границу для каждого сайта, чтобы вы могли убедиться, что точка находится внутри границ сайта перед сохранением измерения.

Декларативные языковые воздействия

Эта проблема, я думаю, преувеличена. Люди могут и действительно пишут SQL-запросы, как если бы они были частью императивного языка программы, из которой они их вызывают. Для большинства ваших запросов это не имеет значения.

Под декларативным языком люди понимают, что в запросе структура сообщает базе данных, какую информацию вы хотите, а не как ее получить. Это важно, когда вам нужна сложная информация из базы данных, потому что в основном это означает, что если вы сможете задать правильный вопрос (и ваши данные верны), вы получите правильный ответ.

Однако большая разница заключается в том, что длинные SQL-запросы легче отлаживать, чем длинные императивные подпрограммы, просто потому, что можно быстрее определить, где в запросе происходит сбой.

Как это будет работать

Скорее всего, если вы пойдете по этому пути, у вас будет база данных и программа, написанная на выбранном вами языке. Программа будет отправлять запросы в базу данных и получать ответы обратно. Вы также можете (в PostgreSQL и многих других реляционных БД) помещать свои запросы в функции, которые затем могут вызываться приложением, что дает больше императивного или функционального интерфейса. Данные будут храниться на диске и доступны из другого программного обеспечения, чем ваша программа. Вы также можете подключиться к другой программе (от MS Access до pgAdmin) и запускать запросы или создавать отчеты.

По сути, вы можете думать о СУБД как о «математическом движке», который управляет вашими данными, и ваша программа взаимодействует с ними, чтобы делать то, что вам нужно.


1
извините за поздний ответ, я был очень занят. Я действительно ценю ваш детальный совет. Я начинаю с SQL, изучаю книгу О'Рейли и только что скачал mySQl в соответствии с рекомендациями книги. Я рассмотрю использование расширения ГИС postgreSQL и, возможно, доступ к SQL из C # позже. Еще раз спасибо, я вернусь!
user19109
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.