Meu objetivo é produzir um método rápido, confiável e automatizado para acessar dados somente leitura contidos em várias fontes de dados de arquivos simples muito grandes ( CSVs , documentos de largura fixa e XML) usando o Drupal 7 que pode ser consultado usando as Exibições 3 módulo. Eu preferiria usar módulos já disponíveis, mas criar um módulo personalizado também é uma opção.
Para ajudar a descartar módulos e métodos não adequados para a tarefa, aqui estão as estatísticas dos arquivos com os quais estou trabalhando:
- Importação anual: arquivo CSV de 8.500.000 linhas . (Eliminado e recarregado anualmente. Possui chave primária.)
- Importação semanal: arquivo de largura fixa de 350.000 linhas. (Limpado e recarregado semanalmente. Nenhuma chave primária .)
- Importação por hora: arquivo CSV de 3.400 linhas . (Gostaria de atualizar e sincronizar o mais rápido possível, mas não mais que a cada 20 minutos. Possui chave primária)
- Importação diária: arquivo XML de 200 itens. (Eliminado e recarregado diariamente. Possui chave primária)
A conversão entre os três formatos não é um problema e pode ser feita se melhorar o desempenho da importação ou permitir que melhores ferramentas sejam disponibilizadas. ( AWK para largura fixa para CSV etc.) A automação de recuperação e conversão é fácil por meio de scripts cron e sh , mas ainda precisa automatizar a integração do Drupal 7. O uso de tabelas personalizadas também é possível desde que os vews possam fazer referência aos dados usando relacionamentos.
Qual seria a melhor prática para realizar esse tipo de integração de dados com o Drupal 7? Além disso, estou deixando de fora alguns detalhes importantes sobre os dados ou o que estou tentando realizar?
Aqui estão alguns projetos que estou procurando atualmente para encontrar uma solução. Gostaria de expandir isso para ajudar outras pessoas a decidir qual caminho seguir ao trabalhar com importações de dados maiores.
Importando dados para nós:
- Feeds (atualmente Alpha para D7)
Os feeds importam os dados de maneira confiável. A velocidade é razoável para as fontes de dados menores, mas é muito lenta para as tabelas de mais de 300k.
Automação disponível usando cron e Job Scheduler (atualmente Alpha para D7).
Não ter um índice ou chave exclusiva disponível nos dados de origem está dificultando o uso. É mais rápido que os feeds, mas ainda é lento para importar tabelas muito grandes.
A automação está disponível via drush e cron.
Tabelas personalizadas em vez de nós
- Módulo de dados (atualmente Alpha para D7)
O módulo Data parece muito promissor, mas é muito problemático para o D7 no momento. Os requisitos de velocidade de automação e importação seriam facilmente atendidos usando dados, mas falta confiabilidade. A integração de visualizações (link para D6) parece muito promissora.
- Assistente de tabela (não disponível para D7)
Adicionado isso para referência. Não há candidato a D7 neste momento, mas poderia servir como ponto de partida para um módulo personalizado.
- Esquema de exibições (abandonado, apenas D6)
Adicionado isso para referência. Isso parece ter sido absorvido pelo Table Wizard no Drupal 6. Novamente, adicionado apenas para referência.
- Importador (RC2 para D7)
Parece exigir o Assistente de Tabela (somente D6) para a integração do Views . Adicionado para referência, mas não atende ao requisito de Visualizações.
@MPD - Adicionadas "tabelas personalizadas" como uma possível solução e módulos expandidos. Obrigado por esta adição.
fonte
Eu acho que uma abordagem baseada em nó (ou mesmo baseada em entidade) queimará seu servidor com milhões de nós. Além disso, observando sua importação horária, isso significa que você criará um node_save () pelo menos uma vez por segundo. Isso é demais para o Drupal e causa um problema de desempenho.
A razão por trás disso é para esse conteúdo, você não precisará de nenhum mecanismo de gancho, não precisará de pathauto (mas você pode criar alias manualmente, é muito mais barato que pathauto), não precisará de campos ... uma consulta simples "INSERT" é 100x mais rápida que node_save () ou entity_save ().
1 / IMHO, a melhor opção é uma tabela personalizada e um módulo personalizado para sua importação de dados e, em seguida, escreva manipuladores de Views para integração com o Drupal.
2 / O cache do banco de dados é invalidado durante a importação horária. Se demorar muito, você pode pensar em uma replicação. Na forma mais fácil, crie duas tabelas idênticas, use a primeira, importe para a segunda, alterne sua configuração do Drupal para usar a segunda tabela, sincronize a 2ª tabela com a 1ª (opcionalmente, volte para a primeira). Outra solução está no seu script de importação personalizado, prepare e agrupe as consultas INSERT / UPDATE e envie-a apenas no final de uma transação para reduzir o tempo de gravação do banco de dados.
fonte