Mais

Crie vários novos shapefiles usando as informações contidas em uma tabela

Crie vários novos shapefiles usando as informações contidas em uma tabela


Espero criar um script que crie um novo arquivo de forma para cada registro em uma tabela. Minha experiência com Python é limitada, e já faz um tempo desde que eu usei, então estou tendo dificuldade para começar. Minha tabela tem campos para ID, longitude, latitude, distância e rumo.

Para cada registro, preciso:

  • crie um novo arquivo de forma com um nome de arquivo que corresponda ao campo ID
  • crie uma série de pontos dentro do arquivo de forma recém-criado em incrementos de 1 metro ao longo de uma linha que é definida pelos campos de longitude / latitude (este é o ponto inicial), distância e rumo.

Aqui está meu código inicial:

import arcpy table = "C: /folder/project.gdb/transect_table" fields = ["TRANSECT_ID", "LATITUDE", "LONGITUDE", "Heading", "Distance"] shp_path = "C: / folder / output_shapefiles" com arcpy.da.SearchCursor (tabela, campos) como cursor: para linha no cursor: arcpy.CreateFeatureclass_management (shp_path, cursor [0])

Este pedaço de código está criando a coleção de shapefiles vazios com nomes de arquivos sendo retirados do campo ID da tabela.

Alguém pode sugerir uma abordagem para preencher os shapefiles com pontos?

Com base na entrada de radouxju, atualizei o código para o seguinte (observe que estou criando classes de recursos em um gdb em vez de shapefile; meus shapefiles estavam sendo bloqueados ao criar os pontos, mas as classes de recursos parecem evitar esse problema ):

import arcpy import math path = "C: /folder/Output_FeatureClass.gdb" table = "C: /folder/Transects.gdb/table" fields = ["TRANSECT_ID", "LATITUDE", "LONGITUDE", "Heading", " Distância "] com arcpy.da.SearchCursor (tabela, campos) como cursor: para linha no cursor: arcpy.CreateFeatureclass_management (caminho, cursor [0]," Ponto "," "," "," "," C: / folder / WGS1984.prj ") com arcpy.da.InsertCursor (path +" / "+ cursor [0], [" SHAPE @ XY "]) como insertcursor: para i no intervalo (linha [4]): xy = [ (linha [2] * i * math.sin (linha [3]), linha [1] * i * math.cos (linha [3])),] insertcursor.insertRow (xy)

Isso está funcionando muito bem, pois todas as minhas classes de recursos estão sendo criadas e preenchidas com o número apropriado de pontos. No entanto, a distância entre os pontos não é o 1 metro desejado (é mais próximo de 15.000 km!). Eu suspeito que posso ter um problema com unidades de mistura, já que as posições de entrada estão em graus e o deslocamento entre os pontos deve ser em metros, mas não tenho certeza.

Alguma sugestão?


Eu não testei, mas deve ser algo como abaixo. Presumo que seu rumo seja 0 em direção ao Norte e em radianos, e que você esteja em um sistema de coordenadas projetadas com as unidades em metros (idealmente 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 "com arcpy.da.SearchCursor (tabela, campos) como cursor: para linha no cursor: arcpy.CreateFeatureclass_management (shp_path, cursor [0]," POINT ") com arcpy.da.InsertCursor (shp_path +" / "+ cursor [ 0], ["SHAPE @ XY"]) como insertcursor: para i no intervalo (linha [4]): insertcursor.insertRow ((linha [2] + i * math.sin (linha [3]), linha [1 ] + i * math.cos (linha [3],))

se o seu rumo estiver em graus, você precisará de uma conversão de graus para radianos (math.radians (linha [3])


Manipule a tabela de atributos do arquivo de forma usando R

Publiquei esta questão na troca de pilha GIS, mas não está vendo muito tráfego.

Sou um usuário de GIS que usa R para estatísticas há alguns anos e estou animado para ver muitos novos recursos de GIS sendo lançados (raster, shapefiles, rgdal, etc).

Eu fiz muita manipulação de banco de dados e tabela em R, portanto, ser capaz de adicionar e remover atributos de shapefiles é um potencial poderoso.

Espero estar perdendo o que está por aí, mas não consigo encontrar um bom método para adicionar ou remover atributos de uma tabela de atributos do arquivo de forma.

Alguém do Overflow pode responder à minha postagem no GIS? Ou posso ser orientado sobre como colocar minha tabela de atributos de lista em um dataframe e voltar para substituir a tabela de atributos atual?


A diferença entre uma única tabela de arquivo simples e tabelas de vários arquivos relacionadas

Vamos começar com um conceito fundamental de Tabela Dinâmica. Uma única tabela de “arquivo plano” é criada a partir de uma única planilha. As tabelas de vários arquivos relacionadas são criadas a partir de duas ou mais planilhas conectadas entre si por meio de um campo-chave exclusivo.

Em nossa planilha de exemplo, as ferramentas da tabela dinâmica permitem que você extraia os números de licença e os nomes dos motoristas de uma tabela (Master1) e os dados restantes de outra tabela (violações). O campo de chave exclusivo, neste caso, é o número da licença, que deve existir em todas as tabelas com as quais você está trabalhando para esses relatórios.

Como resultado, as tabelas dinâmicas permitem planilhas menores (ou seja, menos campos) e eliminam dados redundantes. Os relatórios são mais eficientes e fáceis de compilar. Por exemplo, nas versões mais antigas, você tinha que inserir o nome do cliente, endereço, cidade, estado, CEP e número de telefone em sua planilha de cliente, planilha de produto, planilha de vendas, planilha de estoque e muito mais, com base na quantidade de dados você precisava rastrear o que estava relacionado a essas informações. Com as ferramentas de Tabela Dinâmica, você insere os dados uma vez e, em seguida, vincula as tabelas por meio de um campo único e comum. O Excel faz o resto.

Treinamento adicional em Excel

Se você deseja aprofundar seu domínio do Excel, existem vários cursos online para expandir seu conhecimento. Aqui estão nossas principais opções para começar:


Inserindo a Tabela Dinâmica

Na planilha Informações de pagamento, certifique-se de que o cursor esteja em algum lugar da tabela. Volte para o Inserir guia da faixa de opções e clique no Tabela Dinâmica ícone (é o primeiro ícone).

Com o cursor dentro de uma das tabelas, selecione Inserir & gt Tabela Dinâmica

A caixa de diálogo que aparece deve identificar corretamente a tabela e selecionar que a Tabela Dinâmica irá para uma nova planilha. Na parte inferior, clique na caixa de seleção para Adicione esses dados ao modelo de dados. Então clique OK.

Adicionar os dados ao Modelo de Dados é o que permite que as conexões funcionem

Agora você terá uma Tabela Dinâmica em uma nova planilha, haverá um painel de tarefas no lado direito da tela e a barra de fita exibirá a guia Analisar.

O painel de tarefas mostra a tabela e os campos apenas da planilha ativa, então clique TUDO para ver todas as tabelas que você criou. Mas antes de podermos usá-los, temos que conectá-los uns aos outros, e isso significa criar relacionamentos. Clique no Relacionamentos botão na barra de fita.

Configurando Relacionamentos de Tabela

Clicar nesse botão exibe a caixa de diálogo Gerenciar relacionamentos. Clique no Novo botão, e isso exibe a caixa de diálogo Criar Relacionamento. Criaremos dois relacionamentos usando o campo Order # como o conector.

Nas listas suspensas, escolha Informação de pagamento para a mesa, e ao lado dela, escolha Pedido # na lista suspensa Coluna. Na segunda linha, escolha Informação do Cliente na lista suspensa Tabela relacionada e, ao lado dela, selecione Pedido # na lista suspensa Coluna relacionada.

Existem três tabelas, então crie dois relacionamentos

Isso significa que as tabelas Payment_Info e Customer_Info estão relacionadas onde possuem números de pedido correspondentes.

Clique OK, e vemos esse relacionamento listado na caixa Gerenciar relacionamentos.

Repita esse processo para criar um relacionamento que une Payment_Info a Order_Info, também usando o campo Order #. A caixa Gerenciar relacionamentos agora deve ter a seguinte aparência:

A caixa de diálogo Gerenciar Relacionamentos exibirá os relacionamentos que você criar

Observe que não é necessário criar um relacionamento entre as tabelas Order_Info e Customer_Info, uma vez que elas são unidas automaticamente por meio da tabela Payment_Info.

Clique no Perto botão na parte inferior da caixa. Agora podemos finalmente arrastar os campos para a Tabela Dinâmica.


Configurando Namespaces DFS para agrupar vários sistemas de arquivos

Você pode usar namespaces DFS para agrupar vários sistemas de arquivos em um único namespace. No exemplo a seguir, o namespace baseado em domínio (example.com corp) é criado em dois servidores de namespace, consolidando compartilhamentos de arquivos armazenados em vários sistemas de arquivos Amazon FSx (finanças, marketing, vendas, home_directories). Isso permite que seus usuários acessem compartilhamentos de arquivos usando um namespace comum. Diante disso, eles não precisam especificar os nomes DNS do sistema de arquivos para cada um dos sistemas de arquivos que hospedam os compartilhamentos de arquivos.

Estas etapas orientam você na criação de um único namespace (example.com corp) em dois servidores de namespace. Você também configura quatro compartilhamentos de arquivos no namespace, cada um redirecionando os usuários de forma transparente para compartilhamentos hospedados em sistemas de arquivos Amazon FSx separados.

Para agrupar vários sistemas de arquivos em um namespace DFS comum

Se você ainda não tem servidores de namespace DFS em execução, pode iniciar um par de servidores de namespace DFS altamente disponíveis usando o modelo setup-DFSN-servers.template AWS CloudFormation. Para obter mais informações sobre como criar uma pilha AWS CloudFormation, consulte Criando uma pilha no AWS CloudFormation Console no Guia do usuário do AWS CloudFormation.

Conecte-se a um dos servidores de Namespace DFS iniciados na etapa anterior como um usuário no Administradores delegados da AWS grupo. Para obter mais informações, consulte Conectando-se à sua instância do Windows no Guia do usuário do Amazon EC2 para instâncias do Windows.

Acesse o console de gerenciamento DFS abrindo. Abra o Começar menu e executar dfsmgmt.msc. Isso abre a ferramenta DFS Management GUI.

Escolher Açao então Novo Namespace, digite o nome do computador do primeiro servidor de namespace DFS para o qual você iniciou Servidor e escolher Próximo.

Para Nome, digite o namespace que você está criando (por exemplo, corp).

Escolher Editar Configurações e defina as permissões apropriadas com base em seus requisitos. Escolher Próximo.

Deixe o padrão Namespace baseado em domínio opção selecionada, deixe o Habilite o modo Windows Server 2008 opção selecionada e escolha Próximo.

O modo Windows Server 2008 é a opção mais recente disponível para namespaces.

Revise as configurações do namespace e escolha Crio.

Com o namespace recém-criado selecionado em Namespaces na barra de navegação, escolha Açao então Adicionar Servidor de Namespace.

Digite o nome do computador do segundo servidor de namespace DFS para o qual você iniciou Servidor de namespaces.

Escolher Editar Configurações, defina as permissões apropriadas com base em seus requisitos e escolha OK.

Abra o menu de contexto (clique com o botão direito) para o namespace que você acabou de criar, escolha Nova pasta, digite o nome da pasta (por exemplo, finanças para Nomee escolha OK.

Digite o nome DNS do compartilhamento de arquivo para o qual deseja que a pasta DFS Namespace aponte no formato UNC (por exemplo, fs-0123456789abcdef0.example.com finance) para Caminho para a pasta de destino e escolher OK.

Se o compartilhamento não existir:

Escolher sim para criá-lo.

De Criar compartilhamento diálogo, escolha Navegar.

Escolha uma pasta existente ou crie uma nova pasta em D $e escolha OK.

Defina as permissões de compartilhamento apropriadas e escolha OK.

De Nova pasta diálogo, escolha OK. A nova pasta será criada no namespace.

Repita as últimas quatro etapas para outras pastas que deseja compartilhar no mesmo namespace.


Navegar pelos dados

Este conjunto de dados foi atualizado pela última vez no LINZ Data Service em 26 de junho de 2021.

Este conjunto de dados fornece informações de título (excluindo propriedade) onde há um relacionamento com um ou mais lotes primários.

Um Registro de Título é um registro dos proprietários de uma propriedade, a descrição legal e os direitos e responsabilidades registrados em relação ao título.

Este conjunto de dados não contém nenhuma informação de propriedade para que possa ser distribuído gratuitamente. Se as informações de propriedade forem necessárias, você precisa primeiro concordar com a Licença LINZ para Dados Pessoais para poder acessar os conjuntos de dados NZ Property Title Including Owners e NZ Property Title Owners.

Pode haver vários pacotes associados a um título, e um título pode ter apenas uma parte de um pacote. Isso significa que a forma que representa o título será uma agregação de todas as parcelas às quais o título está associado. O atributo 'extensões espaciais compartilhadas' quando igual a 'falso' indicará que o título tem interesse exclusivo sobre toda a forma (este será o caso para a grande maioria).

Os dados de origem para associações de lotes / títulos incluem algumas fontes não oficiais onde os dados oficiais não suportam um link. Para obter mais informações, consulte o site da LINZ

APIs e serviços da web
Este conjunto de dados está disponível por meio dos serviços ArcGIS Online e ArcGIS REST, bem como de nossas APIs padrão.
APIs LDS e serviços da web OGC
Serviços de mapa do ArcGIS Online
ArcGIS REST API

Pacotes Primários NZ

Você pode usar esta obra para fins comerciais.

Você deve atribuir o criador em suas próprias obras.

Este conjunto de dados foi atualizado pela última vez no LINZ Data Service em 26 de junho de 2021.

Esta camada fornece o atual polígonos de pacotes primários e alguns dados descritivos associados que detalham a denominação (descrição legal), propósito, tamanho e uma lista de títulos que têm interesse no pacote.

Uma parcela primária é uma porção de terreno que se destina a ser:
• propriedade da Coroa, exceto faixas marginais móveis
• Realizado em taxa simples ((propriedade predominantemente privada)
• Terra de propriedade livre Maori ou terra tradicional Maori
• Litoral público e fundo do mar
• O leito de um lago ou rio
• Estrada ou Ferrovia
• Investido em uma autoridade local

APIs e serviços da web
Este conjunto de dados está disponível por meio dos serviços ArcGIS Online e ArcGIS REST, bem como de nossas APIs padrão.
APIs LDS e serviços da web OGC
Serviços de mapa do ArcGIS Online
ArcGIS REST API

Os lotes primários podem ser considerados o 'nível básico' do 'quebra-cabeça' de todas as terras que constituem a Nova Zelândia. Outros 'níveis' são parcelas não primárias da NZ que essencialmente limitam os direitos totais que normalmente estariam associados a uma parcela primária, por exemplo servidões, convênios, arrendamentos e faixas marginais móveis, etc.

Se você precisar de parcelas aprovadas ou históricas, consulte a Camada de Todas as Parcelas

Esta camada tem uma precisão nominal de 0,1-1m em áreas urbanas e 1-100m em áreas rurais. Para obter informações mais detalhadas sobre as precisões das parcelas, consulte a camada de Marcas de Limite do Levantamento que contém as precisões para cada nó da parcela.

A combinação desta camada com a camada de parcelas não primárias fornece todas as parcelas atuais para a Nova Zelândia (ou seja, exclui parcelas históricas e pendentes)

Os dados de origem para associações de lotes / títulos incluem algumas fontes não oficiais onde os dados oficiais não suportam um link. Para obter mais informações, consulte o site da LINZ


Métodos

Sistema de Informações Geográficas

Um componente crítico era o Sistema de Informação Geográfica. Uma planta baixa da instalação contaminada de Hamilton estava disponível apenas como uma fotocópia incompleta e de baixa qualidade de 8 1/2 × 11 polegadas do desenho original do AutoCAD em tamanho 'E'. Foi digitalizado como uma imagem TIFF, importado para o software ArcView GIS 3.2 e usado como pano de fundo para criar shapefiles do contorno do edifício, paredes, áreas operacionais e localização de equipamentos e locais de amostragem do NIOSH e FBI. Tabelas de atributos também foram criadas para cada um dos recursos do tema GIS. Shapefiles foram desenvolvidos usando uma cópia digitalizada da planta baixa de cada instalação e digitalizados usando ArcView ®. Os elementos de informação a serem exibidos foram divididos em várias camadas, mostrando amostras colhidas por diferentes agências e sua localização.

Após a conclusão, os shapefiles foram vinculados aos dados usando o Epi Map 2000, um componente do Epi Info que é compatível com ArcView ®. Elementos de informações armazenados em bancos de dados criados no Epi Info 2000 foram enviados diretamente para o Epi Map para exibição (Figura 1). O processo foi automatizado por meio de scripts ou programas.

Coleta de dados e entrada

Para obter dados sobre as pessoas possivelmente expostas, foi nomeada uma ligação entre o Serviço Postal dos EUA e a equipe epidemiológica. Ele conseguiu obter arquivos do MS-Excel © ou impressões de computador listando o pessoal de cada uma das instalações sob investigação. As listas foram originalmente criadas para folha de pagamento ou registro de veículos. Informações adicionais foram adicionadas a essas listas para registrar a presença na instalação durante o período de exposição, sexo do funcionário e profilaxia pós-exposição (PEP). A maioria dos serviços de acompanhamento clínico, incluindo PEP, foram fornecidos pelo hospital local. O departamento de informática do hospital extraiu dados clínicos relevantes do sistema de banco de dados e os disponibilizou para a equipe de investigação como tabelas do Excel em alguns dias e arquivos de texto delimitados por vírgulas em outros dias.

Os itens de dados primários coletados por oficiais do EIS e outros funcionários foram inseridos no Epi Info 2000 ou no Excel e então importados para o formato Epi Info 2000 (Microsoft Access 97). Populações potencialmente expostas, como visitantes regulares e parentes de funcionários dos correios, foram identificadas e inseridas manualmente no banco de dados principal à medida que a investigação prosseguia.

As características demográficas das pessoas potencialmente expostas foram obtidas a partir de várias fontes, incluindo o hospital local onde o PEP foi administrado. Quando o PEP foi oferecido a um grande grupo de pessoas, tornou-se necessário o rastreamento de diferentes protocolos de tratamento e seus resultados. Os formulários em papel foram projetados para não se tornarem obsoletos se os protocolos forem modificados durante o acompanhamento, e revisões semelhantes no banco de dados são esperadas.

Gerenciamento de banco de dados

O gerenciamento do banco de dados foi feito no Epi Info 2000, a versão Windows do Epi Info [3]. O Epi Info 2000 foi desenvolvido no CDC a partir de software de componente comercial e Visual Basic e oferece compatibilidade com arquivos do Microsoft Access e 20 outros formatos de banco de dados padrão. Inclui um programa de mapeamento que usa o formato de shapefile compatível com ArcView e permite a exibição de dados de tabelas do Access em shapefiles. A maioria das estatísticas básicas necessárias para relatórios e análises são incorporadas para que não tenhamos que perder tempo codificando ou depurando algoritmos. As ferramentas de coleta e gerenciamento de dados no Epi Info não requerem gerenciadores de banco de dados especializados.

O sistema de banco de dados consistia em um banco de dados central projetado e mantido no Epi Info 2000. O sistema estava estruturado em 14 tabelas vinculadas por uma chave única. A chave única inicialmente continha informações (era "inteligente"), mas projetamos um mecanismo para substituir chaves inteligentes por chaves não inteligentes. A chave inteligente continha o código da instalação, o identificador exclusivo exposto do local de implantação (NJ) e a instalação postal envolvida. Incluímos o site de implantação na chave, presumindo que as informações seriam vinculadas a outros sites posteriormente.

Segurança

Desde o início da operação, a segurança foi uma preocupação.Devido à complexidade da investigação, decidimos que todas as informações confidenciais - definidas como informações que permitiriam a identificação de indivíduos específicos - seriam tratadas separadamente do restante do banco de dados. Criamos uma única tabela plana com todos os identificadores e relacionamos a tabela ao restante do sistema de banco de dados. Com essa estrutura, fomos capazes de lidar com informações confidenciais como uma unidade. Os identificadores não foram enviados para a sede do CDC em Atlanta, por exemplo, e os dados confidenciais foram protegidos pelos recursos de segurança do ambiente de computação NJDHSS.

Gerenciamento de documento

Um editor HTML comercial (Microsoft Front Page 2000 ®) foi usado para a manutenção da página da Web do repositório de documentos. As páginas da Web incluídas no sistema não continham nenhum script especial que exigisse técnicas avançadas de programação da Web. O nível de codificação HTML era básico e, em grande parte, inserido automaticamente pelo Front Page.

O repositório de documentos permitiu codificar e armazenar versões de documentos durante o andamento da investigação. Os documentos foram organizados em pastas e números de código atribuídos.

Os membros da equipe foram instruídos a fazer o check-in de documentos regularmente. O processo de check-in do documento incluía um formulário simples baseado em computador com o nome do documento, o autor e um carimbo de data / hora. Os primeiros dois elementos foram usados ​​para criar um catálogo e o carimbo de data / hora foi usado para controle de versão.


Pré-requisitos

Requisitos

Não há requisitos específicos para este documento.

Componentes Usados

Este documento não está restrito a versões específicas de software e hardware. As saídas de comando mostradas são dos roteadores Cisco 2500 Series que executam o Cisco IOS & reg Software Release 12.2 (24a).

As informações apresentadas neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos usados ​​neste documento começaram com uma configuração limpa (padrão). Se você estiver trabalhando em uma rede ativa, certifique-se de compreender o impacto potencial de qualquer comando antes de usá-lo.

Convenções

Para obter mais informações sobre convenções de documentos, consulte as Convenções de dicas técnicas da Cisco.


Crie vários novos shapefiles usando as informações contidas em uma tabela - Sistemas de Informações Geográficas

O sistema de arquivos que vem com o seu computador é um tipo muito primitivo de sistema de gerenciamento de banco de dados. Quer o seu computador venha com o sistema de arquivos Unix, NTFS ou o sistema de arquivos Macintosh, a ideia básica é a mesma. Os dados são mantidos em grandes grupos nomeados não estruturados chamados arquivos. A grande vantagem do sistema de arquivos é sua invisibilidade. Você provavelmente não o comprou separadamente, pode não estar ciente de sua existência, não terá que publicar um anúncio no jornal para um administrador do sistema de arquivos com mais de 5 anos de experiência e funcionará muito bem como anunciado. Tudo o que você precisa fazer com um sistema de arquivos é fazer o backup em fita a cada um ou dois dias.

Apesar de ser discreto, o sistema de arquivos em uma máquina Macintosh, Unix ou Windows é capaz de armazenar quaisquer dados que possam ser representados em formato digital. Por exemplo, suponha que você esteja armazenando uma lista de distribuição em um arquivo do sistema de arquivos. Se você aceitar a limitação de que nenhum endereço de e-mail ou nome de pessoa pode conter um caractere de nova linha, você pode armazenar uma entrada por linha. Então, você pode decidir que nenhum endereço de e-mail ou nome pode conter uma barra vertical. Isso permite separar os campos de endereço de e-mail e nome com o caractere de barra vertical.

Até agora, está tudo ótimo. Contanto que você tenha o cuidado de nunca tentar armazenar uma nova linha ou barra vertical, você pode manter seus dados neste & quotarquivo plano & quot. A pesquisa pode ser lenta e cara, no entanto. E se você quiser ver se [email protected]" está na lista de discussão? O computador deve ler todo o arquivo para verificar.

  1. Ambas as inserções foram bem-sucedidas.
  2. Uma das inserções foi perdida.
  3. As informações das duas inserções são misturadas para que ambas sejam corrompidas.

Todos os saldos da conta corrente são armazenados em um arquivo, checking.text, e todos os saldos de poupança são armazenados em outro arquivo, saving.text.

Poucos dias depois, ocorre uma combinação infeliz de eventos. Joe User está transferindo $ 10.000 de suas economias para sua conta corrente. Judy User está depositando simultaneamente $ 5 em sua conta poupança. Um de seus scripts Perl grava com sucesso o arquivo simples da conta corrente com o novo saldo de Joe, $ 10.000 a mais. Ele também grava o arquivo da conta de poupança com o novo saldo de poupança de Joe, US $ 10.000 a menos. No entanto, o script que está processando o depósito de Judy começou quase ao mesmo tempo e começou com a versão do arquivo de poupança que tinha o saldo original de Joe. Ele eventualmente termina e grava o saldo superior de $ 5 de Judy, mas também sobrescreve o novo saldo inferior de Joe pelo antigo saldo alto. Onde isso deixa você? $ 10.000 mais pobres e desejando que você tivesse o Controle de simultaneidade.

Depois de alguns meses programando e lendo livros de teoria de sistemas operacionais da década de 1960 que tratam da exclusão mútua, você resolveu seus problemas de simultaneidade. Parabéns. No entanto, vamos supor que este seja um negócio de Internet por volta de 2003 e, portanto, você o esteja administrando na casa de sua mãe com o servidor embaixo do sofá da sala. Você está com sono, então esquenta um pouco de café no micro-ondas e, ao mesmo tempo, tosta um bagel na torradeira. O disjuntor desarma. Você ouve o som nauseante de discos girando para baixo. Você se esforça para colocar seu servidor de volta em funcionamento e, olhando os logs, percebe que Joe User estava de volta transferindo $ 25.000 da economia para a conta corrente. O que aconteceu com a transação de Joe?

A boa notícia para Joe é que seu script Perl acabou de creditar $ 25.000 em sua conta corrente. A má notícia para você é que ainda não havia começado a debitar de sua conta poupança. Talvez seja hora de ver o que os especialistas em processamento de transações descobriram nos últimos 50 anos.

O que você precisa para o processamento de transações?

O pessoal de processamento de dados gosta de falar sobre o "teste ACID" ao decidir se um sistema de gerenciamento de banco de dados é adequado ou não para lidar com transações. Um sistema adequado tem as seguintes propriedades: Atomicidade Os resultados da execução de uma transação são todos confirmados ou revertidos. Todas as alterações entram em vigor ou nenhuma. Isso significa, para a transferência de dinheiro do Usuário de Joe, que tanto suas economias quanto seus saldos são ajustados ou nenhum dos dois. Consistência O banco de dados é transformado de um estado válido para outro estado válido. Isso define uma transação como legal apenas se obedecer às restrições de integridade definidas pelo usuário. Transações ilegais não são permitidas e, se uma restrição de integridade não puder ser satisfeita, a transação será revertida. Por exemplo, suponha que você defina uma regra que, após uma transferência de mais de $ 10.000 para fora do país, uma linha é adicionada a uma tabela de auditoria para que você possa preparar um relatório legalmente exigido para o IRS. Talvez por motivos de desempenho, essa tabela de auditoria seja armazenada em um disco separado do restante do banco de dados. Se o disco da tabela de auditoria estiver off-line e não puder ser gravado, a transação será abortada. Isolamento Os resultados de uma transação são invisíveis para outras transações até que a transação seja concluída. Por exemplo, se você estiver executando um relatório contábil ao mesmo tempo que Joe está transferindo dinheiro, o programa de relatório contábil verá os saldos antes ou depois de Joe transferir o dinheiro, mas nunca o estado intermediário em que o cheque foi creditado, mas a poupança não ainda debitado. Durabilidade Depois de confirmados (concluídos), os resultados de uma transação são permanentes e sobrevivem a falhas futuras do sistema e da mídia. Se o computador do sistema de reservas da companhia aérea fornecer o assento 22A e travar um milissegundo depois, ele não se esquecerá de que você está sentado no 22A e também o dará para outra pessoa. Além disso, se um programador derramar café em uma unidade de disco, será possível instalar um novo disco e recuperar as transações até o café derramado, mostrando que você tinha assento 22A.

Isso não parece muito difícil de implementar, não é? Uma "mera questão de programação", como nosso amigo Jin gosta de dizer. Bem, você ainda precisa de indexação.

Encontrando Seus Dados (e Rápido)

Uma faceta de um sistema de gerenciamento de banco de dados é o processamento de inserções, atualizações e exclusões. Tudo isso tem a ver com colocar informações no banco de dados. Às vezes, também é bom poder retirar os dados. E com sites de popularidade média recebendo 20 solicitações por segundo, vale a pena estar ciente da velocidade.

Arquivos simples funcionam bem se forem muito pequenos. Um script Perl pode ler todo o arquivo na memória em uma fração de segundo e, em seguida, examiná-lo para obter as informações solicitadas. Mas suponha que seu banco on-line cresça e tenha 250.000 contas. Um usuário digita o número de sua conta em uma página da Web e pede seus depósitos mais recentes. Você tem um arquivo de transações financeiras cronológicas com 25 milhões de entradas. Crunch, crunch, crunch. Seu servidor trabalha laboriosamente em todos os 25 milhões para encontrar aqueles com um número de conta que corresponda ao do usuário. Enquanto está sendo destruído, outros 25 usuários acessam o site e pedem as mesmas informações sobre suas contas.

Você tem duas opções: comprar um supercomputador de 1000 processadores ou construir um arquivo de índice. Se você construir um arquivo de índice que mapeia números de contas para números de transações sequenciais, seu servidor não terá mais que pesquisar todos os 25 milhões de registros. No entanto, você deve modificar todos os programas que inserem, atualizam ou excluem do banco de dados para que também mantenham o índice atualizado.

Isso funciona muito bem até dois anos depois, quando um MBA totalmente novo chega de Harvard. Ela pede um relatório de cota de todos os clientes que têm mais de US $ 5.000 em cheque ou moram em Oklahoma e retiraram mais de US $ 100 da economia nos últimos 17 dias. & Quot Acontece que você não antecipou essa consulta, então seu esquema de indexação não para acelerar as coisas. Seu servidor precisa processar todos os dados repetidamente.

Insira o banco de dados relacional

& quotOs usuários futuros de grandes bancos de dados devem ser protegidos de ter que saber como os dados estão organizados na máquina (a representação interna). . As atividades dos usuários nos terminais e na maioria dos programas aplicativos não devem ser afetadas quando a representação interna dos dados é alterada e mesmo quando alguns aspectos da representação externa são alterados. As mudanças na representação dos dados geralmente serão necessárias como resultado de mudanças no tráfego de consulta, atualização e relatório e crescimento natural nos tipos de informações armazenadas.

& quotOs sistemas de dados formatados não inferenciais existentes fornecem aos usuários arquivos estruturados em árvore ou modelos de rede um pouco mais gerais dos dados. Na Seção 1, as inadequações desses modelos são discutidas. Um modelo baseado em relações n -ary, uma forma normal para relações de banco de dados e o conceito de uma sublinguagem de dados universal são introduzidos. Na Seção 2, certas operações nas relações (além da inferência lógica) são discutidas e aplicadas aos problemas de redundância e consistência no modelo do usuário. & Quot

Parece bem bacana, não é? Exatamente como o que você precisa. Esse é o resumo para "Um modelo relacional de dados para grandes bancos de dados compartilhados", um artigo que Codd escreveu enquanto trabalhava no laboratório de pesquisa da IBM em San Jose. Foi publicado nas Comunicações da ACM em junho de 1970 e está disponível em http://www.acm.org/classics/nov95/toc.html (ACM afirma representar as melhores práticas que um empresário pode esperar de um profissional de computação, sua versão online do artigo de Codd ficou pela metade em 1995 e apresenta uma nota de "em breve" para o resto. é de se admirar que as empresas dos EUA estejam transferindo empregos de TI para a Índia e a China? um trabalho medíocre, não faz sentido pagar-lhe mais de $ 10 / hora.).

Sim, é isso mesmo, 1970. O que você precisa fazer é mover seu site para os anos 70 com um desses sistemas de gerenciamento de banco de dados relacional (RDBMS) inovador. Na verdade, como Codd observa em seu artigo, a maioria dos problemas que encontramos até agora neste capítulo foi resolvida na década de 1960 por software de mainframe comercializado pela IBM e pelos & quotseven dwarves & quot (como eram conhecidos os concorrentes da IBM). No início da década de 1960, as empresas estavam cansadas de perder transações importantes e bancos de dados incorruptos manualmente. Eles começaram a pensar que os programadores de seus aplicativos não deveriam implementar transações e indexar em uma base ad hoc para cada novo projeto. As empresas começaram a comprar software de gerenciamento de banco de dados de fornecedores de computador como a IBM. Esses produtos funcionaram muito bem, mas resultaram em modelos de dados frágeis. Se você acertou sua representação de dados da primeira vez e suas necessidades de negócios nunca mudaram, um banco de dados hierárquico no estilo de 1967 foi ótimo. Infelizmente, se você implementou um sistema e subsequentemente precisou de novos índices ou de um novo formato de dados, talvez seja necessário reescrever todos os seus programas aplicativos.

Do ponto de vista de um programador de aplicativos, a maior inovação no banco de dados relacional é que se usa uma linguagem de consulta declarativa, SQL (um acrônimo para Structured Query Language e pronuncia-se & quotess-cue-el & quot ou & quotsequel & quot). A maioria das linguagens de computador é procedural. O programador informa ao computador o que fazer, passo a passo, especificando um procedimento. Em SQL, o programador diz & quotEu quero dados que atendam aos seguintes critérios & quot e o planejador de consulta RDBMS descobre como obtê-los. Existem duas vantagens em usar uma linguagem declarativa. A primeira é que as consultas não dependem mais da representação dos dados. O RDBMS é livre para armazenar dados como quiser. O segundo é o aumento da confiabilidade do software. É muito mais difícil ter & quota pequeno bug & quot em uma consulta SQL do que em um programa procedural. Geralmente, ele descreve os dados que você deseja e funciona o tempo todo ou falha completamente de maneira óbvia.

Outro benefício das linguagens declarativas é que usuários menos sofisticados são capazes de escrever programas úteis. Por exemplo, muitas tarefas de computação que exigiam programadores profissionais na década de 1960 podem ser realizadas por pessoas não técnicas com planilhas. Em uma planilha, você não diz ao computador como calcular os números ou em que sequência. Você acabou de declarar & quotEsta célula terá 1,5 vezes o valor da outra célula ali. & Quot

RDBMSes podem ser executados muito lentamente. Dependendo se você está vendendo ou comprando computadores, isso pode incomodá-lo ou encantá-lo. Suponha que o sistema leve 30 segundos para retornar os dados solicitados em sua consulta. Isso significa que você tem muitos dados? Que você precisa adicionar alguns índices? Que o planejador de consulta RDBMS fez algumas escolhas erradas e precisa de algumas dicas? Quem sabe? O RDBMS é um programa extremamente complicado que você não escreveu e para o qual não possui o código-fonte. Cada fornecedor possui ferramentas de rastreamento e depuração que pretendem ajudá-lo, mas o processo não é simples. Boa sorte para descobrir um encantamento SQL diferente que retornará o mesmo conjunto de dados em menos tempo. Se você não puder, ligue para o seu fornecedor de hardware e peça que enviem mais 16 CPUs com RAM máxima. Como alternativa, você pode continuar executando o software não relacional que usava na década de 1960, que é o que as companhias aéreas fazem com seus sistemas de reservas.

Como funciona essa coisa do RDBMS?

Os pesquisadores de banco de dados adoram falar sobre álgebra relacional, n-tuplas, forma normal e composição natural, enquanto usam símbolos matemáticos. Essa pátina de obscuridade matemática tende a desviar sua atenção de seus trajes ruins e personalidades chatas, mas não tem valor se você apenas deseja usar um sistema de gerenciamento de banco de dados relacional.

Na verdade, isso é tudo que você precisa saber para ser um Programador de Banco de Dados do Homem das Cavernas: Um banco de dados relacional é uma grande planilha que várias pessoas podem atualizar simultaneamente.

Como várias pessoas podem usar uma planilha como a Microsoft Excel ao mesmo tempo? Eles se revezariam no teclado e no mouse? Briga pelo teclado e pelo mouse? Juntar suas cabeças na frente da tela?

Precisamos nos livrar da ideia de interação mouse / teclado / janelas. Não faz sentido quando há muitos usuários simultâneos. Em vez disso, imagine que o sistema de gerenciamento de banco de dados está isolado em um armário escuro. Os usuários anotam seus pedidos em tiras de papel e os colocam sob a porta. Uma solicitação pode ser "criar uma tabela", "inserir uma linha em uma tabela", "atualizar uma linha existente em uma tabela", "fornecer-me um relatório das informações contidas em todas as linhas de uma tabela que atendam aos seguintes critérios . ". Se uma solicitação requer uma resposta, o banco de dados analisa a pergunta por algum tempo e, em seguida, empurra um relatório de papel para fora da porta.

Vamos examinar como isso funciona com mais detalhes.

Cada tabela do banco de dados é uma planilha. Você informa ao RDBMS quantas colunas cada linha possui. Por exemplo, em nosso banco de dados de lista de discussão, a tabela possui duas colunas: nome e e-mail. Cada entrada no banco de dados consiste em uma linha nesta tabela. Um RDBMS é mais restritivo do que uma planilha, pois todos os dados em uma coluna devem ser do mesmo tipo, por exemplo, número inteiro, decimal, sequência de caracteres ou data. Outra diferença entre uma planilha e um RDBMS é que as linhas em um RDBMS não são ordenadas. Você pode ter uma coluna chamada número_da_linha e pedir ao RDBMS para retornar as linhas ordenadas de acordo com os dados nesta coluna, mas a numeração da linha não está implícita como seria com um programa de planilha. Se você definir uma coluna row_number ou algum outro identificador exclusivo para linhas em uma tabela, será possível que uma linha em outra tabela se refira a essa linha incluindo o valor do ID exclusivo.

Aqui está a aparência de alguns SQL para o aplicativo de lista de e-mails:

Essa é a alegria e a agonia do SQL. Inserir duas palavras de aparência inócua pode custar-lhe um fator de 1000 em desempenho. Em seguida, inserir uma frase (para criar o índice) pode trazê-lo de volta, de modo que seja apenas um fator de dois ou três. (Observe que muitas implementações de RDBMS, incluindo Oracle, definem automaticamente um índice em uma coluna que é restrita para ser única.)

De qualquer forma, agora que executamos a instrução & quotcreate table & quot da linguagem de definição de dados, podemos passar para a linguagem de manipulação de dados: um INSERT.

Tendo criado uma tabela e inserido alguns dados, finalmente estamos prontos para experimentar o incrível poder do SQL SELECT. Quer seus dados de volta?

  1. Você obterá um A em um curso de RDBMS em uma universidade estadual medíocre.
  2. Você encontrará leitores de Psychology Today que pensam que você é sensível e atencioso porque está sempre falando sobre relacionamentos. [consulte "Usando a Internet para pegar bebês e / ou gatas" em http://philip.greenspun.com/wtr/getting-dates antes de seguir qualquer conselho do autor sobre namoro]

Enfim, chega de nerdismo de banco de dados. Vamos preencher a tabela phone_numbers:

Os três primeiros INSERTs funcionam bem, mas e o último, em que o Sr. O'Grady digitou & quotbeeper & quot incorretamente?

Digamos que queremos todos os nossos dados fora.Email, nome completo, números de telefone. A consulta mais óbvia a ser tentada é uma junção.

Assim como acontece com DELETE, não é uma boa ideia brincar com as instruções UPDATE, a menos que você tenha uma cláusula WHERE no final.

SQL da maneira mais difícil

Os problemas que são difíceis em linguagens de computador imperativas podem ser muito simples em uma linguagem declarativa como SQL e vice-versa. Vejamos um exemplo de construção de um relatório de quantos usuários visitam um site todos os dias. Em 1995, construímos um site que distribuía uma chave de sessão exclusiva para cada novo usuário. Como as chaves eram uma sequência crescente de números inteiros, percebemos que poderíamos rastrear quantos usuários vieram ao site simplesmente inserindo uma linha de auditoria todos os dias mostrando o valor do gerador de chave de sessão. Aqui está a tabela de histórico:

Observação: o tipo de dados Oracle DATE é capaz de representar o tempo com a precisão de um segundo, como um ANSI TIMESTAMP (0) no Oracle 9i e mais recente, você provavelmente usaria o tipo de carimbo de data / hora.

Agora que estamos acumulando os dados, deve ser fácil escrever uma página de relatório, hein? Acontece que é muito fácil extrair as linhas de uma tabela em ordem, como no último SELECT acima. No entanto, é impossível para uma linha referir-se à & quotthe última linha neste SELECT & quot. Você poderia escrever um procedimento C #, Java, PL / SQL ou VB para percorrer as linhas em ordem, apenas configurando as coisas na primeira passagem pelo loop e, em seguida, fazendo a subtração apropriada para as linhas subsequentes. No entanto, correr para os braços de uma linguagem de computador imperativa é considerado desagradável no mundo SQL.

No SQL, você começa pensando no que quer e trabalhando de trás para frente. Se a tabela de histórico tiver N linhas, queremos uma tabela de intervalo com N-1 linhas. Cada linha deve ter a hora de início, hora de término, intervalo de tempo e intervalo de cookie. Sempre que você precisar de informações de duas linhas diferentes no banco de dados, a maneira de obtê-las é com um JOIN. Como há apenas uma tabela subjacente, porém, isso terá que ser uma autojunção:

Uma nota sobre sintaxe é necessária aqui. Em uma lista SQL FROM, pode-se atribuir um nome de correlação a uma tabela. Nesse caso, h1 e h2 são atribuídos às duas cópias do histórico que estamos selecionando. Então, podemos nos referir a h1.sample_time e obter & quotthe a coluna sample_time da primeira cópia da tabela de histórico. & Quot

O principal problema com essa consulta, porém, não tem nada a ver com a sintaxe. É o fato de termos 13 linhas a mais. Em vez de N-1 linhas, especificamos o produto cartesiano e obtivemos NxN linhas. Fizemos uma self-join com sucesso e obtivemos todos os emparelhamentos de que precisamos, mas também todos os outros emparelhamentos possíveis. Agora é hora de especificar qual desses pares queremos em nosso relatório final:

Dados os pares de linhas corretos, é fácil adicionar sintaxe à lista SELECT para subtrair os tempos e os valores dos cookies.

Formular consultas SQL pode ser uma arte e a maioria dos programadores precisa de tempo e experiência para se tornar um bom pensamento declarativo.

Admirável Mundo Novo

Treinar um papagaio cinza africano para funcionar como gerente de sistemas de informação pode ser muito gratificante. A frase-chave é & quotEstamos aproveitando proativamente nosso banco de dados cliente / servidor orientado a objetos para direcionar o serviço ao cliente durante a reengenharia. & Quot No mundo do banco de dados dos anos 1980, a parte aplicável desta sentença era & quotcliente / servidor & quot (consulte o próximo capítulo). No Admirável Mundo Novo dos sistemas de gerenciamento de banco de dados, a frase-chave é "orientada a objetos".

Os sistemas de objetos contribuem para a confiabilidade e compactação do software, permitindo aos programadores fatorar seu código em blocos que são usados ​​da forma mais ampla possível. Por exemplo, suponha que você esteja construindo um site de catálogo para vender revistas, vídeos, livros e CDs. Pode valer a pena pensar sobre os dados e funções que são comuns a todos eles e encapsulá-los em uma classe de produto. No nível do produto, você definiria características como product_id, short_name e descrição. Então você definiria uma subclasse de revista que herdou todo o comportamento do produto e adicionou coisas como issues_per_year.

Os programadores que usam linguagens de computador modernas como Smalltalk e Lisp têm feito isso desde meados da década de 1970, mas a ideia só recentemente pegou no mundo RDBMS. Aqui estão algumas definições de tabela para o sistema Illustra, um derivado do U.C. Projeto de pesquisa Berkeley Postgres:

Este Admirável Mundo Novo parece ótimo em brochuras de fornecedores de DBMS, mas a experiência real nem sempre é maravilhosa. Em 1995, estávamos usando o Illustra e construímos uma bela hierarquia de tabelas mais ou menos como descrito acima. Seis meses depois, precisamos adicionar uma coluna à tabela de produtos. E.F. Codd compreendeu em 1970 que os modelos de dados tinham que crescer à medida que as necessidades dos negócios mudavam. Mas o pessoal da Illustra ficou tão entusiasmado com as extensões de seus objetos que se esqueceu. O sistema não pôde adicionar uma coluna a uma tabela com subclasses dependentes. O que devemos fazer, perguntamos ao pessoal de suporte? & quotDump os dados de todas as suas tabelas, elimine todos eles, reconstrua-os com a coluna adicionada e, em seguida, carregue todos os seus dados de volta nas suas tabelas. & quot

Braver New World

Se você realmente deseja estar na vanguarda, pode usar um banco de dados de objetos genuíno, como ObjectStore (http://www.objectstore.net). Esses sistemas armazenam persistentemente os tipos de objetos e estruturas de ponteiro que você cria em um programa Smalltalk, Common Lisp, C ++ ou Java. Os ponteiros de busca e certos tipos de transações podem ser de 10 a 100 vezes mais rápidos do que em um banco de dados relacional. Se você acreditasse em tudo na literatura dos fornecedores de banco de dados de objetos, ficaria surpreso com o fato de Larry Ellison ainda ter notas de US $ 100 para jogar aos camponeses enquanto voa alto em seu jato Gulftream. O sistema de gerenciamento de banco de dados relacional deveria ter sido esmagado há muito tempo sob o peso desta tecnologia superior, introduzida com tremendo hype no início dos anos 1980.

Após 20 anos, o mercado de sistemas de gerenciamento de banco de dados de objetos é de cerca de US $ 100 milhões por ano, menos de 1 por cento do tamanho do mercado de banco de dados relacional. Por que o chiado? Os bancos de dados de objetos trazem de volta algumas das características ruins dos sistemas de gerenciamento de banco de dados pré-relacionais da década de 1960. O programador deve saber muito sobre os detalhes do armazenamento de dados. Se você conhece as identidades dos objetos nos quais está interessado, a consulta é rápida e simples. Mas acontece que a maioria dos usuários de banco de dados não se preocupa com identidades de objeto, eles se preocupam com atributos de objeto. Os bancos de dados relacionais tendem a ser mais rápidos e melhores na produção de agregações com base em atributos.

Lembre-se de que se os bancos de dados de objetos alguma vez fez tornar-se popular, tornaria o uso de Java ou C # como linguagem de script de página muito mais atraente. Atualmente, os sistemas sofisticados de linguagens de computador avançadas não são muito úteis para o desenvolvimento de aplicativos da Internet. As únicas coisas que podem ser armazenadas persistentemente, ou seja, do carregamento da página ao carregamento da página, em um RDBMS são números, datas e strings. Em teoria, é possível escrever um programa Java complexo que faz uma consulta SQL, cria uma enorme coleção de objetos interligados, serve uma página ao usuário e depois sai. Mas por que você faria isso? Essa coleção de objetos interligados deve ser descartada assim que a página for exibida e, em seguida, construída novamente na próxima vez que o usuário solicitar uma página, o que pode ser 1 segundo depois ou 2 dias depois. Se, por outro lado, os objetos criados por um programa C # ou Java fossem eficientemente tornados persistentes, isso tornaria a aplicação desses grandes martelos em scripts da Web muito menos ridículo.

Escolhendo um Fornecedor RDBMS

Você pensaria que não importaria qual RDBMS você usa atrás de um site da Web porque todo RDBMS vem com um front end SQL padrão. Na verdade, os tipos de SQL dos fornecedores são diferentes o suficiente para que portar de um RDBMS para outro seja geralmente um pesadelo. Planeje viver com sua escolha por 5 ou 10 anos.
  1. custo / complexidade para administrar
  2. sistema de gerenciamento de bloqueio
  3. opção de indexação de texto completo
  4. comprimento máximo do tipo de dados VARCHAR
  5. Apoio, suporte

Custo / complexidade para administrar

Antigamente, você podia instalar o Oracle em um computador de $ 500.000 e aceitar todos os padrões, depois descobrir que o segmento de rollback tinha cerca de 15 MB. Isso significa que você não poderia fazer uma transação atualizando mais de 15 MB de dados por vez em um computador com 200 GB de espaço livre em disco. O Oracle não iria, por padrão, apenas pegar mais espaço em disco.

A administração descuidada de RDBMS é uma das causas mais comuns de tempo de inatividade em sites sofisticados. Se você não tem certeza de que terá uma equipe experiente de administradores de banco de dados para dedicar ao seu site, convém considerar se um "RDBMS Corporativo" é realmente para você. Os três grandes RDBMSes são o DB2 da IBM, o Microsoft SQL Server e o Oracle. Todos oferecem uma tremenda flexibilidade de configuração com o objetivo de construir sistemas de 64 CPUs que processam um número absurdo de transações simultâneas. Todos afirmam que suas melhores e mais recentes ferramentas de gerenciamento tornam a instalação e administração do sistema tão fácil que uma criança de 10 anos poderia fazer. Se essas afirmações fossem verdadeiras, a Starbucks local estaria entupida de administradores de banco de dados desempregados. A competição Midget é fornecida pelo PostgreSQL de código aberto, que não pode ser escalado para os grandes tamanhos e desempenho dos RDBMSs comerciais, mas é inerentemente bastante simples de instalar e manter (e é gratuito!). O MySQL é popular entre os usuários do Linux e, por ter um front-end SQL, costuma ser confundido com um RDBMS. Na verdade, ele não fornece as garantias de transação ACID e, portanto, seria mais apropriadamente agrupado com a Microsoft Acesso e ferramentas de área de trabalho semelhantes.

Sistema de gerenciamento de bloqueio

Existem sistemas de gerenciamento de banco de dados relacional para oferecer suporte a usuários simultâneos. Se você não tem pessoas atualizando informações simultaneamente, provavelmente será melhor usar um script Perl simples, o da Microsoft Acessoou MySQL em vez de um RDBMS comercial (ou seja, 100 MB de código C de outra pessoa).

Todos os sistemas de gerenciamento de banco de dados lidam com problemas de simultaneidade com bloqueios. Antes que uma instrução em execução possa modificar alguns dados, ela deve travar. Enquanto esse bloqueio é mantido, nenhuma outra instrução SQL em execução simultânea pode atualizar os mesmos dados. A fim de evitar que outro usuário leia dados atualizados pela metade, enquanto este bloqueio é mantido, nenhuma instrução SQL em execução simultânea pode nem mesmo leitura os dados.

Os leitores devem esperar que os escritores terminem de escrever. Os escritores devem esperar que os leitores terminem de ler.

Este tipo de sistema, chamado bloqueio pessimista, é simples de implementar, funciona muito bem no laboratório de pesquisa e pode ser comprovado como correto matematicamente. O único problema com essa abordagem é que muitas vezes não funciona no mundo real de desenvolvedores apressados ​​e vários usuários simultâneos. O que pode acontecer é que uma página administrativa em um site de comércio eletrônico, por exemplo, contenha uma consulta de relatório que leva uma hora para ser executada e atinge todas as linhas nas tabelas de usuários e pedidos. Enquanto esta consulta está sendo executada, nenhum dos usuários das páginas públicas pode se registrar ou fazer pedidos.

Com o Oracle RDBMS, os leitores nunca esperam pelos escritores e os escritores nunca esperam pelos leitores. Se um SELECT começa a ler às 9:01 e encontra uma linha que foi atualizada (por outra sessão) às 9:02, o Oracle alcança um segmento de rollback e desenterra o valor de pré-atualização para o SELECT (isso preserva o Isolamento requisito do teste ACID). Uma transação não precisa de bloqueios, a menos que esteja modificando uma tabela e, mesmo assim, apenas leva bloqueios nas linhas específicas que devem ser modificadas.

Esse é o tipo de arquitetura de bloqueio RDBMS que você deseja para um site da Web e, a partir de 2003, é fornecido apenas pela Oracle e Postgres.

Opção de indexação de texto completo

Isso requer que o RDBMS leia todas as linhas da tabela, o que é lento. Além disso, isso não mostrará revistas cuja descrição inclua a palavra & quotdog & quot.

Um indexador de texto completo constrói uma estrutura de dados (o índice) no disco para que o RDBMS não precise mais varrer a tabela inteira para encontrar linhas que contenham uma palavra ou combinação de palavras específica. O software é inteligente o suficiente para ser capaz de pensar em termos de raízes de palavras em vez de palavras. Portanto, "correr" e "correr" ou "cachorro" e "cachorros" podem ser trocados nas consultas. Os indexadores de texto completo geralmente também são capazes de pontuar uma frase inserida pelo usuário em uma tabela de banco de dados de documentos para relevância, para que você possa consultar as correspondências mais relevantes.

Finalmente, os motores de busca de texto modernos são muito inteligentes sobre como as palavras se relacionam. Assim, eles podem entregar um documento que não contenha a palavra & quotdog & quot, mas que contenha & quotGolden Retriever & quot. Isso torna serviços como anúncios classificados, fóruns de discussão, etc., muito mais úteis para os usuários.

Os fornecedores de sistemas de gerenciamento de banco de dados relacional estão gradualmente incorporando a indexação de texto completo em seus produtos. Infelizmente, não existe um padrão para consultas usando este índice. Portanto, se você descobrir como consultar o Oracle Text para "linhas relacionadas a 'execução' ou seus sinônimos", a sintaxe SQL não será útil para fazer a mesma pergunta do Microsoft SQL Server com sua opção de indexação de texto completo.

Comprimento máximo do tipo de dados VARCHAR

Você pode ingenuamente esperar que um sistema de gerenciamento de banco de dados relacional forneça abstração para armazenamento de dados. Depois de definir uma coluna para conter uma string de caracteres, você esperaria poder dar ao DBMS uma string de dez ou milhões de caracteres e ter cada uma armazenada da maneira mais eficiente possível.

Na prática, os sistemas comerciais atuais são muito ruins para armazenar dados inesperadamente longos, por exemplo, o Oracle só permite que você tenha 4.000 caracteres em um VARCHAR. Tudo bem se você estiver construindo um sistema de contabilidade corporativa, mas ruim para um site público. Você não pode ter certeza de quanto tempo um anúncio classificado do usuário ou publicação no quadro de avisos vai durar. O padrão SQL fornece um tipo de dados LONG para lidar com esse tipo de situação e os fornecedores de banco de dados modernos geralmente fornecem objetos grandes de caracteres (CLOB). Esses tipos teoricamente permitem armazenar dados arbitrariamente grandes. No entanto, na prática, existem tantas restrições nessas colunas que elas não são muito úteis. Por exemplo, você não pode usá-los em uma cláusula SQL WHERE e, portanto, o "LIKE '% dogs%'" acima seria ilegal. Você não pode construir um índice padrão em uma coluna LONG. Você também pode ter dificuldade em inserir ou retirar strings de colunas LONG. O analisador Oracle SQL só aceita strings literais de até 4.000 caracteres. Depois disso, você deve usar chamadas de API C especiais.

Atualmente, o PostgreSQL parece ser o líder nesta área. Você pode declarar uma coluna como um texto ou caractere variável e armazenar uma string de até cerca de 1 GB de tamanho.

Pagando um Fornecedor RDBMS

Essa é a parte que dói. A estratégia básica de preços dos fornecedores de sistemas de gerenciamento de banco de dados é pendurar o usuário pelos calcanhares, ver quanto dinheiro sai, pegar tudo e depois pedir outros $ 50.000 pelo & quotsupport & quot. Idealmente, eles gostariam de saber quanto valem seus dados e quanto lucro você espera de disponibilizá-los e, em seguida, extrair todo esse lucro de você. A este respeito, eles se comportam como o monopólio clássico de maximização de lucro discriminador de preços da Microeconomia 101.

Classicamente, uma licença RDBMS era cobrada por usuário. As grandes seguradoras com 1000 processadores de sinistros pagariam mais do que as pequenas empresas com 5. A Web confundiu os fornecedores de RDBMS. Por outro lado, o servidor era acessível a qualquer pessoa em qualquer lugar do mundo. Portanto, o acordo justo seria uma licença de usuário ilimitada de $ 64.000 por CPU. Por outro lado, não muitos editores da Web realmente tinham $ 64.000 por CPU em suas contas correntes. Portanto, os fornecedores de RDBMS se contentariam em vender uma licença de 5 ou 8 usuários.

Se você não consegue tolerar os preços dos sistemas comerciais, dê uma boa olhada no PostgreSQL. O desenvolvimento de uma ameaça confiável para o uso do PostgreSQL pode resultar em alguma flexibilidade de preços dos vendedores RDBMS comerciais.

Desempenho

Todos os fornecedores de RDBMS afirmam ter o sistema mais rápido do mundo. Não importa o que você leia nos folhetos, tenha certeza de que qualquer produto RDBMS será muito lento. Na década de 1990, tínhamos 70.000 linhas de dados para inserir no Oracle8. Cada linha continha seis números. Descobrimos que os dados não estavam no formato mais conveniente para importação, então escrevemos um script Perl de uma linha para reformatá-los. Demorou menos de um segundo para ler todas as 70.000 linhas, reformatá-las e gravá-las de volta no disco em um arquivo. Em seguida, começamos a inseri-los em uma tabela Oracle 8, uma inserção SQL por vez. Demorou cerca de 20 minutos (60 linhas / segundo). Isso apesar do fato de que a tabela não foi indexada e, portanto, o Oracle não teve que atualizar vários locais no disco.

Existem várias maneiras de obter alto desempenho. Uma é comprar um grande computador multiprocessador com RAM suficiente para armazenar todo o modelo de dados de uma vez. Infelizmente, a menos que você esteja usando PostgreSQL, seu fornecedor de RDBMS provavelmente dará uma ampliação em sua conta bancária que ele não esquecerá tão cedo. A taxa de licença será quatro vezes mais para uma máquina de quatro CPUs do que para uma máquina de uma CPU. Portanto, pode ser melhor tentar obter o computador de CPU única mais rápido possível.

Se você estiver processando muitas transações, todas aquelas CPUs repletas de RAM não o ajudarão. Seu gargalo será a contenção do eixo do disco. A solução para isso é entoar & quotOh, que amigo eu tenho da Seagate & quot. Os discos são lentos. Muito devagar. Literalmente, quase um milhão de vezes mais lento que o computador. Portanto, o computador passa muito tempo esperando pelo (s) disco (s). Você pode acelerar SQL SELECTs simplesmente comprando tanta RAM que todo o banco de dados ficará na memória. No entanto, o requisito de durabilidade no teste ACID para transações significa que algum registro de uma transação terá que ser gravado em uma mídia que não será apagada no caso de falha de energia. Se um disco só puder fazer 100 buscas por segundo e você tiver apenas um disco, seu RDBMS terá que ser pressionado para fazer mais de cerca de 100 atualizações por segundo.

A primeira coisa que você deve fazer é espelhar todos os seus discos. Se você não tiver todo o banco de dados na RAM, isso acelera os SELECTs porque o controlador de disco pode ler de qualquer disco que esteja mais próximo da trilha desejada. O efeito oposto pode ser obtido se você usar & quotRAID nível 5 & quot, onde os dados são distribuídos em vários discos. Em seguida, o RDBMS tem que esperar cinco discos para buscar antes que ele possa tossir algumas linhas. Espelhamento direto, ou & quotRAID nível 1 & quot, é o que você deseja.

A próxima decisão que você deve tomar é & quotQuantos discos? & Quot O Oracle9i DBA Handbook (Loney 2001 Oracle Press) recomenda uma configuração de disco 7x2 como um compromisso mínimo para uma máquina que não faz nada além de serviço de banco de dados. Suas soluções começam em discos 9x2 e vão até 22x2. A ideia é manter os arquivos que podem ser gravados em paralelo em discos separados para que seja possível fazer 2.200 buscas / segundo em vez de 100.

Esta é a solução de 17 discos de Kevin Loney (espelhado X2) para evitar a contenção do fuso:

DiscoConteúdo
1 Software Oracle
2 Espaço de tabela SYSTEM
3 Espaço de tabela RBS (segmento de rollback no caso de uma transação dar errado)
4 DATA tablespace
5 Espaço de tabela INDEXES (a mudança de dados requer a mudança de índices, o que permite que essas mudanças ocorram em paralelo)
6 Espaço de tabela TEMP
7 TOOLS tablespace
8 Log de redo on-line 1, arquivo de controle 1 (eles seriam separados em uma máquina de 22 discos)
9 Redo log online 2, arquivo de controle 2
10 Log de redo on-line 3, arquivo de controle 3
11 Software de Aplicação
12 RBS_2
13 DATA_2 (tabelas que tendem a ser capturadas em paralelo com aquelas em DATA)
14 INDEXES_2
15 TEMP_USER
16 Disco de destino de redo log arquivado
17 Exportar disco de destino do arquivo de despejo

[Outra área em que os bancos de dados comerciais podem ser muito mais rápidos que o PostgreSQL é lidar com 50 transações simultâneas de 50 usuários diferentes. Em uma implementação RDBMS ingênua, eles seriam alinhados em ordem, um log da transação 1 seria gravado no disco e, em seguida, o usuário do banco de dados que o solicitou seria notificado do sucesso, a transação 2 seria então processada e, após outra gravação no disco, ser declarado um sucesso. A Oracle, no entanto, é inteligente o suficiente para dizer "cerca de 50 transações chegaram quase no mesmo momento, então vou escrever um grande bloco de informações no disco e, em seguida, voltar a todos os 50 usuários informando-os sobre o sucesso de sua transação. " Assim, o desempenho em teoria poderia ser 50 vezes melhor com Oracle (1 gravação em disco) do que com PostgreSQL (50 gravações em disco).]

Não se esqueça de fazer backup

Tenha medo. Tenha muito medo. Os backups padrão do sistema de arquivos do Unix ou do Windows não deixarão você com um banco de dados em fita consistente e, portanto, restaurável. Suponha que seu RDBMS esteja armazenando seu banco de dados em dois arquivos de sistema de arquivos separados, foo.db e bar.db. Cada um desses arquivos tem 200 MB. Você inicia o seu programa de backup em execução e ele grava o arquivo foo.db na fita. À medida que o backup prossegue, chega uma transação que requer alterações em foo.db e bar.db. O RDBMS faz essas alterações, mas as de foo.db ocorrem em uma parte do arquivo que já foi gravada na fita. Eventualmente, o programa de backup começa a gravar bar.db na fita e grava a nova versão com a alteração. O administrador do sistema chega às 9h e envia as fitas via correio para um depósito externo.

Ao meio-dia, uma multidão feia de usuários se reúne fora de seu escritório, irritados com a adição de uma página inicial de animação em Flash. Você envia um de seus designers gráficos para explicar como ficou "legal" quando foi executado em um disco local em uma demonstração para o vice-presidente. A multidão apedrejou-o até a morte e, em seguida, incendiou sua fazenda de servidores. Você consegue abrir caminho para fora dos escombros com um daqueles teclados de caixa HP Unix indestrutíveis. Você consegue fazer com que o pessoal do suporte de desastres da HP deixe você usar suas máquinas por algum tempo e carregar com segurança sua fita de backup. Para seu horror, o RDBMS sufoca o sangue após a restauração. Descobriu-se que havia estruturas de dados vinculadas em foo.db e bar.db. Metade das estruturas de dados (as de foo.db) são a & quotolda versão pré-transação & quot e a outra metade são a & quotnova versão pós-transação & quot (as de bar.db). Uma transação ocorrida durante o backup resultou em uma perda completa de disponibilidade de todos os seus dados. Talvez você pense que esse não é o design de RDBMS mais robusto do mundo, mas não há nada no padrão SQL ou na documentação do fabricante que diga que o Oracle ou o Microsoft SQL Server não podem funcionar dessa maneira.

O espelhamento completo evita que você fique off-line devido a falhas de mídia. Mas você ainda precisa de instantâneos de seu banco de dados, caso alguém fique um pouco animado com uma instrução DELETE FROM ou na situação descrita acima.

Existem duas maneiras de fazer backup de um banco de dados relacional: off-line e on-line. Para um backup off-line, você fecha os bancos de dados, evitando que as transações ocorram. A maioria dos fornecedores prefere que você use seu utilitário para fazer um arquivo de despejo de seu banco de dados off-line, mas na prática será suficiente apenas fazer backup dos arquivos do sistema de arquivos Unix ou Windows. O backup off-line é normalmente usado por seguradoras e outros grandes usuários de banco de dados que precisam fazer transações apenas oito horas por dia.

Cada fornecedor de RDBMS tem uma maneira anunciada de fazer backups online. Pode ser tão simples quanto & quotchamar esta função e trabalharemos por algumas horas construindo para você um arquivo de despejo que contém um banco de dados consistente, mas sem todas as transações que ocorreram depois que você chamou a função. Aqui está um exemplo da Oracle:

  • Quebre o espelho.
  • Faça backup dos discos que estão off-line no que diz respeito ao banco de dados.
  • Restabeleça o espelho.

As lições aqui são várias. Em primeiro lugar, seja qual for o seu procedimento de backup, certifique-se de testá-lo com restaurações periódicas. Em segundo lugar, lembre-se de que o backup e a manutenção de um RDBMS são feitos por um funcionário em tempo integral na maioria das empresas, denominado & quotthe dba & quot, abreviação de & quotadministrador de banco de dados & quot. Se o software funcionasse conforme anunciado, você poderia esperar alguns dias de sofrimento durante a instalação e, em seguida, dores recorrentes periódicas para se manter atualizado com recursos aprimorados. No entanto, dba's ganham seus salários moderadamente generosos. Nenhum exagero de marketing é suficiente para fazer um programa C funcionar como anunciado. Isso vale para um RDBMS tanto quanto para um processador de texto. Chegar a um acordo com os bugs pode ser um trabalho de tempo integral em uma grande instalação. Na maioria das vezes, isso significa encontrar soluções alternativas, pois os fornecedores são notoriamente lentos com as correções. Outro trabalho de tempo integral é caçar usuários que estão fazendo consultas que estão demorando 1000 vezes mais do que o necessário porque se esqueceram de construir índices ou não conhecem SQL muito bem. O Children's Hospital tem três dbas em tempo integral e eles trabalham duro.

Vamos encerrar citando Perrin Harkins. Um participante de um fórum de discussão perguntou se o cache de consultas de banco de dados em arquivos Unix aceleraria seu servidor web. Aqui está a resposta de Perrin:

Resumo

  • Você e seus programadores cometerão erros ao implementar sistemas de processamento de transações. É melhor você concentrar suas energias no aplicativo e deixar a indexação, as transações e a simultaneidade para um sistema de gerenciamento de banco de dados.
  • O software de gerenciamento de banco de dados mais prático para sites da Web é um sistema de gerenciamento de banco de dados relacional com um indexador de texto completo.
  • Se você pode programar uma planilha, você pode programar um RDBMS em SQL.
  • RDBMSes são lentos. Prepare-se para comprar uma máquina grande com muitos discos.
  • Os RDBMSes, embora muito mais confiáveis ​​do que a maioria dos códigos de processamento de transações escritos pelo usuário, não são tão confiáveis ​​quanto um servidor Web básico que extrai arquivos estáticos de um sistema de arquivos. Prepare-se para contratar um administrador de banco de dados em meio período ou em tempo integral se seu banco de dados crescer para qualquer tamanho significativo.
    é o tutorial de SQL curto, agradável, gratuito e disponível na Web do autor
  • O Practical SQL Handbook (Bowman, Emerson, Darnovsky 1996 Addison-Wesley) é meu tutorial introdutório de SQL favorito. Se você quiser ver como a linguagem é usada em instalações reais, obtenha SQL para Smarties: Advanced SQL Programming (Joe Celko 1999 Morgan Kaufmann).
  • Para um histórico interessante sobre a primeira implementação de banco de dados relacional, visite http://www.mcjones.org/System_R/
  • Para conhecer os bastidores de uma variedade de sistemas de gerenciamento de banco de dados, obtenha Readings in Database Systems (Stonebraker e Hellerstein 1998 Morgan Kaufmann)
  • Construir um Sistema de Banco de Dados Orientado a Objetos irá ajudá-lo a tirar seus antolhos RDBMS, pois descreve o O2 sistema.

Comentários do leitor

É uma pena que esta página ajude a perpetuar mitos e desinformação sobre bancos de dados.

Por exemplo:

Diz que existem RDBMSs no mercado hoje. Existe apenas um, Alphora Dataphor. Todos os outros são SGBDs SQL, e o SQL viola muitos fundamentos do modelo relacional para ser chamado de linguagem relacional. Portanto, SQL DBMSes não são RDBMSes.

Como consequência, ele diz que os RDBMSes são lentos. SQL DBMSes são lentos, mas RDBMSes não precisam ser, pois o modelo relacional define que o modelo físico pode ser bem diferente do modelo lógico do banco de dados. Assim, pode-se manter um modelo lógico limpo e ainda implementar todos os tipos de otimizações no nível físico. Isso é o que os otimizadores de SQL tentam fazer, mas devido à complexidade do SQL e à confusão do modelo lógico e físico, eles falham.

Concordo com o pôster acima no sentido de que o autor está confundindo SQL DBMS ou um banco de dados relacional. No entanto, posso perdoar o autor por isso, porque isso é muito comum na indústria (mesmo que ele seja do MIT).

A lentidão da maioria dos bancos de dados durante a inserção ocorre porque a maioria dos sistemas de banco de dados força os dados para o disco após cada inserção. Este é um & # 39característico & # 39; de segurança & não um bug & # 39 & # 39 de desempenho e não tem nada a ver com desempenho. O simples fato de envolver todo o processo de carregamento em uma tração deve ter resolvido o problema.

Os comentários do autor sobre o PostgreSQL não ser escalável e os sistemas comerciais estão incorretos. O PostgreSQL implementou o registro de escrita antecipada (que é o que ele está falando) com a versão 7.2 em 2002. Além disso, o PostgreSQL tem MVCC o que o torna muito, muito scabale. algumas implementações comerciais nem mesmo têm isso, por exemplo, o servidor MS SQL.

Merlin

Phil está um tanto incorreto sobre os fornecedores que oferecem suporte ao bloqueio de nível de linha. A MS oferece suporte ao bloqueio em nível de linha desde o SQL Server 7.0. Na prática, seu gerenciador de transações decide o quão granular será um bloqueio de acordo com os parâmetros da consulta. Se muitas linhas individuais forem bloqueadas em uma transação (de acordo com algum & # 34 limite de escalonamento de bloqueio & # 34 calculado), a tabela inteira será bloqueada.


Dados e ferramentas TRI

O Programa de Inventário de Liberação de Tóxicos (TRI) rastreia o gerenciamento industrial de produtos químicos tóxicos que podem causar danos à saúde humana e ao meio ambiente.

Os dados TRI são relatados por certas instalações industriais e federais. A EPA disponibiliza esses dados por meio de várias ferramentas online, muitas das quais adicionam contexto para ajudar a tornar os dados relatados mais compreensíveis.

Nesta página:

Dados TRI conforme relatado pelas instalações

Envirofacts Formulário R Pesquisa

Descrição:Obtenha uma lista de todos os formulários de relatórios de TRI enviados por uma instalação em seu histórico de TRI e visualize os formulários de qualquer um dos produtos químicos relatados.

Conteúdo:Dados relatados pela instalação

Resultado:Fac-símile do formulário de relatório TRI

Envirofacts Form R & amp Form A Download

Descrição:Selecione e visualize os elementos de dados específicos do Formulário de Relatório R da TRI e do Formulário de Relatório A.

Conteúdo:Dados relatados pela instalação

Resultado:arquivos .csv ou tabelas .html

Relatórios Nacionais / Fichas Técnicas

TRI Factsheets

Descrição:Visão geral dos dados TRI para um local, setor industrial ou químico. Ideal para usuários TRI iniciantes. Também disponível em espanhol.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado: Fichas técnicas para impressão

Análise Nacional TRI

Descrição:Uma análise anual de dados TRI em um formato narrativo e gráfico. Mapas, gráficos e tabelas interativos destacam os dados em nível nacional, enquanto as planilhas informativas detalham áreas geográficas específicas.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado:Folhas informativas para impressão de relatórios interativos com base na web

Ferramentas TRI para a maioria dos usuários

Pesquisa TRI

Descrição:Pesquise as instalações TRI perto de um endereço ou local ou pelo nome da instalação e veja os dados TRI de nível resumido para cada uma. Os resultados incluem informações sobre emissões ambientais, características da população, prevenção da poluição e conformidade e fiscalização. Ideal para usuários iniciantes de TRI e para uso em dispositivos móveis.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado: Resultados da pesquisa organizados em seções baseadas em tópicos, mapas, tabelas e gráficos personalizáveis, downloads de dados e resumos para impressão

TRI Explorer

Descrição:Pesquise por produto químico, local, setor industrial ou terra tribal. Concentre-se em liberações de produtos químicos, transferências de resíduos ou quantidades de resíduos.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado: Relatórios compostos de tabelas de dados classificáveis ​​(a maioria inclui a capacidade de detalhar os formulários de relatórios individuais de uma instalação) arquivos .csv / .txt compatíveis com planilhas ou resultados em versões PDF / Word

Envirofacts TRI Search

Descrição:Explore informações básicas em nível de instalação para qualquer instalação que tenha relatado dados TRI desde 1987. Pesquise por nome da instalação, produto químico, localização, setor industrial ou terreno tribal.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado: Lista de instalações com links para visualizar um relatório detalhado da instalação, relatório de prevenção de poluição ou relatório de triagem de risco para cada um.

Dados e ferramentas TRI para análise avançada / personalizada

Arquivos de dados básicos

Descrição:Dados para um ano de relatório contidos em um único arquivo de dados, para um estado individual ou todo os EUA. Cada arquivo contém os elementos de dados mais comumente usados ​​do formulário de relatório TRI. Este é um conjunto de dados mais simples, em comparação com os arquivos Basic Plus. Recomendado para usuários familiarizados com os dados TRI.

Conteúdo:Dados relatados pela instalação

Resultado: arquivos .csv

Arquivos de dados Basic Plus

Descrição:Dados para um ano de relatório para todos os EUA. Cada arquivo .zip é composto de 10 arquivos .txt que contêm todos os elementos de dados do formulário de relatório TRI (exceto Formulário R Cronograma 1, que está disponível separadamente). Recomendado para usuários familiarizados com os dados TRI.

Conteúdo:Dados relatados pela instalação

Resultado:Arquivos .txt delimitados por tabulação compactados em arquivos .zip.

Envirofacts Customized Search

Descrição:Crie relatórios em várias áreas de foco usando um conjunto abrangente de elementos de dados TRI. De todas as ferramentas TRI online, esta fornece a maior flexibilidade na construção de uma pesquisa e na escolha de como os resultados são organizados. Recomendado para usuários familiarizados com consulta de banco de dados.

Conteúdo:Dados relatados pela instalação

Resultado: tabela .html ou arquivo .csv

Envirofacts EZ Search

Descrição:Crie relatórios em várias áreas de foco. Oferece o mesmo amplo conjunto de opções de organização de resultados que a Pesquisa personalizada, mas com uma maneira mais simples de selecionar áreas de foco. Agrupamento de dados e funções estatísticas disponíveis. Recomendado para usuários familiarizados com consulta de banco de dados.

Conteúdo:Dados relatados pela instalação

Resultado: arquivos .csv ou tabelas html

Dados e ferramentas focados em tópicos

TRI Tribal Search (dados para instalações em ou perto de terras tribais)

Descrição:Dados de nível resumido sobre liberações e outras atividades de gerenciamento de resíduos químicos relatados pelo TRI em instalações localizadas em ou dentro de 10 milhas de terras tribais.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado:Tabelas classificáveis, tabelas e gráficos personalizáveis

Ferramenta de pesquisa TRI P2 (prevenção de poluição)

Descrição:Encontre e compare informações sobre como as instalações da TRI e suas empresas controladoras gerenciam os resíduos químicos e trabalham para reduzir a liberação de produtos químicos no meio ambiente. Esta ferramenta oferece uma visão abrangente dos dados de redução da fonte e gerenciamento de resíduos (ou seja, lançamentos, reciclagem, recuperação de energia e tratamento) relatados pelas instalações do TRI.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado:Tabelas classificáveis, tabelas e gráficos personalizáveis

Painel do setor industrial TRI P2 (prevenção de poluição)

Descrição:Filtre os dados de prevenção da poluição e gerenciamento de resíduos para setores específicos da indústria, com base nos dados relatados pelo TRI.

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais

Resultado: Gráficos e gráficos prontos para apresentação

Execução e histórico de conformidade online (ECHO) (conformidade da instalação)

Descrição:Informações de execução e conformidade para TRI e outras instalações regulamentadas pela EPA. Não gerenciado pelo Programa TRI.

Conteúdo:Dados de vários programas EPA e alguns bancos de dados não EPA

Resultado:Downloads de dados de relatórios detalhados das instalações

Painel de comparação DMR / TRI (descargas de água de superfície)

Descrição:Determine quais poluentes estão sendo despejados nos cursos d'água e por quais empresas. Não gerenciado pelo Programa TRI.

Conteúdo:Dados do Sistema Nacional de Eliminação de Descargas de Poluentes (NPDES) e TRI

Resultado:Arquivos interativos .csv de gráficos e tabelas

Indicadores Ambientais de Triagem de Risco (RSEI) (comparação de risco relativo)

Descrição:Explore os impactos potenciais das liberações de produtos químicos relatados pelo TRI sobre o risco relativo e compare-os para diferentes produtos químicos, locais, instalações e anos de referência. (Observação: o botão "GO" abaixo leva ao EasyRSEI. Para obter mais informações e outros produtos RSEI, visite o site principal da RSEI.)

Conteúdo: Dados relatados pela instalação e informações contextuais adicionais e fontes de dados

Resultado:Downloads de dados gráficos prontos para apresentação de pontuações numéricas

TRI-CHIP (toxicidade de produtos químicos TRI)

Descrição:Acesse e analise informações sobre toxicidade para produtos químicos cobertos pelo TRI por meio deste banco de dados do Microsoft Access para download.

Conteúdo: Informações de toxicidade de várias fontes

Resultado:Relatórios de perfil de toxicidade química para impressão

Arquivos de dados de dioxina / TEQ (dados de dioxinas e valores de equivalência tóxica)

Descrição:Dados da quantidade de massa de dioxina do Formulário R, Cronograma 1 do relatório TRI, junto com os valores de equivalência tóxica calculados pela EPA. Esses arquivos complementam os arquivos de dados Basic e Basic Plus. Observe que os dados de dioxinas já estão incluídos na maioria das outras ferramentas TRI. Recomendado para usuários familiarizados com os dados TRI.

Conteúdo:Dados relatados pela instalação

Resultado:arquivos .csv

EnviroMapper (mapeando vários dados ambientais)

Descrição:Mapeie os dados ambientais e adicione pontos de interesse para visualizar os dados no contexto. Não gerenciado pelo Programa TRI.

Conteúdo: Dados de vários programas EPA e dados GIS