Oi Eu sou um engenheiro civil com alguma experiência em programação, mas não estou familiarizado com a vasta gama de opções disponíveis hoje. Espero que você possa me dar alguma indicação da melhor maneira de prosseguir.
Quero fazer e consultar um banco de dados de medições de pesquisa no nível do solo em um formato de grade. Haverá muitas medições para cada localização da grade em vários momentos através do trabalho de terraplenagem, para que haja uma quarta dimensão de tempo.
As observações provavelmente serão lidas em um arquivo de texto. Em cada registro, haverá uma posição de grade (2 x inteiro) (linha e coluna), um nível do solo (ponto flutuante) e vários códigos de informações de sequência (talvez até 30 caracteres no total).
As grades podem ter cerca de 10000 linhas x 10000 colunas. Nem todos os locais na grade teriam um registro em cada pesquisa, mas normalmente teriam até cem registros. Muitos locais da grade não teriam registros (o site não será perfeitamente retangular).
Quero pesquisar os registros, extrair dados e fazer cálculos, por exemplo, calcular o nível do solo mais baixo ou mais alto para cada local da grade. Estou bastante confiante de que teria a capacidade de programar isso de maneira bastante simples em uma linguagem como FORTRAN, BASIC ou C usando matrizes. Muitos dos elementos da matriz ficariam vazios e, no entanto, acho que essa não é a maneira correta de fazê-lo, e grandes bancos de dados como esse precisam de ferramentas especiais que precisarei aprender a usar.
Estou pensando em possíveis opções para a plataforma -
Use um programa de banco de dados. Não estou familiarizado com o quão poderoso eles podem ser, mas imagino que eles teriam muita sobrecarga com a GUI.
Usar SQL? Não sei muito sobre isso, mas parece ser o idioma para os bancos de dados. Eu sempre usei linguagens imperativas em vez de declarativas e, como eu entendo na wikipedia, que SQL é declarativo, estou um pouco nervoso com a mudança. Não entendo completamente o processo para usá-lo. Existe um compilador que cria programas de console? O banco de dados está armazenado em disco? Desculpe por perguntas tão estúpidas.
Use uma API como c-treeACE? Eu acho que esse pode ser o caminho a seguir, oferecendo-me a familiaridade de uma linguagem "faça isso, depois faça isso" (infelizmente, é assim que penso como engenheiro!). Mas espero que os bastidores de gerenciamento de memória e processamento oferecidos pela API sejam superiores ao que eu poderia obter com grandes matrizes.
Ou eu poderia fazê-lo com uma linguagem orientada a objetos e deixar o computador se preocupar com os requisitos de armazenamento. por exemplo, se eu armazenasse os registros como objetos com métodos e propriedades que me ajudariam a obter os resultados necessários para cada registro - seria um programa enorme e inchado em comparação com 3)
É provável que haja centenas de milhões de registros e eu quero poder consultá-los e processá-los em minutos, não em horas (de preferência em segundos!) Em um PC moderno executando o Windows. Para ser mais específico, o meu é um processador i7 com 6 GB de RAM e SSD de 120 GB executando o Windows 7 de 64 bits.
Espero que alguém tenha tempo para compartilhar algumas palavras de sabedoria com um novato.
fonte
Respostas:
Há várias opções e não se limite à minha resposta aqui. Em particular, você pode encontrar bancos de dados nativos de matriz para ajudar. Minha resposta será especificamente sobre suas perguntas em bancos de dados baseados em SQL.
Parece-me que esta é uma questão de informação geoespacial. Os bancos de dados baseados em SQL são realmente usados nesses campos muito bem, mas esse também é um campo especializado em bancos de dados.
Entre os bancos de dados SQL nessa área, o PostgreSQL, com o complemento PostGIS, é considerado um dos melhores. Se eu fosse você, é aqui que eu começaria. A principal vantagem do SQL é que ele preserva a flexibilidade no que diz respeito à reutilização de seus dados para usos que você ainda não pensou. Fazer isso com um bom suporte geoespacial significa que você pode calcular a distância em uma grande área sem se preocupar com as especificidades do trigonométrico esférico.
Claro que isso só se torna um fator com redes muito grandes. Para redes menores, onde a curvatura da terra pode ser desconsiderada, o PostgreSQL também possui uma variedade de tipos geométricos, incluindo pontos em um sistema de coordenadas que podem ser usados. Menciono isso porque não está claro o tamanho de uma área que está sendo pesquisada e se é possível assumir uma geometria plana ou não.
Mesmo assim, o PostGIS ainda pode simplificar as coisas, permitindo representações e cálculos em sistemas de coordenadas geométricas tridimensionais e tridimensionais.
Observe também que você diz que seus sites não são necessariamente quadrados. No PostgreSQL, uma coisa que você pode fazer (usando os tipos geométricos ou o PostGIS) é definir um limite não retangular para cada site, para verificar se um ponto está dentro dos limites do site antes de salvar a medição.
Impactos na linguagem declarativa
Acho que essa preocupação é exagerada. As pessoas podem e escrevem consultas SQL como se fossem parte da linguagem imperativa do programa do qual as estão chamando. Para a maioria das suas consultas, isso não importa.
O que as pessoas querem dizer com linguagem declarativa é que, dentro de uma consulta, a estrutura informa ao banco de dados quais informações você deseja, não como obtê-las. Isso é importante quando você deseja obter informações complexas do banco de dados, porque basicamente significa que, se você puder fazer a pergunta certa (e seus dados forem válidos), obterá a resposta certa.
A grande diferença que ocorre, no entanto, é que as consultas SQL longas são mais fáceis de depurar do que as sub-rotinas imperativas longas, simplesmente porque é possível restringir mais rapidamente onde ocorre o mau funcionamento na consulta.
Como isso funcionaria
Provavelmente, se você seguir esse caminho, terá um banco de dados e um programa escritos no idioma de sua escolha. O programa enviaria consultas ao banco de dados e obteria as respostas de volta. Você também pode (no PostgreSQL e em muitos outros bancos de dados relacionais) colocar suas consultas em funções que podem ser chamadas pelo aplicativo, fornecendo uma interface mais imperativa ou funcional. Os dados seriam armazenados em disco e acessados a partir de um software separado do seu programa. Você também pode se conectar a outro programa (do MS Access ao pgAdmin) e executar consultas ou gerar relatórios.
Em essência, você pode pensar no RDBMS como um "mecanismo matemático" que gerencia seus dados e seu programa interage com ele para fazer o que você precisa.
fonte