Quelle plateforme pour une grande base de données mathématiques basée sur des enregistrements?

11

Salut, je suis ingénieur civil avec une certaine expérience de la programmation, mais je ne connais pas la vaste gamme d'options disponibles aujourd'hui. J'espère que vous pourrez me donner des conseils sur la meilleure façon de procéder.

Je veux créer et interroger une base de données de mesures de levé au sol dans un format de grille. Il y aura de nombreuses mesures pour chaque emplacement du réseau à différents moments du travail de terrassement, il y a donc une 4ème dimension du temps.

Les observations seront très probablement lues à partir d'un fichier texte. Dans chaque enregistrement, il y aura une position de grille (ligne et colonne) (2 x entiers), un niveau au sol (virgule flottante) et divers codes d'informations de chaîne (peut-être jusqu'à 30 caractères au total).

Les grilles pourraient être d'environ 10000 lignes x 10000 colonnes. Tous les emplacements sur la grille n'auraient pas un enregistrement dans chaque enquête, mais ils auraient généralement jusqu'à une centaine d'enregistrements. De nombreux emplacements de grille n'auraient aucun enregistrement (le site ne sera pas parfaitement rectangulaire).

Je souhaite rechercher les enregistrements, extraire des données et effectuer des calculs, par exemple calculer le niveau du sol le plus bas ou le plus haut pour chaque emplacement de grille. Je suis assez confiant que j'aurais la capacité de programmer cela assez simplement dans un langage comme FORTRAN, BASIC ou C en utilisant des tableaux. Beaucoup d'éléments du tableau seraient vides cependant et je suppose que ce n'est pas la bonne façon de le faire et les grandes bases de données comme celle-ci ont besoin d'outils spéciaux que je devrai apprendre à utiliser.

Je pense aux options possibles pour la plateforme -

  1. Utilisez un programme de base de données. Je ne sais pas à quel point ceux-ci peuvent être puissants, mais j'imagine qu'ils auraient beaucoup de frais généraux avec l'interface graphique.

  2. Utiliser SQL? Je ne connais pas grand-chose à ce sujet, mais il semble que ce soit le langage des bases de données. J'ai toujours utilisé des langages impératifs plutôt que déclaratifs et si je comprends bien de wikipedia que SQL est déclaratif, je suis un peu inquiet du changement. Je ne comprends pas bien le processus d'utilisation. Existe-t-il un compilateur qui crée des programmes de console? La base de données est-elle stockée sur disque? Désolé pour ces questions stupides.

  3. Utilisez une API comme c-treeACE? Je pense que c'est peut-être la voie à suivre en m'offrant la familiarité d'un langage «faites ceci, puis faites cela» (malheureusement, c'est la façon dont je pense en tant qu'ingénieur!). Mais j'espère que la gestion de la mémoire et du traitement en arrière-plan offerte par l'API sera supérieure à ce que je pourrais réaliser avec d'énormes baies.

  4. Ou pourrais-je le faire avec un langage orienté objet et laisser l'ordinateur s'inquiéter des besoins de stockage. Par exemple, si je stockais les enregistrements en tant qu'objets avec des méthodes et des propriétés qui m'aideraient à obtenir les résultats dont j'ai besoin de chaque enregistrement - serait-ce un énorme programme gonflé par rapport à 3)

Il y a probablement des centaines de millions d'enregistrements et je veux pouvoir les interroger et les traiter en quelques minutes et non en quelques heures (de préférence en secondes!) Sur un PC moderne fonctionnant sous Windows. Pour être plus précis, le mien est un processeur i7 avec 6 Go de RAM et 120 Go de SSD fonctionnant sous Windows 7 64 bits.

J'espère que quelqu'un a le temps de partager quelques mots de sagesse avec un débutant.

user19109
la source
Si vous pouvez être en ligne entre 1 et 5 heures de l'après-midi (ou même plus tard, ce serait génial), nous serions ravis de vous avoir dans le chat pour vous aider. chat.stackexchange.com/rooms/179/the-heap (il peut y avoir des collègues britanniques avant cette heure bien sûr). J'ai quelques réflexions spécifiques telles que les systèmes d'information géographique peuvent être en mesure de vous aider.
jcolebrand

Réponses:

9

Il existe un certain nombre d'options et ne vous limitez pas à ma réponse ici. En particulier, vous trouverez peut-être des bases de données natives de tableaux utiles. Ma réponse va être spécifiquement sur vos questions sur les bases de données SQL.

Il me semble que c'est une question d'information géospatiale. Les bases de données basées sur SQL sont en fait assez bien utilisées dans ces domaines, mais il s'agit également d'un domaine spécialisé dans les bases de données.

Parmi les bases de données SQL dans ce domaine, PostgreSQL, avec le module complémentaire PostGIS, est considérée comme l'une des meilleures. Si j'étais vous, c'est par là que je commencerais. Le principal avantage de SQL est qu'il préserve la flexibilité sur la route en ce qui concerne la réutilisation de vos données pour des utilisations auxquelles vous n'avez pas encore pensé. Faire cela avec un bon support géospatial signifie que vous pouvez calculer la distance à travers une grande zone sans vous soucier des spécificités du trig sphérique.

Bien sûr, cela ne devient un facteur qu'avec de très grandes grilles. Pour les grilles plus petites, où la courbure de la terre peut être ignorée, PostgreSQL propose également une gamme de types géométriques, y compris des points sur un système de coordonnées qui peuvent être utilisés. Je mentionne cela parce qu'il n'est pas clair quelle est l'étendue d'une zone étudiée et si l'on peut assumer une géométrie plane ou non.

Néanmoins, PostGIS peut encore simplifier les choses en permettant des représentations et des calculs sur des systèmes de coordonnées géométriques en 3 et 4 dimensions.

Notez également que vous dites que vos sites ne sont pas nécessairement carrés. Dans PostgreSQL, une chose que vous pouvez faire (en utilisant les types géométriques ou PostGIS) est de définir une frontière non rectangulaire pour chaque site afin que vous puissiez vérifier qu'un point se trouve à l'intérieur des limites du site avant d'enregistrer la mesure.

Impacts linguistiques déclaratifs

Je pense que cette préoccupation est exagérée. Les gens peuvent et écrivent des requêtes SQL comme s'ils faisaient partie du langage impératif du programme à partir duquel ils les appellent. Pour la plupart de vos requêtes, cela n'aura pas d'importance.

Ce que les gens entendent par un langage déclaratif, c'est que dans une requête, la structure indique à la base de données quelles informations vous voulez, pas comment les obtenir. Ceci est important lorsque vous souhaitez obtenir des informations complexes de la base de données car, fondamentalement, cela signifie que si vous pouvez poser la bonne question (et que vos données sont valides), vous obtiendrez la bonne réponse.

La grande différence qui se produit cependant est que les longues requêtes SQL sont plus faciles à déboguer que les longues sous-routines impératives, simplement parce que l'on peut plus rapidement préciser où dans la requête se produit le dysfonctionnement.

Comment cela fonctionnerait

Il y a de fortes chances que si vous suivez cette voie, vous disposiez d'une base de données et d'un programme écrits dans la langue de votre choix. Le programme enverrait des requêtes à la base de données et récupérerait les réponses. Vous pouvez également (dans PostgreSQL et de nombreuses autres bases de données relationnelles) placer vos requêtes dans des fonctions qui peuvent ensuite être appelées par l'application, donnant ainsi une interface plus impérative ou fonctionnelle. Les données seraient stockées sur disque et accessibles à partir d'un logiciel distinct de votre programme. Vous pouvez également vous connecter avec un autre programme (de MS Access à pgAdmin) et exécuter des requêtes ou générer des rapports.

En gros, vous pouvez considérer le SGBDR comme un "moteur mathématique" qui gère vos données, et votre programme interagit avec lui pour faire ce dont vous avez besoin.

Chris Travers
la source
1
désolé pour la réponse tardive, j'ai été très occupé. J'apprécie vraiment vos conseils détaillés. Je commence avec SQL, j'apprends avec le livre O'Reilly et je viens de télécharger mySQl comme recommandé par le livre. Je vais examiner l'utilisation de l'extension SIG postgreSQL et peut-être accéder au SQL à partir de C # à une date ultérieure. Merci encore, je serai de retour!
user19109