Suite

Créer plusieurs nouveaux fichiers de formes à l'aide des informations contenues dans un tableau

Créer plusieurs nouveaux fichiers de formes à l'aide des informations contenues dans un tableau


J'espère créer un script qui crée un nouveau fichier de formes pour chaque enregistrement d'une table. Mon expérience python est limitée, et cela fait un moment que je ne l'ai pas utilisé, donc j'ai du mal à démarrer. Ma table a des champs pour l'ID, la longitude, la latitude, la distance et le relèvement.

Pour chaque enregistrement, je dois :

  • créer un nouveau shapefile avec un nom de fichier qui correspond au champ ID
  • créez une série de points dans le fichier de formes nouvellement créé par incréments de 1 mètre le long d'une ligne définie par la longitude/latitude (c'est le point de départ), la distance et les champs de relèvement.

Voici mon code initial :

import arcpy table = "C:/folder/project.gdb/transect_table" fields = ["TRANSECT_ID", "LATITUDE", "LONGITUDE", "Heading", "Distance"] shp_path = "C:/folder/output_shapefiles" avec arcpy.da.SearchCursor (table, champs) en tant que curseur : pour la ligne du curseur : arcpy.CreateFeatureclass_management(shp_path, cursor[0])

Ce morceau de code crée la collection de fichiers de formes vides avec des noms de fichiers extraits du champ ID de la table.

Quelqu'un peut-il suggérer une approche pour remplir les fichiers de formes avec des points ?

Sur la base de l'entrée de radouxju, j'ai mis à jour le code comme suit (notez que je crée des classes d'entités dans un gdb par opposition à un fichier de formes ; mes fichiers de formes étaient verrouillés lors de la création des points mais les classes d'entités semblent éviter ce problème ):

import arcpy import math path = "C:/dossier/Output_FeatureClass.gdb" table = "C:/dossier/Transects.gdb/table" champs = ["TRANSECT_ID", "LATITUDE", "LONGITUDE", "Titre", " Distance"] avec arcpy.da.SearchCursor(table, fields) comme curseur : pour la ligne du curseur : arcpy.CreateFeatureclass_management(path, cursor[0], "Point","","","", "C:/ dossier/WGS1984.prj") avec arcpy.da.InsertCursor(chemin + "/"+ curseur[0], ["[email protected]"]) comme insertcursor : pour i dans la plage (ligne[4]): xy = [ (ligne[2]*i*math.sin(ligne[3]),ligne[1]*i*math.cos(ligne[3])),] insertcursor.insertRow(xy)

Cela fonctionne plutôt bien, car toutes mes classes d'entités sont créées et sont remplies avec le nombre de points approprié. Cependant, la distance entre les points n'est pas le mètre souhaité (c'est plus près de 15 000 km !). Je soupçonne que je pourrais avoir un problème avec les unités de mélange, car les positions d'entrée sont en degrés et le décalage entre les points doit être en mètres, mais je ne suis pas tout à fait sûr.

Aucune suggestion?


Je n'ai pas testé mais ça devrait être quelque chose comme ci-dessous. Je suppose que votre cap est 0 vers le Nord et en radians, et que vous êtes dans un système de coordonnées projetées avec les unités en mètres (idéalement Mercator).

import arcpy import math table = "C:/folder/project.gdb/transect_table" fields = ["TRANSECT_ID", "LATITUDE", "LONGITUDE", "Heading", "Distance"] shp_path = "C:/folder/output_shapefiles " avec arcpy.da.SearchCursor(table, fields) comme curseur : pour la ligne dans le curseur : arcpy.CreateFeatureclass_management(shp_path, cursor[0], "POINT") avec arcpy.da.InsertCursor(shp_path + "/"+ curseur[ 0], ["[email protected]"]) comme insertcursor : pour i dans la plage (ligne[4]) : insertcursor.insertRow((row[2]+i*math.sin(row[3]),row[1 ]+i*math.cos(ligne[3],))

si votre cap est en degré, vous aurez besoin d'une conversion de degré en radian (math.radians(row[3])


Manipuler la table attributaire du fichier de formes à l'aide de R

J'ai posté cette question sur l'échange de pile SIG, mais il ne voit pas beaucoup de trafic.

Je suis un utilisateur SIG qui utilise R pour les statistiques depuis quelques années, et je suis ravi de voir de nombreuses nouvelles fonctionnalités SIG sortir (raster, shapefiles, rgdal, etc.).

J'ai fait beaucoup de manipulations de bases de données et de tables dans R, donc pouvoir ajouter et supprimer des attributs de fichiers de formes est un potentiel puissant.

J'espère que je manque juste ce qui existe, mais je n'arrive pas à trouver une bonne méthode pour ajouter ou supprimer des attributs d'une table attributaire de fichier de formes.

Quelqu'un d'Overflow peut-il répondre à mon message SIG ? Ou puis-je savoir comment placer ma table attributaire de liste dans un cadre de données et revenir pour remplacer la table attributaire actuelle ?


La différence entre une table à fichier plat unique et des tables à fichiers multiples associées

Commençons par un concept fondamental de tableau croisé dynamique. Un seul tableau « fichier plat » est créé à partir d'une seule feuille de calcul. Les tableaux multi-fichiers associés sont créés à partir de deux feuilles de calcul ou plus qui sont connectées les unes aux autres via un champ clé unique.

Dans notre exemple de feuille de calcul, les outils de tableau croisé dynamique vous permettent d'extraire les numéros de licence et les noms des conducteurs d'une table (Master1) et les données restantes d'une autre table (Violations). Le champ clé unique, dans ce cas, est le numéro de licence, qui doit exister dans toutes les tables avec lesquelles vous travaillez pour ces rapports.

En conséquence, les tableaux croisés dynamiques permettent des feuilles de calcul plus petites (c'est-à-dire moins de champs) et éliminent les données redondantes. Les rapports sont plus efficaces et plus faciles à compiler. Par exemple, dans les anciennes versions, vous deviez saisir le nom, l'adresse, la ville, l'état, le code postal et le numéro de téléphone du client dans votre feuille de calcul client, feuille de calcul produit, feuille de calcul des ventes, feuille de calcul d'inventaire, etc., en fonction de la quantité de données. vous deviez suivre ce qui était lié à cette information. Avec les outils de tableau croisé dynamique, vous saisissez les données une seule fois, puis vous liez les tables entre elles via un champ commun et unique. Excel fait le reste.

Formation complémentaire Excel

Si vous souhaitez approfondir votre maîtrise d'Excel, de nombreux cours en ligne existent pour approfondir vos connaissances. Voici nos meilleurs choix pour commencer :


Insertion du tableau croisé dynamique

Sur la feuille Informations de paiement, assurez-vous que le curseur se trouve quelque part dans le tableau. Retournez au Insérer l'onglet du ruban et cliquez sur le bouton Tableau croisé dynamique icône (c'est la toute première icône).

Avec le curseur à l'intérieur d'un des tableaux, sélectionnez Insérer > tableau croisé dynamique

La boîte de dialogue qui s'affiche doit identifier correctement la table et sélectionner que le tableau croisé dynamique ira sur une nouvelle feuille de calcul. En bas, cliquez sur la case à cocher pour Ajouter ces données au modèle de données. Puis clique d'accord.

L'ajout des données au modèle de données est ce qui permet aux connexions de fonctionner

Vous aurez maintenant un tableau croisé dynamique sur une nouvelle feuille de calcul, il y aura un volet Office sur le côté droit de l'écran et la barre de ruban affichera l'onglet Analyser.

Le volet Office affiche le tableau et les champs de la feuille active uniquement, alors cliquez sur TOUT pour voir toutes les tables que vous avez créées. Mais avant de pouvoir les utiliser, nous devons les connecter les uns aux autres, et cela signifie créer des relations. Clique le Des relations bouton sur la barre de ruban.

Configuration des relations de table

Cliquer sur ce bouton affiche la boîte de dialogue Gérer les relations. Clique le Nouveau et qui affiche la boîte de dialogue Créer une relation. Nous allons créer deux relations en utilisant le champ Order # comme connecteur.

Dans les listes déroulantes, choisissez Information de paiement pour la table, et à côté, choisissez Ordre # dans la liste déroulante Colonne. Sur la deuxième ligne, choisissez Informations concernant le client dans la liste déroulante Table associée, et à côté, sélectionnez Ordre # dans la liste déroulante Colonne associée.

Il y a trois tables, alors créez deux relations

Cela signifie que les tables Payment_Info et Customer_Info sont liées lorsqu'elles ont des numéros de commande correspondants.

Cliquez sur d'accord, et nous voyons cette relation répertoriée dans la zone Gérer les relations.

Répétez ce processus pour créer une relation qui joint Payment_Info à Order_Info, en utilisant également le champ Order #. La zone Gérer les relations devrait maintenant ressembler à ceci :

La boîte de dialogue Gérer les relations affichera les relations que vous créez

Notez qu'il n'est pas nécessaire de créer une relation entre les tables Order_Info et Customer_Info, car elles sont jointes automatiquement via la table Payment_Info.

Clique le Fermer bouton au bas de la boîte. Maintenant, nous pouvons enfin faire glisser des champs dans le tableau croisé dynamique.


Configuration des espaces de noms DFS pour regrouper plusieurs systèmes de fichiers

Vous pouvez utiliser les espaces de noms DFS pour regrouper plusieurs systèmes de fichiers sous un seul espace de noms. Dans l'exemple qui suit, l'espace de noms basé sur le domaine (example.comcorp) est créé sur deux serveurs d'espaces de noms, consolidant les partages de fichiers stockés sur plusieurs systèmes de fichiers Amazon FSx (finance, marketing, ventes, home_directories). Cela permet à vos utilisateurs d'accéder aux partages de fichiers à l'aide d'un espace de noms commun. Compte tenu de cela, ils n'ont pas besoin de spécifier les noms DNS du système de fichiers pour chacun des systèmes de fichiers hébergeant les partages de fichiers.

Ces étapes vous guident dans la création d'un espace de noms unique (exemple.comcorp) sur deux serveurs d'espaces de noms. Vous configurez également quatre partages de fichiers sous l'espace de noms, chacun redirigeant de manière transparente les utilisateurs vers des partages hébergés sur des systèmes de fichiers Amazon FSx distincts.

Pour regrouper plusieurs systèmes de fichiers dans un espace de noms DFS commun

Si vous n'avez pas encore de serveurs d'espace de noms DFS en cours d'exécution, vous pouvez lancer une paire de serveurs d'espace de noms DFS hautement disponibles à l'aide du modèle AWS CloudFormation setup-DFSN-servers.template. Pour plus d'informations sur la création d'une pile AWS CloudFormation, consultez Création d'une pile sur la console AWS CloudFormation dans le Guide de l'utilisateur AWS CloudFormation.

Connectez-vous à l'un des serveurs d'espace de noms DFS lancés à l'étape précédente en tant qu'utilisateur dans le Administrateurs délégués AWS grouper. Pour plus d'informations, consultez Connexion à votre instance Windows dans le Guide de l'utilisateur Amazon EC2 pour les instances Windows.

Accédez à la console de gestion DFS en l'ouvrant. Ouvrez le Démarrer menu et exécuter dfsmgmt.msc. Cela ouvre l'outil GUI de gestion DFS.

Choisir action ensuite Nouvel espace de noms, saisissez le nom de l'ordinateur du premier serveur d'espace de noms DFS que vous avez lancé pour Serveur et choisissez Suivant.

Pour Nom, saisissez l'espace de noms que vous créez (par exemple, corp).

Choisir Modifier les paramètres et définissez les autorisations appropriées en fonction de vos besoins. Choisir Suivant.

Laisser la valeur par défaut Espace de noms basé sur le domaine option sélectionnée, laissez le Activer le mode Windows Server 2008 option sélectionnée et choisissez Suivant.

Le mode Windows Server 2008 est la dernière option disponible pour les espaces de noms.

Vérifiez les paramètres de l'espace de noms et choisissez Créer.

Avec l'espace de noms nouvellement créé sélectionné sous Espaces de noms dans la barre de navigation, choisissez action ensuite Ajouter un serveur d'espace de noms.

Tapez le nom de l'ordinateur du deuxième serveur d'espace de noms DFS que vous avez lancé pour Serveur d'espace de noms.

Choisir Modifier les paramètres, définissez les autorisations appropriées en fonction de vos besoins et choisissez d'accord.

Ouvrez le menu contextuel (clic droit) de l'espace de noms que vous venez de créer, choisissez Nouveau dossier, saisissez le nom du dossier (par exemple, finance pour Nom, et choisissez d'accord.

Tapez le nom DNS du partage de fichiers vers lequel vous souhaitez que le dossier DFS Namespace pointe au format UNC (par exemple, fs-0123456789abcdef0.example.comfinance ) pour Chemin d'accès au dossier cible et choisissez d'accord.

Si le partage n'existe pas :

Choisir Oui pour le créer.

Du Créer Partager dialogue, choisissez Parcourir.

Choisissez un dossier existant ou créez un nouveau dossier sous D$, et choisissez d'accord.

Définissez les autorisations de partage appropriées et choisissez d'accord.

Du Nouveau dossier dialogue, choisissez d'accord. Le nouveau dossier sera créé sous l'espace de noms.

Répétez les quatre dernières étapes pour les autres dossiers que vous souhaitez partager sous le même espace de noms.


Parcourir les données

Cet ensemble de données a été mis à jour pour la dernière fois sur LINZ Data Service le 26 juin 2021.

Cet ensemble de données fournit des informations sur le titre (à l'exclusion de la propriété) lorsqu'il existe une relation avec une ou plusieurs parcelles principales.

Un enregistrement de titre est un enregistrement des propriétaires d'une propriété, la description légale et les droits et responsabilités enregistrés contre le titre.

Cet ensemble de données ne contient aucune information de propriété afin qu'il puisse être librement distribué. Si des informations sur la propriété sont requises, vous devez d'abord accepter la licence LINZ pour les données personnelles pour pouvoir accéder aux ensembles de données des titres de propriété NZ, y compris les propriétaires et des propriétaires de titres de propriété NZ.

Il peut y avoir plusieurs parcelles associées à un titre, et un titre peut n'avoir qu'une part partielle dans une parcelle. Cela signifie que la forme représentant le titre sera une agrégation de toutes les parcelles auxquelles le titre est associé. L'attribut « étendues spatiales partagées » lorsqu'il est égal à « faux » indiquera que le titre a un intérêt exclusif sur l'ensemble de la forme (ce sera le cas pour la grande majorité).

Les données d'origine pour les associations parcelle/titre incluent certaines sources non officielles où les données officielles ne prennent pas en charge un lien. Pour plus d'informations, consultez le site Web de LINZ

API et services Web
Ce jeu de données est disponible via les services ArcGIS Online et ArcGIS REST, ainsi que nos API standard.
API LDS et services Web OGC
Services cartographiques ArcGIS Online
API REST ArcGIS

Colis primaires néo-zélandais

Vous pouvez utiliser ce travail à des fins commerciales.

Vous devez attribuer le créateur dans vos propres œuvres.

Cet ensemble de données a été mis à jour pour la dernière fois sur LINZ Data Service le 26 juin 2021.

Cette couche fournit le actuel les polygones de la parcelle principale et certaines données descriptives associées qui détaillent l'appellation (description légale), le but, la taille et une liste de titres qui ont un intérêt dans la parcelle.

Une parcelle principale est une portion de terrain destinée à être :
• propriété de la Couronne, à l'exception des bandes marginales mobiles
• Détenu en fief simple ((principalement propriété privée)
• Terres franches maories ou terres coutumières maories
• Estran et fonds marins publics
• Le lit d'un lac ou d'une rivière
• Route ou voie ferrée
• Appartenant à une autorité locale

API et services Web
Ce jeu de données est disponible via les services ArcGIS Online et ArcGIS REST, ainsi que nos API standard.
API LDS et services Web OGC
Services cartographiques ArcGIS Online
API REST ArcGIS

Les parcelles primaires peuvent être considérées comme le « niveau de base » du « puzzle » de toutes les terres composant la Nouvelle-Zélande. Les autres « niveaux » sont les parcelles non principales de la Nouvelle-Zélande qui limitent essentiellement les droits complets qui seraient normalement associés à une parcelle principale, par exemple les servitudes, les conventions, les baux et les bandes marginales mobiles, etc.

Si vous avez besoin de parcelles approuvées ou historiques, consultez la couche Toutes les parcelles

Cette couche a une précision nominale de 0,1 à 1 m dans les zones urbaines et de 1 à 100 m dans les zones rurales. Pour plus d'informations sur les précisions des parcelles, veuillez vous référer à la couche Survey Boundary Marks qui contient les précisions pour chaque nœud de parcelle.

La combinaison de cette couche avec la couche des parcelles non principales fournit toutes les parcelles actuelles pour la Nouvelle-Zélande (c'est-à-dire exclut les parcelles historiques et en attente)

Les données d'origine pour les associations parcelle/titre incluent certaines sources non officielles où les données officielles ne prennent pas en charge un lien. Pour plus d'informations, consultez le site Web de LINZ


Méthodes

Système d'Information Géographique

Un élément essentiel était le système d'information géographique. Un plan d'étage de l'installation contaminée de Hamilton n'était disponible que sous la forme d'une photocopie incomplète et de mauvaise qualité de 8 1/2 × 11 pouces du dessin AutoCAD original de taille « E ». Il a été numérisé sous forme d'image TIFF, importé dans le logiciel ArcView GIS 3.2 et utilisé comme toile de fond pour créer des fichiers de formes du contour du bâtiment, des murs, des zones opérationnelles et des emplacements d'équipement, ainsi que des emplacements d'échantillonnage du NIOSH et du FBI. Des tables attributaires ont également été créées pour chacune des caractéristiques thématiques du SIG. Les fichiers de formes ont été développés à l'aide d'une copie scannée du plan d'étage de chaque installation et numérisés à l'aide d'ArcView ® . Les éléments d'information à afficher ont été divisés en plusieurs couches montrant des échantillons prélevés par différentes agences et leur localisation.

Une fois terminés, les fichiers de formes ont été liés aux données à l'aide d'Epi Map 2000, un composant d'Epi Info compatible avec ArcView ® . Les éléments d'information stockés dans les bases de données créées dans Epi Info 2000 ont été envoyés directement à Epi Map pour affichage (Figure 1). Le processus a été automatisé à l'aide de scripts ou de programmes.

Collecte et saisie des données

Pour obtenir des données sur les personnes éventuellement exposées, une liaison entre le service postal américain et l'équipe épidémiologique a été nommée. Il a pu obtenir des fichiers MS-Excel © ou des imprimés informatiques répertoriant le personnel de chacune des installations faisant l'objet de l'enquête. Les listes ont été créées à l'origine pour la paie ou l'immatriculation des véhicules. Des informations supplémentaires ont été ajoutées à ces listes pour enregistrer la présence dans l'établissement pendant la période d'exposition, le sexe de l'employé et la prophylaxie post-exposition (PEP). La plupart des services de suivi clinique, y compris la PPE, étaient fournis par l'hôpital local. Le service informatique de l'hôpital a extrait les données cliniques pertinentes du système de base de données et les a mises à la disposition de l'équipe d'investigation sous forme de tableaux Excel certains jours et de fichiers texte délimités par des virgules d'autres jours.

Les éléments de données primaires collectés par les agents de l'EIS et d'autres membres du personnel ont été saisis dans Epi Info 2000 ou dans Excel, puis importés au format Epi Info 2000 (Microsoft Access 97). Les populations potentiellement exposées telles que les visiteurs réguliers et les proches des postiers ont été identifiées et saisies manuellement dans la base de données principale au fur et à mesure de l'enquête.

Les caractéristiques démographiques des personnes potentiellement exposées ont été rassemblées à partir de diverses sources, y compris l'hôpital local où la PPE a été administrée. Lorsque la PPE a été proposée à un large groupe de personnes, le suivi des différents protocoles de traitement et de leurs résultats est devenu nécessaire. Les formulaires papier ont été conçus pour ne pas devenir obsolètes si les protocoles sont modifiés au cours du suivi, et des révisions similaires dans la base de données étaient attendues.

Gestion de base de données

La gestion de la base de données a été effectuée dans Epi Info 2000, la version Windows d'Epi Info [3]. Epi Info 2000 a été développé au CDC à partir de composants logiciels commerciaux et de Visual Basic et offre une compatibilité avec les fichiers Microsoft Access et 20 autres formats de base de données standard. Il comprend un programme de cartographie qui utilise le format de fichier de formes compatible ArcView et permet l'affichage des données des tables Access sur des fichiers de formes. La plupart des statistiques de base nécessaires au reporting et à l'analyse sont intégrées afin que nous n'ayons pas à passer du temps à coder ou à déboguer des algorithmes. Les outils de collecte et de gestion des données d'Epi Info ne nécessitent pas de gestionnaires de bases de données experts.

Le système de base de données consistait en une base de données centrale conçue et maintenue dans Epi Info 2000. Le système était structuré en 14 tables liées par une clé unique. La clé unique contenait d'abord des informations (était "intelligente"), mais nous avons conçu un mécanisme pour remplacer les clés intelligentes par des clés non intelligentes. La clé intelligente contenait le code de l'installation, l'identifiant unique exposé du lieu de déploiement (NJ) et l'installation postale impliquée. Nous avons inclus le site de déploiement dans la clé en supposant que les informations seraient liées à d'autres sites ultérieurement.

Sécurité

Dès le début de l'opération, la sécurité était une préoccupation.En raison de la complexité de l'enquête, nous avons décidé que toutes les informations sensibles – définies comme des informations permettant l'identification d'individus spécifiques – seraient traitées séparément du reste de la base de données. Nous avons créé une seule table plate avec tous les identifiants et lié la table au reste du système de base de données. Avec cette structure, nous avons pu traiter les informations sensibles en tant qu'unité. Les identifiants n'ont pas été envoyés au siège du CDC à Atlanta, par exemple, et les données sensibles ont été protégées par les fonctions de sécurité de l'environnement informatique NJDHSS.

Gestion de documents

Un éditeur HTML commercial (Microsoft Front Page 2000 ® ) a été utilisé pour la maintenance de la page Web du référentiel de documents. Les pages Web incluses dans le système ne contenaient aucun script spécial nécessitant des techniques de programmation Web avancées. Le niveau de codage HTML était basique, et la plupart du temps inséré automatiquement par Front Page.

Le référentiel de documents a permis de coder et de stocker des versions de documents au cours de l'enquête. Les documents ont été organisés dans des dossiers et des numéros de code ont été attribués.

Les membres de l'équipe ont été chargés de vérifier régulièrement les documents. Le processus d'enregistrement des documents comprenait un simple formulaire informatisé avec le nom du document, l'auteur et un horodatage. Les deux premiers éléments ont été utilisés pour créer un catalogue et l'horodatage a été utilisé pour le contrôle de version.


Conditions préalables

Conditions

Il n'y a pas d'exigences spécifiques pour ce document.

Composants utilisés

Ce document n'est pas limité à des versions logicielles et matérielles spécifiques. Les sorties de commande affichées proviennent des routeurs de la gamme Cisco 2500 exécutant le logiciel Cisco IOS ® version 12.2(24a).

Les informations présentées dans ce document ont été créées à partir de périphériques dans un environnement de laboratoire spécifique. Tous les périphériques utilisés dans ce document ont démarré avec une configuration effacée (par défaut). Si vous travaillez dans un réseau actif, assurez-vous de bien comprendre l'impact potentiel de toute commande avant de l'utiliser.

Conventions

Pour plus d'informations sur les conventions de document, consultez les conventions de conseils techniques de Cisco.


Créer plusieurs nouveaux fichiers de formes à l'aide des informations contenues dans un tableau - Systèmes d'information géographique

Le système de fichiers fourni avec votre ordinateur est un type très primitif de système de gestion de base de données. Que votre ordinateur soit livré avec le système de fichiers Unix, NTFS ou le système de fichiers Macintosh, l'idée de base est la même. Les données sont conservées dans de gros blocs nommés non structurés appelés des dossiers. L'avantage du système de fichiers est son invisibilité. Vous ne l'avez probablement pas acheté séparément, vous n'êtes peut-être pas au courant de son existence, vous n'aurez pas à passer une annonce dans le journal pendant un certain temps. administrateur du système de fichiers avec plus de 5 ans d'expérience, et cela fonctionnera à peu près comme annoncé. Tout ce que vous avez à faire avec un système de fichiers est de le sauvegarder sur bande tous les jours ou deux.

Malgré sa discrétion, le système de fichiers sur une machine Macintosh, Unix ou Windows est capable de stocker toutes les données qui peuvent être représentées sous forme numérique. Par exemple, supposons que vous stockiez une liste de diffusion dans un fichier de système de fichiers. Si vous acceptez la limitation selon laquelle aucune adresse e-mail ou nom de personne ne peut contenir de caractère de nouvelle ligne, vous pouvez enregistrer une entrée par ligne. Ensuite, vous pouvez décider qu'aucune adresse e-mail ou nom ne peut contenir de barre verticale. Cela vous permet de séparer les champs d'adresse e-mail et de nom avec le caractère de barre verticale.

Jusqu'à présent, tout est super. Tant que vous faites attention à ne jamais essayer de stocker une nouvelle ligne ou une barre verticale, vous pouvez conserver vos données dans ce "fichier plat". La recherche peut cependant être lente et coûteuse. Que faire si vous voulez voir si [email protected]" est sur la liste de diffusion ? Votre ordinateur doit lire l'intégralité du fichier pour vérifier.

  1. Les deux insertions réussissent.
  2. L'un des inserts est perdu.
  3. Les informations des deux inserts sont mélangées afin que les deux soient corrompus.

Tous les soldes des comptes courants sont stockés dans un fichier, verification.text , et tous les soldes d'épargne sont stockés dans un autre fichier, economies.text .

Quelques jours plus tard, une combinaison malchanceuse d'événements se produit. Joe User transfère 10 000 $ de ses économies sur son compte courant. Judy User dépose simultanément 5 $ sur son compte d'épargne. L'un de vos scripts Perl écrit avec succès le fichier à plat du compte courant avec le nouveau solde de Joe, supérieur de 10 000 $. Il écrit également le fichier du compte d'épargne avec le nouveau solde d'épargne de Joe, inférieur de 10 000 $. Cependant, le script qui traite le dépôt de Judy a commencé à peu près au même moment et a commencé avec la version du fichier d'épargne qui contenait le solde d'origine de Joe. Il finit par terminer et écrit le solde supérieur de 5 $ de Judy, mais remplace également le nouveau solde inférieur de Joe par l'ancien solde élevé. Où cela vous laisse-t-il ? 10 000 $ de moins et souhaitant que vous ayez le contrôle de la simultanéité.

Après quelques mois de programmation et de lecture de livres théoriques sur les systèmes d'exploitation des années 1960 qui traitent de l'exclusion mutuelle, vous avez résolu vos problèmes de concurrence. Toutes nos félicitations. Cependant, supposons qu'il s'agisse d'une entreprise Internet vers 2003 et donc que vous l'exécutiez hors de la maison de votre mère avec le serveur sous le canapé du salon. Vous avez sommeil, alors vous faites chauffer du café au micro-ondes et en même temps faites griller un bagel dans le four grille-pain. Le disjoncteur saute. Vous entendez le son écoeurant des disques qui tournent. Vous vous démenez pour remettre votre serveur en service et, en regardant les journaux, vous remarquez que Joe User transférait de nouveau 25 000 $ des économies à la vérification. Qu'est-il arrivé à la transaction de Joe ?

La bonne nouvelle pour Joe est que votre script Perl vient de finir de créditer son compte courant de 25 000 $. La mauvaise nouvelle pour vous, c'est qu'il n'avait pas vraiment commencé à débiter son compte épargne. Il est peut-être temps de regarder ce que les experts en traitement des transactions ont mis au point au cours des 50 dernières années.

De quoi avez-vous besoin pour le traitement des transactions ?

Les informaticiens aiment parler du "test ACID" lorsqu'ils décident si un système de gestion de base de données est adéquat ou non pour traiter les transactions. Un système adéquat possède les propriétés suivantes : Atomicité Les résultats de l'exécution d'une transaction sont soit tous validés, soit tous annulés. Tous les changements prennent effet, ou aucun ne le fait. Cela signifie, pour le transfert d'argent de Joe User, que ses soldes d'épargne et de contrôle sont ajustés ou qu'aucun des deux ne le sont. Cohérence La base de données est transformée d'un état valide à un autre état valide. Cela définit une transaction comme légale uniquement si elle obéit à des contraintes d'intégrité définies par l'utilisateur. Les transactions illégales ne sont pas autorisées et, si une contrainte d'intégrité ne peut pas être satisfaite, la transaction est annulée. Par exemple, supposons que vous définissiez une règle selon laquelle, après un transfert de plus de 10 000 $ hors du pays, une ligne est ajoutée à une table d'audit afin que vous puissiez préparer un rapport légalement requis pour l'IRS. Peut-être pour des raisons de performances, cette table d'audit est stockée sur un disque séparé du reste de la base de données. Si le disque de la table d'audit est hors ligne et ne peut pas être écrit, la transaction est abandonnée. Isolement Les résultats d'une transaction sont invisibles pour les autres transactions jusqu'à ce que la transaction soit terminée. Par exemple, si vous exécutez un rapport comptable en même temps que Joe transfère de l'argent, le programme de rapport comptable verra soit les soldes avant que Joe ne transfère l'argent ou après, mais jamais l'état intermédiaire où la vérification a été créditée mais pas les économies. encore débité. Durabilité Une fois validés (terminés), les résultats d'une transaction sont permanents et survivent aux futures pannes du système et des supports. Si l'ordinateur du système de réservation de la compagnie aérienne vous donne le siège 22A et s'écrase une milliseconde plus tard, il n'aura pas oublié que vous êtes assis en 22A et le donnera également à quelqu'un d'autre. De plus, si un programmeur renverse du café dans un lecteur de disque, il sera possible d'installer un nouveau disque et de récupérer les transactions jusqu'au renversement de café, montrant que vous aviez le siège 22A.

Cela ne semble pas trop difficile à mettre en œuvre, n'est-ce pas ? Une "simple affaire de programmation" comme aime à le dire notre ami Jin. Eh bien, vous avez toujours besoin d'indexation.

Trouver vos données (et rapidement)

Une facette d'un système de gestion de base de données est le traitement des insertions, des mises à jour et des suppressions. Tout cela a à voir avec la mise d'informations dans la base de données. Parfois, il est également agréable de pouvoir extraire des données. Et avec des sites de popularité moyenne recevant 20 requêtes par seconde, il vaut la peine d'être conscient de la vitesse.

Les fichiers plats fonctionnent bien s'ils sont très petits. Un script Perl peut lire l'intégralité du fichier en mémoire en une fraction de seconde, puis le parcourir pour extraire les informations demandées. Mais supposons que votre banque en ligne passe à 250 000 comptes. Un utilisateur tape son numéro de compte dans une page Web et demande ses dépôts les plus récents. Vous disposez d'un fichier de transactions financières chronologiques avec 25 millions d'entrées. Croquez, croquez, croquez. Votre serveur travaille laborieusement sur les 25 millions pour trouver ceux dont le numéro de compte correspond à celui de l'utilisateur. Pendant qu'il craque, 25 autres utilisateurs viennent sur le site Web et demandent les mêmes informations sur leurs comptes.

Vous avez deux choix : acheter un supercalculateur à 1000 processeurs ou créer un fichier d'index. Si vous créez un fichier d'index qui mappe les numéros de compte à des numéros de transaction séquentiels, votre serveur n'aura plus à rechercher tous les 25 millions d'enregistrements. Cependant, vous devez modifier tous vos programmes qui insèrent, mettent à jour ou suppriment de la base de données afin qu'ils maintiennent également l'index à jour.

Cela fonctionne très bien jusqu'à ce que deux ans plus tard, un tout nouveau MBA arrive de Harvard. Elle demande un « rapport de quota de tous les clients qui ont plus de 5 000 $ en chèques ou qui vivent dans l'Oklahoma et qui ont retiré plus de 100 $ de leurs économies au cours des 17 derniers jours". n'accélère pas les choses. Votre serveur doit parcourir toutes les données encore et encore.

Entrer dans la base de données relationnelle

"Les futurs utilisateurs de grandes banques de données doivent être protégés de la manière dont les données sont organisées dans la machine (la représentation interne). . Les activités des utilisateurs sur les terminaux et la plupart des programmes d'application ne devraient pas être affectées lorsque la représentation interne des données est modifiée et même lorsque certains aspects de la représentation externe sont modifiés. Des changements dans la représentation des données seront souvent nécessaires à la suite de changements dans le trafic de requêtes, de mises à jour et de rapports et de la croissance naturelle des types d'informations stockées.

"Les systèmes de données formatés non inférentiels existants fournissent aux utilisateurs des fichiers arborescents ou des modèles de réseau légèrement plus généraux des données. Dans la section 1, les insuffisances de ces modèles sont discutées. Un modèle basé sur des relations n-aires, une forme normale pour les relations de base de données et le concept d'un sous-langage de données universel sont introduits. Dans la section 2, certaines opérations sur les relations (autres que l'inférence logique) sont discutées et appliquées aux problèmes de redondance et de cohérence dans le modèle de l'utilisateur.

Cela semble assez chic, n'est-ce pas? Tout comme ce dont vous avez besoin. C'est le résumé de "Un modèle relationnel de données pour les grandes banques de données partagées", un article écrit par Codd alors qu'il travaillait au laboratoire de recherche d'IBM à San Jose. Il a été publié dans les Communications de l'ACM en juin 1970 et est disponible sur http://www.acm.org/classics/nov95/toc.html (ACM prétend représenter les meilleures pratiques qu'un homme d'affaires peut attendre d'un professionnel de l'informatique, leur version en ligne de l'article de Codd était à moitié terminée en 1995 et comporte une note « à venir » pour le reste. Est-il étonnant que des entreprises américaines déplacent des emplois informatiques vers l'Inde et la Chine ? un boulot nul, ça n'a pas de sens de le payer plus de 10$/heure.).

Oui, c'est vrai, 1970. Ce que vous devez faire, c'est déplacer votre site Web dans les années 70 avec l'un de ces nouveaux systèmes de gestion de bases de données relationnelles (SGBDR). En fait, comme le note Codd dans son article, la plupart des problèmes que nous avons rencontrés jusqu'à présent dans ce chapitre ont été résolus dans les années 1960 par des logiciels mainframe standard vendus par IBM et les "sept nains" (comme les concurrents d'IBM étaient connus). Au début des années 1960, les entreprises en avaient assez de perdre des transactions importantes et de ne pas corrompre manuellement les bases de données. Ils ont commencé à penser que leurs programmeurs d'applications ne devraient pas implémenter les transactions et l'indexation sur une base ad hoc pour chaque nouveau projet. Les entreprises ont commencé à acheter des logiciels de gestion de bases de données auprès de fournisseurs d'ordinateurs comme IBM. Ces produits ont assez bien fonctionné mais ont abouti à des modèles de données fragiles. Si vous avez obtenu une représentation correcte de vos données la première fois et que les besoins de votre entreprise n'ont jamais changé, une base de données hiérarchique de style 1967 était idéale. Malheureusement, si vous mettez un système en place et avez besoin par la suite de nouveaux index ou d'un nouveau format de données, vous devrez peut-être réécrire tous vos programmes d'application.

Du point de vue d'un programmeur d'applications, la plus grande innovation dans la base de données relationnelle est que l'on utilise un langage de requête déclaratif, SQL (acronyme de Structured Query Language et prononcé "ess-cue-el" ou "sequel"). La plupart des langages informatiques sont procéduraux. Le programmeur indique à l'ordinateur ce qu'il doit faire, étape par étape, en spécifiant une procédure. En SQL, le programmeur dit "Je veux des données qui répondent aux critères suivants" et le planificateur de requêtes SGBDR trouve comment les obtenir. Il y a deux avantages à utiliser un langage déclaratif. La première est que les requêtes ne dépendent plus de la représentation des données. Le SGBDR est libre de stocker les données comme il le souhaite. Le second est une fiabilité accrue du logiciel. Il est beaucoup plus difficile d'avoir un "a petit bug" dans une requête SQL que dans un programme procédural. En général, soit il décrit les données que vous voulez et fonctionne tout le temps, soit il échoue complètement de manière évidente.

Un autre avantage des langages déclaratifs est que les utilisateurs moins sophistiqués sont capables d'écrire des programmes utiles. Par exemple, de nombreuses tâches informatiques qui nécessitaient des programmeurs professionnels dans les années 1960 peuvent être accomplies par des personnes non techniques avec des feuilles de calcul. Dans une feuille de calcul, vous ne dites pas à l'ordinateur comment calculer les nombres ou dans quel ordre. Vous déclarez simplement "Cette cellule sera 1,5 fois la valeur de cette autre cellule là-bas."

Les SGBDR peuvent fonctionner très très lentement. Selon que vous vendez ou achetez des ordinateurs, cela peut vous contrarier ou vous ravir. Supposons que le système prenne 30 secondes pour renvoyer les données que vous avez demandées dans votre requête. Cela signifie-t-il que vous avez beaucoup de données ? Que vous avez besoin d'ajouter des indices? Que le planificateur de requêtes SGBDR a fait de mauvais choix et a besoin de conseils ? Qui sait? Le SGBDR est un programme extrêmement compliqué que vous n'avez pas écrit et dont vous n'avez pas le code source. Chaque fournisseur dispose d'outils de traçage et de débogage qui prétendent vous aider, mais le processus n'est pas simple. Bonne chance pour trouver une incantation SQL différente qui renverra le même ensemble de données en moins de temps. Si vous ne pouvez pas, appelez votre fournisseur de matériel et demandez-lui de vous envoyer 16 processeurs supplémentaires avec un maximum de RAM. Alternativement, vous pouvez continuer à utiliser le logiciel non relationnel que vous utilisiez dans les années 1960, ce que font les compagnies aériennes pour leurs systèmes de réservation.

Comment fonctionne ce SGBDR ?

Les chercheurs en bases de données adorent parler d'algèbre relationnelle, de n-uplets, de forme normale et de composition naturelle, tout en utilisant des symboles mathématiques. Cette patine d'obscurité mathématique a tendance à détourner votre attention de leurs mauvais costumes et de leurs personnalités ennuyeuses, mais n'a aucune valeur si vous souhaitez simplement utiliser un système de gestion de base de données relationnelle.

En fait, c'est tout ce que vous devez savoir pour être un programmeur de base de données Caveman : Une base de données relationnelle est une grande feuille de calcul que plusieurs personnes peuvent mettre à jour simultanément.

Comment plusieurs personnes peuvent-elles utiliser une feuille de calcul telle que Microsoft Exceller en même temps? Se relayeraient-ils au clavier et à la souris ? Se battre pour le clavier et la souris ? Se serrer la tête devant l'écran ?

Nous devons nous débarrasser de l'idée d'interaction souris/clavier/fenêtres. Cela n'a pas de sens lorsqu'il y a plusieurs utilisateurs simultanés. Imaginez plutôt que le système de gestion de base de données est assis tout seul dans un placard sombre. Les utilisateurs notent leurs demandes sur des bandes de papier et les glissent sous la porte. Une requête peut être "créer une table", "insérer une ligne dans une table", "mettre à jour une ligne existante dans une table", "me donner un rapport des informations contenues dans toutes les lignes d'une table qui répondent aux critères suivants . ". Si une demande nécessite une réponse, la base de données mâche la question pendant un certain temps, puis repousse un rapport papier sous la porte.

Examinons comment cela fonctionne plus en détail.

Chaque table de la base de données est une feuille de calcul. Vous indiquez au SGBDR le nombre de colonnes de chaque ligne. Par exemple, dans notre base de données de listes de diffusion, le tableau comporte deux colonnes : nom et e-mail . Chaque entrée de la base de données se compose d'une ligne dans ce tableau. Un SGBDR est plus restrictif qu'une feuille de calcul dans la mesure où toutes les données d'une colonne doivent être du même type, par exemple, entier, décimal, chaîne de caractères ou date. Une autre différence entre une feuille de calcul et un SGBDR est que les lignes d'un SGBDR ne sont pas ordonnées. Vous pouvez avoir une colonne nommée row_number et demander au SGBDR de renvoyer les lignes classées en fonction des données de cette colonne, mais la numérotation des lignes n'est pas implicite comme elle le serait avec un tableur. Si vous définissez une colonne row_number ou un autre identifiant unique pour les lignes d'une table, il devient possible pour une ligne d'une autre table de faire référence à cette ligne en incluant la valeur de l'ID unique.

Voici à quoi ressemble un peu de SQL pour l'application de liste de diffusion :

C'est la joie et l'agonie de SQL. L'insertion de deux mots d'apparence inoffensive peut vous coûter un facteur 1000 en termes de performances. Ensuite insérer une phrase (pour créer l'index) peut vous ramener à ce qu'elle ne soit que d'un facteur deux ou trois. (Notez que de nombreuses implémentations de SGBDR, y compris Oracle, définissent automatiquement un index sur une colonne qui est contrainte d'être unique.)

Quoi qu'il en soit, maintenant que nous avons exécuté l'instruction "create table" du Data Definition Language, nous pouvons passer au Data Manipulation Language : un INSERT.

Après avoir créé une table et inséré des données, nous sommes enfin prêts à découvrir la puissance impressionnante de SQL SELECT. Vous voulez récupérer vos données ?

  1. Vous obtiendrez un A dans un cours RDBMS dans une université d'État médiocre.
  2. Vous rencontrerez des lecteurs de Psychology Today qui pensent que vous êtes sensible et attentionné parce que vous parlez toujours de relations. [voir « Utiliser Internet pour ramasser des filles et/ou des mecs » sur http://philip.greenspun.com/wtr/getting-dates avant de suivre l'un des conseils de l'auteur sur les rencontres]

Quoi qu'il en soit, assez de nerdisme de base de données. Remplissons la table phone_numbers :

Les trois premiers INSERTS fonctionnent bien, mais qu'en est-il du dernier, où M. O'Grady a mal orthographié "beeper" ?

Disons que nous voulons que toutes nos données sortent.E-mail, nom complet, numéros de téléphone. La requête la plus évidente à essayer est une jointure .

Comme avec DELETE, ce n'est pas une bonne idée de jouer avec les instructions UPDATE à moins que vous n'ayez une clause WHERE à la fin.

SQL à la dure

Les problèmes difficiles dans les langages informatiques impératifs peuvent être très simples dans un langage déclaratif tel que SQL et vice versa. Regardons un exemple de création d'un rapport sur le nombre d'utilisateurs qui visitent un site chaque jour. En 1995, nous avons créé un site qui distribuait une clé de session unique à chaque nouvel utilisateur. Étant donné que les clés étaient une séquence ascendante d'entiers, nous avons réalisé que nous pouvions suivre le nombre d'utilisateurs venus sur le site en insérant simplement chaque jour une ligne d'audit indiquant la valeur du générateur de clés de session. Voici le tableau de l'historique :

Remarque : le type de données Oracle DATE est capable de représenter le temps avec une précision d'une seconde, un peu comme un ANSI TIMESTAMP (0) dans Oracle 9i et plus récent, vous utiliseriez probablement le type d'horodatage.

Maintenant que nous accumulons les données, il devrait être facile d'écrire une page de rapport, hein ? Il s'avère très simple d'extraire les lignes d'un tableau dans l'ordre, comme dans le dernier SELECT ci-dessus. Cependant, il est impossible qu'une ligne fasse référence à "la dernière ligne de ce SELECT". Vous auriez pu écrire une procédure C#, Java, PL/SQL ou VB pour parcourir les lignes dans l'ordre, en configurant simplement les choses lors du premier passage dans la boucle, puis en effectuant la soustraction appropriée pour les lignes suivantes. Cependant, courir dans les bras d'un langage informatique impératif est considéré comme de mauvais goût dans le monde SQL.

En SQL, vous commencez par réfléchir à ce que vous voulez et travaillez en arrière. Si la table d'historique a N lignes, nous voulons une table d'intervalles avec N-1 lignes. Chaque ligne doit avoir l'heure de début, l'heure de fin, l'intervalle de temps et l'intervalle de cookie. Chaque fois que vous avez besoin d'informations provenant de deux lignes différentes de la base de données, le moyen de les obtenir est d'utiliser un JOIN. Comme il n'y a qu'une seule table sous-jacente, cela devra être une jointure automatique :

Une note sur la syntaxe s'impose ici. Dans une liste SQL FROM, on peut attribuer un nom de corrélation à une table. Dans ce cas, h1 et h2 sont affectés aux deux copies de l'historique à partir desquelles nous sélectionnons. Ensuite, nous pouvons nous référer à h1.sample_time et obtenir "la colonne sample_time à partir de la première copie de la table d'historique."

Le principal problème avec cette requête, cependant, n'a rien à voir avec la syntaxe. C'est le fait que nous avons 13 lignes de trop. Au lieu de N-1 lignes, nous avons spécifié le produit cartésien et obtenu NxN lignes. Nous avons réussi une auto-jointure et obtenu tous les appariements dont nous avons besoin, mais aussi tous les autres appariements possibles. Il est maintenant temps de spécifier lequel de ces couples nous voulons dans notre rapport final :

Étant donné les paires de lignes correctes, il est facile d'ajouter une syntaxe à la liste SELECT pour soustraire les heures et les valeurs des cookies.

La formulation de requêtes SQL peut être un art et la plupart des programmeurs ont besoin de temps et d'expérience pour bien réfléchir de manière déclarative.

Brave Nouveau Monde

Former un perroquet gris d'Afrique au métier de responsable des systèmes d'information peut être très enrichissant. La phrase clé est "Nous exploitons de manière proactive notre base de données client/serveur orientée objet pour cibler le service client pendant la réingénierie". Dans le Brave New World des systèmes de gestion de bases de données, la phrase clé est « orientée objet ».

Les systèmes objets contribuent à la fiabilité et à la compacité des logiciels en permettant aux programmeurs de factoriser leur code en morceaux qui sont utilisés aussi largement que possible. Par exemple, supposons que vous construisiez un site Web de catalogue pour vendre des magazines, des vidéos, des livres et des CD. Il peut être intéressant de réfléchir aux données et fonctions communes à tous et de les encapsuler dans une classe de produits. Au niveau du produit, vous définiriez des caractéristiques telles que product_id, short_name et description . Ensuite, vous définiriez une sous-classe de magazine qui hériterait de tout le comportement du produit et ajouterait des éléments tels que issues_per_year .

Les programmeurs utilisant des langages informatiques modernes comme Smalltalk et Lisp le font depuis le milieu des années 1970, mais l'idée n'a fait son chemin que récemment dans le monde des SGBDR. Voici quelques définitions de table pour le système Illustra, un dérivé de l'U.C. Projet de recherche Berkeley Postgres :

Ce Brave New World sonne bien dans les brochures des fournisseurs de SGBD, mais l'expérience réelle n'est pas toujours merveilleuse. En 1995, nous utilisions Illustra et nous nous sommes construit une belle hiérarchie de tables plus ou moins comme décrit ci-dessus. Six mois plus tard, nous devions ajouter une colonne au tableau des produits. E.F. Codd a compris en 1970 que les modèles de données devaient évoluer en fonction de l'évolution des besoins de l'entreprise. Mais les gens d'Illustra étaient tellement excités par leurs extensions d'objets qu'ils en ont oublié. Le système n'a pas pu ajouter une colonne à une table avec des sous-classes dépendantes. Que devons-nous faire, avons-nous demandé aux gens de l'assistance ? "Dumpez les données de toutes vos tables, supprimez-les toutes, reconstruisez-les avec la colonne ajoutée, puis rechargez toutes vos données dans vos tables."

Meilleur Nouveau Monde

Si vous voulez vraiment être à la pointe de la technologie, vous pouvez utiliser une base de données d'objets authentique, comme ObjectStore (http://www.objectstore.net). Ces systèmes stockent en permanence les types de structures d'objets et de pointeurs que vous créez dans un programme Smalltalk, Common Lisp, C++ ou Java. La poursuite des pointeurs et certains types de transactions peuvent être 10 à 100 fois plus rapides que dans une base de données relationnelle. Si vous croyiez tout dans la littérature des fournisseurs de bases de données d'objets, vous seriez surpris que Larry Ellison ait encore des billets de 100 $ à lancer aux paysans alors qu'il rugit au-dessus de lui dans son jet Gulftream. Le système de gestion de bases de données relationnelles aurait dû être écrasé depuis longtemps sous le poids de cette technologie supérieure, introduite avec un énorme battage publicitaire au début des années 1980.

Après 20 ans, le marché des systèmes de gestion de bases de données objet est d'environ 100 millions de dollars par an, soit moins de 1 % de la taille du marché des bases de données relationnelles. Pourquoi le pétillement ? Les bases de données d'objets ramènent certaines des mauvaises caractéristiques des systèmes de gestion de bases de données pré-relationnelles des années 1960. Le programmeur doit en savoir beaucoup sur les détails du stockage des données. Si vous connaissez les identités des objets qui vous intéressent, la requête est simple et rapide. Mais il s'avère que la plupart des utilisateurs de bases de données ne se soucient pas des identités d'objets, mais des attributs d'objets. Les bases de données relationnelles ont tendance à être plus rapides et plus efficaces pour produire des agrégations basées sur des attributs.

Gardez à l'esprit que si jamais les bases de données d'objets a fait devenu populaire, cela rendrait l'utilisation de Java ou de C# comme langage de script de page beaucoup plus attrayante. Actuellement, les systèmes de types sophistiqués des langages informatiques avancés ne sont pas très utiles pour le développement d'applications Internet. Les seules choses qui peuvent être stockées de manière persistante, c'est-à-dire du chargement de la page au chargement de la page, dans un SGBDR sont les nombres, les dates et les chaînes. En théorie, il est possible d'écrire un programme Java complexe qui effectue une requête SQL, crée une énorme collection d'objets interconnectés, sert une page à l'utilisateur, puis se ferme. Mais pourquoi le feriez-vous ? Cette collection d'objets interconnectés doit être supprimée dès que la page est servie, puis reconstituée la prochaine fois que l'utilisateur demande une page, ce qui peut être 1 seconde plus tard ou 2 jours plus tard. Si, d'un autre côté, les objets créés par un programme C# ou Java étaient efficacement rendus persistants, cela rendrait l'application de ces gros marteaux aux scripts Web beaucoup moins ridicule.

Choisir un fournisseur de SGBDR

On pourrait penser que peu importe le SGBDR que vous utilisez derrière un site Web, car chaque SGBDR est livré avec une interface SQL standard. En fait, les versions de SQL des fournisseurs sont suffisamment différentes pour que le portage d'un SGBDR à un autre soit généralement un cauchemar. Prévoyez de vivre avec votre choix pendant 5 ou 10 ans.
  1. coût/complexité à administrer
  2. système de gestion de serrure
  3. option d'indexation de texte intégral
  4. longueur maximale du type de données VARCHAR
  5. Support

Coût/complexité à administrer

Dans le mauvais vieux temps, vous pouviez installer Oracle sur un ordinateur à 500 000 $ et accepter toutes les valeurs par défaut, puis constater que le segment de restauration était d'environ 15 Mo. Cela signifie que vous ne pouvez pas effectuer une transaction mettant à jour plus de 15 Mo de données à la fois sur un ordinateur disposant de 200 Go d'espace disque libre. Par défaut, Oracle ne se contenterait pas de récupérer un peu plus d'espace disque.

L'administration bâclée du SGBDR est l'une des causes les plus courantes de temps d'arrêt sur des sites sophistiqués. Si vous n'êtes pas sûr d'avoir une équipe expérimentée d'administrateurs de bases de données à consacrer à votre site, vous voudrez peut-être vous demander si un "SGBDR d'entreprise" est vraiment fait pour vous. Les trois grands SGBDR sont IBM DB2, Microsoft SQL Server et Oracle. Tous offrent une grande flexibilité de configuration en vue de créer des systèmes à 64 processeurs qui traitent un nombre absurde de transactions simultanées. Tous affirment que leurs outils de gestion les plus récents et les plus performants rendent l'installation et l'administration du système si faciles qu'un enfant de 10 ans pourrait le faire. Si ces affirmations étaient vraies, le Starbucks local serait encombré d'administrateurs de bases de données au chômage. La concurrence midget est fournie par l'open source PostgreSQL, qui ne peut pas être adapté aux grandes tailles et aux performances des SGBDR commerciaux, mais est intrinsèquement assez simple à installer et à maintenir (et c'est gratuit !). MySQL est populaire parmi les utilisateurs de Linux et parce qu'il a une interface SQL, il est souvent confondu avec un SGBDR. En fait, il ne fournit pas les garanties de transaction ACID et serait donc plus correctement regroupé avec Microsoft Accès et des outils de bureau similaires.

Système de gestion de serrure

Des systèmes de gestion de bases de données relationnelles existent pour prendre en charge les utilisateurs simultanés. Si vous n'avez pas de personnes mettant à jour simultanément les informations, vous feriez probablement mieux d'utiliser un simple script Perl, Microsoft Accès, ou MySQL plutôt qu'un SGBDR commercial (c'est-à-dire 100 Mo du code C de quelqu'un d'autre).

Tous les systèmes de gestion de base de données gèrent les problèmes de concurrence avec les verrous. Avant qu'une instruction en cours d'exécution puisse modifier certaines données, elle doit saisir un verrou. Tant que ce verrou est maintenu, aucune autre instruction SQL s'exécutant simultanément ne peut mettre à jour les mêmes données. Afin d'empêcher un autre utilisateur de lire des données à moitié mises à jour, pendant que ce verrou est maintenu, aucune instruction SQL à exécution simultanée ne peut même lis les données.

Les lecteurs doivent attendre que les écrivains aient fini d'écrire. Les écrivains doivent attendre que les lecteurs aient fini de lire.

Ce type de système, appelé verrouillage pessimiste, est simple à mettre en œuvre, fonctionne très bien dans le laboratoire de recherche et peut être prouvé mathématiquement correct. Le seul problème avec cette approche est qu'elle ne fonctionne souvent pas dans le monde réel des développeurs pressés et de plusieurs utilisateurs simultanés. Ce qui peut arriver, c'est qu'une page d'administration sur un site de commerce électronique, par exemple, contienne une requête de rapport qui prend une heure à s'exécuter et touche toutes les lignes des tableaux des utilisateurs et des commandes. Pendant que cette requête est en cours d'exécution, aucun des utilisateurs des pages publiques ne peut s'inscrire ou passer des commandes.

Avec le SGBDR Oracle, les lecteurs n'attendent jamais les écrivains et les écrivains n'attendent jamais les lecteurs. Si un SELECT commence à lire à 9h01 et rencontre une ligne qui a été mise à jour (par une autre session) à 9h02, Oracle atteint un segment d'annulation et récupère la valeur de pré-mise à jour pour le SELECT (cela préserve le Isolation exigence du test ACID). Une transaction n'a pas besoin de prendre de verrous à moins qu'elle ne modifie une table et, même dans ce cas, ne prend des verrous que sur les lignes spécifiques qui doivent être modifiées.

C'est le type d'architecture de verrouillage SGBDR que vous souhaitez pour un site Web et, depuis 2003, elle n'est fournie que par Oracle et Postgres.

Option d'indexation de texte intégral

Cela nécessite que le SGBDR lise chaque ligne de la table, ce qui est lent. De plus, cela ne fera pas apparaître les magazines dont la description comprend le mot "dog".

Un indexeur de texte intégral crée une structure de données (l'index) sur le disque afin que le SGBDR n'ait plus à parcourir la table entière pour trouver des lignes contenant un mot ou une combinaison de mots particulier. Le logiciel est suffisamment intelligent pour pouvoir penser en termes de racines de mots plutôt que de mots. Ainsi, "running" et "run" ou "dog" et "dogs" peuvent être interchangés dans les requêtes. Les indexeurs de texte intégral sont également généralement capables d'évaluer la pertinence d'une phrase saisie par l'utilisateur par rapport à une table de documents de base de données afin que vous puissiez rechercher les correspondances les plus pertinentes.

Enfin, les moteurs de recherche de texte modernes sont très intelligents sur la relation entre les mots. Ainsi, ils pourraient livrer un document qui ne contenait pas le mot "dog" mais contenait "Golden Retriever". Cela rend les services tels que les petites annonces, les forums de discussion, etc., beaucoup plus utiles aux utilisateurs.

Les fournisseurs de systèmes de gestion de bases de données relationnelles intègrent progressivement l'indexation de texte intégral dans leurs produits. Malheureusement, il n'y a pas de norme pour les requêtes à l'aide de cet index. Ainsi, si vous savez comment interroger Oracle Text pour les "lignes relatives à "en cours d'exécution" ou à ses synonymes", la syntaxe SQL ne sera pas utile pour poser la même question à Microsoft SQL Server avec son option d'indexation de texte intégral.

Longueur maximale du type de données VARCHAR

Vous pourriez naïvement vous attendre à ce qu'un système de gestion de base de données relationnelle fournisse une abstraction pour le stockage des données. Après avoir défini une colonne pour contenir une chaîne de caractères, vous vous attendriez à pouvoir donner au SGBD une chaîne de dix caractères ou une chaîne d'un million de caractères et que chacun soit stocké aussi efficacement que possible.

En pratique, les systèmes commerciaux actuels sont très mauvais pour stocker des données d'une longueur inattendue, par exemple, Oracle ne vous permet d'avoir que 4 000 caractères dans un VARCHAR. C'est correct si vous construisez un système de comptabilité d'entreprise mais mauvais pour un site Web public. Vous ne pouvez pas vraiment savoir combien de temps durera la publication d'une annonce ou d'un tableau d'affichage d'un utilisateur. La norme SQL prévoit un type de données LONG pour gérer ce genre de situation et les fournisseurs de bases de données modernes fournissent souvent des objets de grande taille (CLOB). Ces types vous permettent théoriquement de stocker des données arbitrairement volumineuses. Cependant, en pratique, il y a tellement de restrictions sur ces colonnes qu'elles ne sont pas très utiles. Par exemple, vous ne pouvez pas les utiliser dans une clause SQL WHERE et donc le "LIKE '%dogs%'" ci-dessus serait illégal. Vous ne pouvez pas créer un index standard sur une colonne LONG. Vous pouvez également avoir du mal à faire entrer ou sortir des chaînes de colonnes LONG. L'analyseur Oracle SQL n'accepte que les littéraux de chaîne d'une longueur maximale de 4 000 caractères. Après cela, vous devez utiliser des appels API C spéciaux.

Actuellement, PostgreSQL semble être le leader dans ce domaine. Vous pouvez déclarer une colonne à caractère variable ou texte et stocker une chaîne d'une taille maximale d'environ 1 Go.

Payer un fournisseur de SGBDR

C'est la partie qui fait mal. La stratégie de tarification de base des fournisseurs de systèmes de gestion de bases de données consiste à raccrocher l'utilisateur par les talons, à voir combien d'argent tombe, à tout prendre, puis à demander 50 000 $ supplémentaires pour le "support". Idéalement, ils aimeraient savoir combien valent vos données et quel profit vous attendez de leur mise à disposition, puis extraire tout ce profit de vous. À cet égard, ils se comportent comme le monopole classique de maximisation des profits discriminant par les prix de Microéconomie 101.

Classiquement, une licence SGBDR était facturée par utilisateur. Les grandes compagnies d'assurance avec 1000 processeurs de réclamations paieraient plus que les petites entreprises avec 5. Le Web a confondu les fournisseurs de SGBDR. D'une part, le serveur était accessible à tous, partout dans le monde. Ainsi, l'arrangement équitable serait une licence d'utilisateur illimitée de 64 000 $ par CPU. D'un autre côté, peu d'éditeurs Web disposaient en réalité de 64 000 $ par processeur sur leurs comptes courants. Ainsi, les vendeurs de SGBDR se contenteraient de vendre une licence pour 5 ou 8 utilisateurs.

Si vous ne supportez pas les prix des systèmes commerciaux, jetez un coup d'œil à PostgreSQL. Le développement d'une menace crédible pour l'utilisation de PostgreSQL peut entraîner une certaine flexibilité des prix de la part des vendeurs de SGBDR commerciaux.

Performance

Chaque fournisseur de SGBDR prétend avoir le système le plus rapide au monde. Peu importe ce que vous lisez dans les brochures, soyez assuré que tout produit SGBDR sera très lent. Dans les années 90, nous avions 70 000 lignes de données à insérer dans Oracle8. Chaque rangée contenait six nombres. Il s'est avéré que les données n'étaient pas dans le format le plus pratique pour l'importation, nous avons donc écrit un script Perl d'une ligne pour les reformater. Il a fallu moins d'une seconde pour lire les 70 000 lignes, les reformater et les réécrire sur le disque dans un seul fichier. Ensuite, nous avons commencé à les insérer dans une table Oracle 8, une insertion SQL à la fois. Cela a pris environ 20 minutes (60 lignes/seconde). Ceci malgré le fait que la table n'était pas indexée et qu'Oracle n'avait donc pas à mettre à jour plusieurs emplacements sur le disque.

Il existe plusieurs façons d'atteindre des performances élevées. L'une consiste à acheter un énorme ordinateur multiprocesseur avec suffisamment de RAM pour contenir l'intégralité du modèle de données à la fois. Malheureusement, à moins que vous n'utilisiez PostgreSQL, votre fournisseur de SGBDR donnera probablement à votre compte bancaire un alésage qu'il n'oubliera pas de sitôt. Les frais de licence seront quatre fois plus élevés pour une machine à quatre processeurs que pour une machine à un processeur. Ainsi, il serait peut-être préférable d'essayer de mettre la main sur l'ordinateur à processeur unique le plus rapide possible.

Si vous traitez beaucoup de transactions, tous ces processeurs hérissés de RAM ne vous aideront pas. Votre goulot d'étranglement sera un conflit de broche de disque. La solution consiste à chanter "Oh quel ami j'ai dans Seagate". Les disques sont lents. Très lent. Littéralement près d'un million de fois plus lent que l'ordinateur. Par conséquent, l'ordinateur passe beaucoup de temps à attendre le(s) disque(s). Vous pouvez accélérer les SELECT SQL simplement en achetant tellement de RAM que toute la base de données est en mémoire. Cependant, l'exigence de durabilité dans le test ACID pour les transactions signifie qu'un enregistrement d'une transaction devra être écrit sur un support qui ne sera pas effacé en cas de panne de courant. Si un disque ne peut effectuer que 100 recherches par seconde et que vous n'avez qu'un seul disque, votre SGBDR aura du mal à effectuer plus d'environ 100 mises à jour par seconde.

La première chose à faire est de mettre en miroir tous vos disques. Si vous n'avez pas toute la base de données en RAM, cela accélère les SELECT car le contrôleur de disque peut lire à partir du disque le plus proche de la piste souhaitée. L'effet inverse peut être obtenu si vous utilisez "RAID niveau 5" où les données sont réparties sur plusieurs disques. Ensuite, le SGBDR doit attendre cinq disques pour rechercher avant de pouvoir cracher quelques lignes. La mise en miroir directe, ou "RAID niveau 1", est ce que vous voulez.

La prochaine décision que vous devez prendre est "Combien de disques ?" Le manuel Oracle9i DBA (Loney 2001 Oracle Press) recommande une configuration de disque 7x2 comme compromis minimum pour une machine ne faisant rien d'autre que le service de base de données. Leurs solutions commencent à 9x2 disques et vont jusqu'à 22x2. L'idée est de conserver les fichiers qui pourraient être écrits en parallèle sur des disques séparés afin que l'on puisse faire 2200 recherches/seconde au lieu de 100.

Voici la solution à 17 disques (en miroir X2) de Kevin Loney pour éviter les conflits de broche :

DisqueContenu
1 Logiciel Oracle
2 Espace disque logique SYSTEM
3 Tablespace RBS (segment d'annulation au cas où une transaction se passe mal)
4 Tablespace DATA
5 Tablespace INDEXES (la modification des données nécessite la modification des index, ce qui permet à ces modifications de se dérouler en parallèle)
6 Espace disque logique TEMP
7 tablespace TOOLS
8 Redo log 1, fichier de contrôle 1 (ceux-ci seraient séparés sur une machine à 22 disques)
9 Redo log 2 en ligne, fichier de contrôle 2
10 Redo log 3 en ligne, fichier de contrôle 3
11 Logiciel d'application
12 RBS_2
13 DATA_2 (tables qui ont tendance à être saisies en parallèle avec celles de DATA)
14 INDEX_2
15 TEMP_USER
16 Disque de destination du journal redo archivé
17 Exporter le disque de destination du fichier de vidage

[Un autre domaine dans lequel les bases de données commerciales peuvent être beaucoup plus rapides que PostgreSQL traite 50 transactions simultanées de 50 utilisateurs différents. Dans une implémentation naïve du SGBDR, ceux-ci seraient alignés dans l'ordre, un journal de la transaction 1 serait écrit sur le disque, puis l'utilisateur de la base de données qui l'aurait demandé serait informé du succès, la transaction 2 serait alors traitée et, après une autre écriture sur le disque, être déclaré un succès. Oracle, cependant, est assez intelligent pour dire "environ 50 transactions sont arrivées presque au même moment, donc j'écrirai un gros bloc d'informations sur le disque, puis je reviendrai aux 50 utilisateurs pour les informer du succès de leur transaction. " Ainsi, les performances en théorie pourraient être 50 fois meilleures avec Oracle (1 écriture sur disque) qu'avec PostgreSQL (50 écritures sur disque).]

N'oubliez pas de sauvegarder

Avoir peur. Ayez très peur. Les sauvegardes standard du système de fichiers Unix ou Windows ne vous laisseront pas une base de données cohérente et donc restaurable sur bande. Supposons que votre SGBDR stocke votre base de données dans deux fichiers de système de fichiers distincts, foo.db et bar.db. Chacun de ces fichiers a une taille de 200 Mo. Vous démarrez votre programme de sauvegarde et il écrit le fichier foo.db sur bande. Au fur et à mesure que la sauvegarde se poursuit, une transaction entre en jeu et nécessite des modifications de foo.db et bar.db. Le SGBDR effectue ces modifications, mais celles de foo.db concernent une partie du fichier qui a déjà été écrite sur bande. Finalement, le programme de sauvegarde écrit bar.db sur bande et écrit la nouvelle version avec la modification. Votre administrateur système arrive à 9h00 et envoie les bandes par coursier à une installation de stockage hors site.

À midi, une affreuse foule d'utilisateurs se rassemble devant votre bureau, irritée par votre ajout d'une page d'accueil d'animation Flash. Vous envoyez l'un de vos graphistes expliquer à quoi il ressemblait lorsqu'il était exécuté sur un disque local dans une démo au vice-président. La foule le lapide à mort et brûle ensuite votre ferme de serveurs. Vous parvenez à sortir des décombres avec l'un de ces claviers HP Unix indestructibles. Vous parvenez à faire en sorte que les personnes chargées de l'assistance en cas de sinistre HP vous laissent utiliser leurs machines pendant un certain temps et chargent en toute confiance votre bande de sauvegarde. À votre horreur, le RDBMS étouffe le sang après la restauration. Il s'est avéré qu'il y avait des structures de données liées dans foo.db et bar.db. La moitié des structures de données (celles de foo.db) sont l'"ancienne version pré-transaction" et l'autre moitié est la "nouvelle version post-transaction" (celles de bar.db). Une transaction survenant lors de votre sauvegarde a entraîné une perte totale de disponibilité pour l'ensemble de vos données. Vous pensez peut-être que ce n'est pas la conception de SGBDR la plus robuste au monde, mais il n'y a rien dans la norme SQL ou la documentation du fabricant qui indique qu'Oracle ou Microsoft SQL Server ne peut pas fonctionner de cette façon.

La mise en miroir complète vous empêche de vous déconnecter en raison d'une panne de support. Mais vous avez toujours besoin d'instantanés de votre base de données au cas où quelqu'un serait un peu excité par une instruction DELETE FROM ou dans la situation décrite ci-dessus.

Il existe deux manières de sauvegarder une base de données relationnelle : hors ligne et en ligne. Pour une sauvegarde hors ligne, vous fermez les bases de données, empêchant ainsi les transactions de se produire. La plupart des fournisseurs préféreraient que vous utilisiez leur utilitaire pour créer un fichier de vidage de votre base de données hors ligne, mais en pratique, il suffira de sauvegarder les fichiers du système de fichiers Unix ou Windows. La sauvegarde hors ligne est généralement utilisée par les compagnies d'assurance et d'autres utilisateurs de grandes bases de données qui n'ont besoin d'effectuer des transactions que huit heures par jour.

Chaque fournisseur de SGBDR a une manière annoncée de faire des sauvegardes en ligne. Cela peut être aussi simple que "appeler cette fonction et nous allons travailler pendant quelques heures pour vous créer un fichier de vidage contenant une base de données cohérente, mais sans toutes les transactions qui se sont produites après l'appel de la fonction. Voici un exemple Oracle :

  • Brisez le miroir.
  • Sauvegardez à partir des disques hors ligne en ce qui concerne la base de données.
  • Rétablir le miroir.

Les leçons ici sont plusieurs. Tout d'abord, quelle que soit votre procédure de sauvegarde, assurez-vous de la tester avec des restaurations périodiques. Deuxièmement, n'oubliez pas que la sauvegarde et la maintenance d'un SGBDR sont effectuées par un employé à temps plein dans la plupart des entreprises, appelé "the dba", abréviation de "database administrator". Si le logiciel fonctionnait comme annoncé, vous pouvez vous attendre à quelques jours de douleur pendant l'installation, puis à une douleur récurrente périodique pour rester à jour avec des fonctionnalités améliorées. Cependant, les dba gagnent leurs salaires modérément somptueux. Aucun battage publicitaire ne suffit pour qu'un programme C fonctionne comme annoncé. Cela vaut autant pour un SGBDR que pour un traitement de texte. Résoudre les bogues peut être un travail à temps plein dans une grande installation. Le plus souvent, cela signifie trouver des solutions de contournement, car les fournisseurs sont notoirement lents avec les correctifs. Un autre travail à temps plein consiste à rechercher les utilisateurs qui effectuent des requêtes qui prennent 1000 fois plus de temps que nécessaire parce qu'ils ont oublié de créer des index ou ne connaissent pas très bien SQL. L'hôpital pour enfants a trois administrateurs à temps plein et ils travaillent dur.

Terminons en citant Perrin Harkins. Un participant à un forum de discussion a demandé si la mise en cache des requêtes de base de données dans les fichiers Unix accélérerait son serveur Web. Voici la réponse de Perrin :

Résumé

  • Vous et vos programmeurs ferez des erreurs en mettant en œuvre des systèmes de traitement des transactions. Vous feriez mieux de concentrer vos énergies sur l'application et de laisser l'indexation, les transactions et la concurrence à un système de gestion de base de données.
  • Le logiciel de gestion de base de données le plus pratique pour les sites Web est un système de gestion de base de données relationnelle avec un indexeur de texte intégral.
  • Si vous pouvez programmer une feuille de calcul, vous pouvez programmer un SGBDR en SQL.
  • Les SGBDR sont lents. Préparez-vous à acheter une grosse machine avec beaucoup de disques.
  • Les SGBDR, bien que beaucoup plus fiables que la plupart des codes de traitement des transactions écrits par l'utilisateur, ne sont pas aussi fiables qu'un serveur Web de base extrayant des fichiers statiques d'un système de fichiers. Préparez-vous à embaucher un administrateur de base de données à mi-temps ou à temps plein si votre base de données atteint une taille importante.
    est le didacticiel SQL court, agréable, gratuit et disponible sur le Web de l'auteur
  • Le Manuel pratique de SQL (Bowman, Emerson, Darnovsky 1996 Addison-Wesley) est mon didacticiel d'introduction SQL préféré. Si vous voulez voir comment le langage est utilisé dans des installations réelles, procurez-vous SQL pour Smarties : Advanced SQL Programming (Joe Celko 1999 Morgan Kaufmann).
  • Pour un historique intéressant de la première implémentation de la base de données relationnelle, visitez http://www.mcjones.org/System_R/
  • Pour un aperçu des différents systèmes de gestion de bases de données, consultez Readings in Database Systems (Stonebraker et Hellerstein 1998 Morgan Kaufmann)
  • Construire un système de base de données orienté objet vous aidera à enlever vos œillères SGBDR car il décrit le O2 système.

Commentaires du lecteur

Il est regrettable que cette page contribue à perpétuer les mythes et la désinformation sur les bases de données.

Par example:

Il dit qu'il existe des SGBDR sur le marché aujourd'hui. Il n'y en a qu'un, Alphora Dataphor. Tous les autres sont des SGBD SQL, et SQL viole trop de principes fondamentaux du modèle relationnel pour être qualifié de langage relationnel. Par conséquent, les SGBD SQL ne sont pas des SGBDR.

En conséquence, il indique que les SGBDR sont lents. Les SGBD SQL sont lents, mais les SGBDR n'ont pas besoin de l'être, car le modèle relationnel définit que le modèle physique peut être très différent du modèle logique de la base de données. Ainsi, on peut garder un modèle logique propre tout en implémentant toutes sortes d'optimisations au niveau physique. C'est ce que les optimiseurs SQL essaient de faire, mais en raison de la complexité SQL et de la confusion du modèle logique et physique, ils échouent.

Je suis d'accord avec l'affiche ci-dessus en ce que l'auteur confond un SGBD SQL ou une base de données relationnelle. Cependant, je peux pardonner à l'auteur pour cela parce que c'est si courant dans l'industrie (même s'il est du MIT).

La lenteur de la plupart des bases de données lors de l'insertion est due au fait que la plupart des systèmes de base de données forcent les données sur le disque après chaque insertion. Il s'agit d'une "fonctionnalité" de sécurité et non d'un "bug" de performance et n'a rien à voir avec les performances. Le simple fait d'envelopper l'ensemble du processus de chargement dans une transaction aurait dû résoudre le problème.

Les commentaires de l'auteur sur le fait que PostgreSQL n'est pas évolutif et que les systèmes commerciaux sont incorrects. PostgreSQL a implémenté la journalisation en écriture anticipée (c'est ce dont il parle) avec la version 7.2 en 2002. De plus, PostgreSQL a MVCC, ce qui le rend très, très scabale. certaines implémentations commerciales n'ont même pas cela, par exemple le serveur MS SQL.

Merlin

Phil a quelque peu tort à propos des fournisseurs qui prennent en charge le verrouillage au niveau des lignes. MS prend en charge le verrouillage au niveau des lignes depuis SQL Server 7.0. En pratique, son gestionnaire de transactions décide de la granularité d'un verrou en fonction des paramètres de la requête. Si trop de lignes individuelles doivent être verrouillées dans une transaction (selon un certain "seuil d'escalade de verrouillage"), la table entière sera verrouillée.


Données et outils du TRI

Le programme d'inventaire des rejets toxiques (TRI) suit la gestion industrielle des produits chimiques toxiques qui peuvent nuire à la santé humaine et à l'environnement.

Les données du TRI sont déclarées par certaines installations industrielles et fédérales. L'EPA rend ces données disponibles via plusieurs outils en ligne, dont beaucoup ajoutent un contexte pour aider à rendre les données rapportées plus compréhensibles.

Sur cette page:

Données du TRI telles que déclarées par les établissements

Envirofacts Formulaire R Recherche

La description:Obtenez une liste de tous les formulaires de déclaration TRI soumis par une installation dans son historique TRI et consultez les formulaires pour tous les produits chimiques déclarés.

Contenu:Données déclarées par l'établissement

Production:Fac-similé du formulaire de rapport TRI

Envirofacts Formulaire R & Formulaire A Télécharger

La description:Sélectionnez et affichez des éléments de données spécifiques du formulaire de déclaration TRI R et du formulaire de déclaration A.

Contenu:Données déclarées par l'établissement

Production:fichiers .csv ou tableaux .html

Rapports nationaux/fiches d'information

Fiches d'information sur le TRI

La description:Aperçu des données du TRI pour un emplacement, un secteur industriel ou un produit chimique. Idéal pour les utilisateurs débutants de TRI. Également disponible en espagnol.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production: Fiches d'information imprimables

Analyse nationale du TRI

La description:Une analyse annuelle des données du TRI dans un format narratif et graphique. Les cartes, graphiques et tableaux interactifs mettent en évidence les données au niveau national, tandis que les fiches d'information détaillent des zones géographiques spécifiques.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production:Fiches d'information imprimables sur les rapports interactifs en ligne

Outils TRI pour la plupart des utilisateurs

Recherche TRI

La description:Recherchez des établissements TRI à proximité d'une adresse ou d'un emplacement ou par nom d'établissement et consultez les données TRI de niveau récapitulatif pour chacun. Les résultats comprennent des informations sur les rejets dans l'environnement, les caractéristiques de la population, la prévention de la pollution, ainsi que la conformité et l'application de la loi. Idéal pour les utilisateurs débutants de TRI et pour une utilisation sur des appareils mobiles.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production: Résultats de la recherche organisés en sections thématiques cartes, tableaux et graphiques personnalisables téléchargements de données résumés imprimables

Explorateur TRI

La description:Recherchez par produit chimique, emplacement, secteur industriel ou territoire tribal. Concentrez-vous sur les rejets chimiques, les transferts de déchets ou les quantités de déchets.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production: Rapports composés de tableaux de données triables (la plupart incluent la possibilité d'explorer les formulaires de rapport individuels d'un établissement), de fichiers .csv/.txt compatibles avec les feuilles de calcul, ou de résultats en versions PDF/Word

Recherche TRI Envirofacts

La description:Explorez les informations de base au niveau de l'installation pour toute installation ayant déclaré des données TRI depuis 1987. Recherchez par nom d'installation, produit chimique, emplacement, secteur industriel ou territoire tribal.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production: Liste des installations avec des liens pour afficher un rapport d'installation détaillé, un rapport de prévention de la pollution ou un rapport de dépistage des risques pour chacun.

Données et outils TRI pour une analyse avancée/personnalisée

Fichiers de données de base

La description:Données pour une année de déclaration contenues dans un seul fichier de données, pour un État individuel ou l'ensemble des États-Unis. Chaque fichier contient les éléments de données les plus couramment utilisés du formulaire de déclaration TRI. Il s'agit d'un ensemble de données plus simple, par rapport aux fichiers Basic Plus. Recommandé pour les utilisateurs familiarisés avec les données TRI.

Contenu:Données déclarées par l'établissement

Production: fichiers .csv

Fichiers de données Basic Plus

La description:Données pour une année de déclaration pour l'ensemble des États-Unis. Chaque fichier .zip est composé de 10 fichiers .txt qui contiennent collectivement tous les éléments de données du formulaire de déclaration TRI (à l'exception du formulaire R annexe 1, qui est disponible séparément). Recommandé pour les utilisateurs familiarisés avec les données TRI.

Contenu:Données déclarées par l'établissement

Production:Fichiers .txt délimités par des tabulations compressés en fichiers .zip.

Recherche personnalisée d'Envirofacts

La description:Créez des rapports sur plusieurs domaines d'intérêt à l'aide d'un ensemble complet d'éléments de données TRI. De tous les outils TRI en ligne, celui-ci offre la plus grande flexibilité dans la création d'une recherche et le choix de l'organisation des résultats. Recommandé pour les utilisateurs familiarisés avec les requêtes de base de données.

Contenu:Données déclarées par l'établissement

Production: tableau .html ou fichier .csv

Recherche Envirofacts EZ

La description:Créez des rapports sur plusieurs domaines d'intérêt. Offre le même ensemble complet d'options d'organisation des résultats que la recherche personnalisée, mais avec un moyen plus simple de sélectionner les zones d'intérêt. Regroupement des données et fonctions statistiques disponibles. Recommandé pour les utilisateurs familiarisés avec les requêtes de base de données.

Contenu:Données déclarées par l'établissement

Production: fichiers .csv ou tableaux html

Données et outils thématiques

Recherche tribale TRI (données pour les installations sur ou à proximité des terres tribales)

La description:Données de niveau récapitulatif sur les rejets et autres activités de gestion des déchets chimiques déclarées par le TRI dans les installations situées sur ou à moins de 16 km des terres tribales.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production:Tableaux triables tableaux et graphiques personnalisables

Outil de recherche TRI P2 (prévention de la pollution)

La description:Trouvez et comparez des informations sur la façon dont les installations du TRI et leurs sociétés mères gèrent les déchets chimiques et s'efforcent de réduire les rejets de produits chimiques dans l'environnement. Cet outil offre un aperçu complet des données de réduction à la source et de gestion des déchets (c.-à-d. rejets, recyclage, récupération d'énergie et traitement) déclarées par les installations du TRI.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production:Tableaux triables tableaux et graphiques personnalisables

Tableau de bord du secteur industriel TRI P2 (prévention de la pollution)

La description:Filtrez les données de prévention de la pollution et de gestion des déchets pour des secteurs industriels spécifiques, sur la base des données déclarées par le TRI.

Contenu: Données déclarées par l'établissement et informations contextuelles supplémentaires

Production: Graphiques et graphiques prêts pour la présentation

Historique de l'application et de la conformité en ligne (ECHO) (conformité des installations)

La description:Informations sur l'application et la conformité pour le TRI et d'autres installations réglementées par l'EPA. Non géré par le programme TRI.

Contenu:Données provenant de plusieurs programmes EPA et de certaines bases de données non EPA

Production:Téléchargements de données de rapports détaillés sur les installations

Tableau de bord de comparaison DMR/TRI (rejets d'eaux de surface)

La description:Déterminez quels polluants sont déversés dans les cours d'eau et par quelles entreprises. Non géré par le programme TRI.

Contenu:Données du National Pollutant Discharge Elimination System (NPDES) et du TRI

Production:Fichiers .csv de graphiques et de graphiques interactifs

Indicateurs environnementaux de dépistage des risques (RSEI) (comparaison du risque relatif)

La description:Explorez les impacts potentiels des rejets chimiques déclarés par le TRI sur le risque relatif et comparez-les pour différents produits chimiques, emplacements, installations et années de déclaration. (Remarque : le bouton "GO" ci-dessous renvoie à EasyRSEI. Pour plus d'informations et d'autres produits RSEI, visitez le site Web principal de RSEI.)

Contenu: Données déclarées par les établissements et informations contextuelles et sources de données supplémentaires

Production:Téléchargements de données graphiques prêtes pour la présentation des scores numériques

TRI-PUCE (toxicité des produits chimiques TRI)

La description:Accédez et analysez les informations de toxicité pour les produits chimiques couverts par le TRI via cette base de données Microsoft Access téléchargeable.

Contenu: Informations toxicologiques provenant de plusieurs sources

Production:Rapports de profil de toxicité chimique imprimables

Fichiers de données sur les dioxines/TEQ (données sur les dioxines et valeurs d'équivalence toxique)

La description:Données sur la quantité massique de dioxine du formulaire R de déclaration du TRI, annexe 1, ainsi que les valeurs d'équivalence toxique calculées par l'EPA. Ces fichiers complètent les fichiers Basic et Basic Plus Data. Notez que les données sur les dioxines sont déjà incluses dans la plupart des autres outils TRI. Recommandé pour les utilisateurs familiarisés avec les données TRI.

Contenu:Données déclarées par l'établissement

Production:fichiers .csv

EnviroMapper (cartographie de diverses données environnementales)

La description:Cartographiez les données environnementales et ajoutez des points d'intérêt pour visualiser les données en contexte. Non géré par le programme TRI.

Contenu: Données de plusieurs programmes EPA et données SIG