¿Qué plataforma para una gran base de datos matemática basada en registros?


11

Hola, soy un ingeniero civil con algo de experiencia en programación, pero no estoy familiarizado con la amplia gama de opciones disponibles en la actualidad. Espero que me puedan dar algunos consejos sobre la mejor manera de proceder.

Quiero hacer y consultar una base de datos de mediciones topográficas a nivel del suelo en un formato de cuadrícula. Habrá muchas mediciones para cada ubicación de cuadrícula en varios momentos a través del trabajo de movimiento de tierra, por lo que hay una cuarta dimensión de tiempo.

Lo más probable es que las observaciones se lean desde un archivo de texto. En cada registro habrá una posición de cuadrícula (2 x entero) (fila y columna) a nivel del suelo (punto flotante) y varios códigos de información de cadena (quizás hasta 30 caracteres en total).

Las cuadrículas pueden ser de aproximadamente 10000 filas x 10000 columnas. No todas las ubicaciones en la cuadrícula tendrían un registro en cada encuesta, pero normalmente tendrían hasta un centenar de registros. Muchas de las ubicaciones de la cuadrícula no tendrían ningún registro (el sitio no será perfectamente rectangular).

Quiero buscar en los registros, extraer datos y hacer cálculos, por ejemplo, calcular el nivel del suelo más bajo o más alto para cada ubicación de la cuadrícula. Estoy bastante seguro de que tendría la capacidad de programar esto de manera bastante simple en un lenguaje como FORTRAN, BASIC o C usando matrices. Sin embargo, muchos de los elementos de la matriz estarían vacíos y supongo que esta no es la forma correcta de hacerlo, y las grandes bases de datos como esta necesitan herramientas especiales que tendré que aprender a usar.

Estoy pensando en posibles opciones para la plataforma:

  1. Use un programa de base de datos. No estoy familiarizado con lo poderosos que pueden ser, pero imagino que tendrían una gran sobrecarga con la GUI.

  2. ¿Usar SQL? No sé mucho sobre esto, pero parece ser el lenguaje para las bases de datos. Siempre he usado lenguajes imperativos en lugar de declarativos y, según entiendo de Wikipedia, que SQL es declarativo, estoy un poco nervioso por el cambio. No entiendo completamente el proceso para usarlo. ¿Hay un compilador que hace programas de consola? ¿La base de datos está almacenada en el disco? Perdón por esas estúpidas preguntas.

  3. ¿Usar una API como c-treeACE? Creo que este puede ser el camino a seguir ofreciéndome la familiaridad de un lenguaje de "haz esto, luego haz eso" (¡desafortunadamente esta es la forma en que pienso como ingeniero!). Pero espero que la gestión de memoria y procesamiento detrás de escena ofrecida por la API sea superior a lo que podría lograr con grandes matrices.

  4. ¿O podría hacerlo con un lenguaje orientado a objetos y dejar que la computadora se preocupe por los requisitos de almacenamiento? por ejemplo, si almacenara los registros como objetos con métodos y propiedades que me ayudarían a obtener los resultados que necesito de cada registro, ¿sería un gran programa inflado en comparación con 3)

Es probable que haya cientos de millones de registros y quiero poder consultarlos y procesarlos en minutos, no horas (¡preferiblemente segundos!) En una PC moderna con Windows. Para ser más específicos, el mío es un procesador i7 con 6 Gb de ram y SSD de 120 Gb con Windows 7 de 64 bits.

Espero que alguien tenga tiempo para compartir un par de palabras de sabiduría con un novato.


Si puede estar en línea en algún momento entre la 1 y las 5 de la tarde (o incluso más tarde sería genial) nos encantaría tenerlo en el chat para ayudarlo con esto. chat.stackexchange.com/rooms/179/the-heap (puede haber algunos británicos antes de esa hora, por supuesto). Tengo algunas ideas específicas, como los sistemas de información geográfica pueden ayudar.
jcolebrand

Respuestas:


9

Hay varias opciones y no se limite a mi respuesta aquí. En particular, puede encontrar bases de datos nativas de matriz para ser de ayuda. Mi respuesta será específicamente sobre sus preguntas sobre bases de datos basadas en SQL.

Me parece que esta es una cuestión de información geoespacial. De hecho, las bases de datos basadas en SQL se usan bastante bien en tales campos, pero este también es un campo especializado dentro de las bases de datos.

Entre las bases de datos SQL en esta área, PostgreSQL, con el complemento PostGIS, se considera uno de los mejores. Si yo fuera tú, aquí es donde comenzaría. La principal ventaja de SQL es que conserva la flexibilidad en el futuro con respecto a la reutilización de sus datos para usos que aún no ha pensado. Hacer esto con un buen soporte geoespacial significa que puede calcular la distancia a través de un área grande sin preocuparse por los detalles del trigonometría esférica.

Por supuesto, esto solo se convierte en un factor con cuadrículas muy grandes. Para cuadrículas más pequeñas, donde se puede descartar la curvatura de la tierra, PostgreSQL también tiene una gama de tipos geométricos que incluyen puntos en un sistema de coordenadas que se pueden usar. Menciono esto porque no está claro qué tan grande de un área se está estudiando y si se puede asumir la geometría plana o no.

Aun así, PostGIS puede simplificar las cosas al permitir representaciones y cálculos en sistemas de coordenadas geométricas de 3 y 4 dimensiones.

También tenga en cuenta que dice que sus sitios no son necesariamente cuadrados. En PostgreSQL, una cosa que puede hacer (ya sea usando los tipos geométricos o PostGIS) es definir un límite no rectangular para cada sitio para que pueda verificar que un punto esté dentro de los límites del sitio antes de guardar la medición.

Impactos del lenguaje declarativo

Esta preocupación, creo, es exagerada. Las personas pueden y escriben consultas SQL como si fueran parte del lenguaje imperativo del programa desde el que las están llamando. Para la mayoría de sus consultas no importará.

Lo que la gente quiere decir con un lenguaje declarativo es que dentro de una consulta, la estructura le dice a la base de datos qué información desea, no cómo obtenerla. Esto es importante cuando desea información compleja de la base de datos porque básicamente significa que si puede hacer la pregunta correcta (y sus datos son válidos) obtendrá la respuesta correcta.

Sin embargo, la gran diferencia que ocurre es que las consultas SQL largas son más fáciles de depurar que las subrutinas imperativas largas, simplemente porque uno puede reducir más rápidamente en qué parte de la consulta se produce el mal funcionamiento.

Cómo funcionaría esto

Lo más probable es que si va por esta ruta tenga una base de datos y un programa escrito en el idioma que elija. El programa enviaría consultas a la base de datos y recuperaría las respuestas. También puede (en PostgreSQL y muchas otras bases de datos relacionales) poner sus consultas dentro de las funciones que luego puede llamar la aplicación, dando una interfaz más imperativa o funcional. Los datos se almacenarían en el disco y se accedería desde una pieza de software separada de su programa. También puede conectarse con otro programa (desde MS Access a pgAdmin) y ejecutar consultas o generar informes.

En esencia, puede pensar en el RDBMS como un "motor matemático" que administra sus datos, y su programa interactúa con él para hacer lo que necesita.


1
perdón por la respuesta tardía, he estado muy ocupado. Realmente aprecio que hayas brindado consejos detallados. Estoy comenzando con SQL, aprendiendo con el libro O'Reilly y acabo de descargar mySQl como lo recomienda el libro. Examinaré el uso de la extensión GIS de postgreSQL y tal vez acceda al SQL desde C # en una fecha posterior. Gracias de nuevo, volveré!
user19109
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.