Привет, я инженер-строитель с некоторым опытом программирования, но я не знаком с широким спектром доступных сегодня опций. Надеюсь, вы могли бы дать мне какие-либо указатели лучший способ продолжить.
Я хочу создать и запросить базу данных измерений уровня земли в виде сетки. Во время земляных работ будет много измерений для каждого местоположения сетки в разное время, поэтому существует 4-е измерение времени.
Наблюдения, скорее всего, будут считаны из текстового файла. В каждой записи будет (2 x целое) положение сетки (строка и столбец), уровень земли (с плавающей запятой) и различные строковые информационные коды (всего может быть до 30 символов).
Сетки могут быть около 10000 строк х 10000 столбцов. Не каждое место в сетке будет иметь записи в каждом опросе, но обычно они имеют до ста записей. Во многих местах сетки не будет записей вообще (сайт не будет идеально прямоугольным).
Я хочу искать записи, извлекать данные и делать расчеты, например, рассчитать самый низкий или самый высокий уровень земли для каждого местоположения сетки. Я вполне уверен, что у меня будет возможность довольно просто программировать это на таких языках, как FORTRAN, BASIC или C, используя массивы. Хотя многие элементы массива были бы пустыми, и я предполагаю, что это неправильный способ сделать это, и большие базы данных, подобные этой, нуждаются в специальных инструментах, которые мне придется изучить, как их использовать.
Я думаю о возможных вариантах для платформы -
Используйте программу базы данных. Я не знаю, насколько мощными они могут быть, но я думаю, что они будут иметь много накладных расходов с GUI.
Использовать SQL? Об этом я немного знаю, но, похоже, это язык для баз данных. Я всегда использовал императивные языки, а не декларативные, и, как я понимаю из википедии, SQL является декларативным, я немного нервничаю из-за изменений. Я не совсем понимаю процесс его использования. Есть ли компилятор, который делает консольные программы? База данных хранится на диске? Извините за такие глупые вопросы.
Использовать такой API, как c-treeACE? Я думаю, что это может быть способ предложить мне знакомство с языком «сделай это, затем сделай это» (к сожалению, я так думаю, как инженер!). Но я надеюсь, что негласное управление памятью и обработкой, предлагаемое API, будет превосходить то, что я мог бы достичь с огромными массивами.
Или я могу сделать это на объектно-ориентированном языке и позволить компьютеру беспокоиться о требованиях к хранилищу. например, если бы я хранил записи как объекты с методами и свойствами, которые помогли бы мне получить нужные мне результаты из каждой записи - была бы это огромная раздутая программа по сравнению с 3)
Вероятно, будут сотни миллионов записей, и я хочу иметь возможность запрашивать и обрабатывать их за считанные минуты, а не часы (предпочтительно секунды!) На современном ПК с Windows. Если быть более точным, у меня есть процессор i7 с оперативной памятью 6 ГБ и твердотельный накопитель на 120 ГБ, работающий под управлением Windows 7 64 бит.
Надеюсь, у кого-то есть время, чтобы поделиться несколькими словами мудрости с новичком.
источник
Ответы:
Есть несколько вариантов, и, пожалуйста, не ограничивайтесь моим ответом здесь. В частности, вам могут пригодиться базы данных с массивами. Мой ответ будет конкретно о ваших вопросах по базам данных на основе SQL.
Мне кажется, что это вопрос геопространственной информации. Базы данных на основе SQL на самом деле довольно хорошо используются в таких областях, но это также специальная область в базах данных.
Среди баз данных SQL в этой области PostgreSQL с надстройкой PostGIS считается одной из лучших. На твоем месте я бы начал. Основным преимуществом SQL является то, что он сохраняет гибкость в отношении повторного использования ваших данных для целей, о которых вы еще не думали. Выполнение этого при хорошей гео-пространственной поддержке означает, что вы можете рассчитать расстояние на большой площади, не беспокоясь о специфике сферического триггера.
Конечно, это становится фактором только с очень большими сетками. Для меньших сеток, где можно не принимать во внимание искривление земли, PostgreSQL также имеет ряд геометрических типов, включая точки в системе координат, которые можно использовать. Я упоминаю об этом, потому что неясно, насколько велика площадь исследуемой области и можно ли принять плоскую геометрию или нет.
Даже в этом случае PostGIS может все еще упростить вещи, позволяя представления и вычисления в 3- и 4-мерных геометрических системах координат.
Также обратите внимание, что вы говорите, что ваши сайты не обязательно квадратные. В PostgreSQL вы можете сделать одну вещь (используя геометрические типы или PostGIS) - определить непрямоугольную границу для каждого сайта, чтобы вы могли убедиться, что точка находится внутри границ сайта перед сохранением измерения.
Декларативные языковые воздействия
Эта проблема, я думаю, преувеличена. Люди могут и действительно пишут SQL-запросы, как если бы они были частью императивного языка программы, из которой они их вызывают. Для большинства ваших запросов это не имеет значения.
Под декларативным языком люди понимают, что в запросе структура сообщает базе данных, какую информацию вы хотите, а не как ее получить. Это важно, когда вам нужна сложная информация из базы данных, потому что в основном это означает, что если вы сможете задать правильный вопрос (и ваши данные верны), вы получите правильный ответ.
Однако большая разница заключается в том, что длинные SQL-запросы легче отлаживать, чем длинные императивные подпрограммы, просто потому, что можно быстрее определить, где в запросе происходит сбой.
Как это будет работать
Скорее всего, если вы пойдете по этому пути, у вас будет база данных и программа, написанная на выбранном вами языке. Программа будет отправлять запросы в базу данных и получать ответы обратно. Вы также можете (в PostgreSQL и многих других реляционных БД) помещать свои запросы в функции, которые затем могут вызываться приложением, что дает больше императивного или функционального интерфейса. Данные будут храниться на диске и доступны из другого программного обеспечения, чем ваша программа. Вы также можете подключиться к другой программе (от MS Access до pgAdmin) и запускать запросы или создавать отчеты.
По сути, вы можете думать о СУБД как о «математическом движке», который управляет вашими данными, и ваша программа взаимодействует с ними, чтобы делать то, что вам нужно.
источник