Получить удаленный текстовый файл, обработать и обновить базу данных - подход и язык сценариев для использования? - PullRequest
2 голосов
/ 26 июня 2009

Я должен был сделать некоторую базовую обработку корма. Итак, получите файл через ftp, обработайте его (то есть получите нужные мне поля), а затем обновите локальную базу данных. И аналогично в другом направлении: получить данные из базы данных, создать файл и загрузить по ftp. Сценарии будут называться cron.

Я думаю, что идея была бы для каждого типа канала, определить информацию о соединении / файле ftp. Затем должен быть перевод того, как поля данных в файле связаны с полями данных, с которыми приложение может работать (и, конечно, обрабатывать этот перевод). Дополнительно напишите отдельные сценарии, которые выполняют общие функции вставки для различных объектов, которые могут использоваться в разных каналах.

В качестве примера электронной коммерции, скажем, я работаю с разными поставщиками, которые предоставляют мне каналы. Фиды могут быть разных (объектных) типов: продукт, категория или информация о заказе. Для каждого типа канала я, очевидно, работаю с разными полями и вызываю разные сценарии обновления или вставки.

На каком языке лучше всего это реализовать? Я могу работать с PHP, но ищу проект, чтобы начать изучать Perl или Python, так что это может быть полезно и для меня.

Если Perl или Python, не могли бы вы вкратце дать реализацию высокого уровня. Итак, как разделить различные сценарии, объектно-ориентированный подход? Как упростить внедрение новых каналов или функций обработки в будущем и т. Д.

[полное раскрытие: на PHP уже были написаны классы, которые я недавно использовал для создания нового канала. Я уже сделал свою работу, но это было очень грязно и трудно сделать. Так что этот вопрос - не вопрос «Пожалуйста, помогите мне сделать мою работу», а скорее вопрос «лучший подход» для моего собственного развития.]

Спасибо!

Ответы [ 4 ]

3 голосов
/ 26 июня 2009

Вид зависит от формата файлов, которые вы используете ftp. Если это сумасшедший проприетарный формат, вы можете застрять на любом языке, в котором уже есть библиотека, управляющая им. Если это CSV или XML, то подойдет любой язык.

Так же, как примеры. Это кажется довольно простым, но я делаю Perl почти каждый день; -)

2 голосов
/ 26 июня 2009

«Лучший» язык довольно субъективен. Считается, что Python легко изучается и легко читается, тогда как Perl часто в шутку называют языком «только для записи». С другой стороны, Perl широко используется для управления сетью. Python, как правило, больше используется для управления системой или программирования в целом. У обоих есть области превосходства, и области, где они не работают также.

Любой язык позволит вам решить вашу проблему довольно легко. Оба они имеют все необходимые модули в виде связанных библиотек или легко доступны.

Если бы я использовал Python, я бы использовал ConfigParser

http://docs.python.org/library/configparser.html#module-ConfigParser

для сохранения настроек для каждого проекта, ftplib:

http://docs.python.org/library/ftplib.html

для связи с ftp-сервером и одной из множества библиотек баз данных. Например, если вы используете postgres:

http://www.pygresql.org/

Наконец, для опций командной строки я бы использовал отличный модуль парсера опций, который поставляется с Python:

http://docs.python.org/library/optparse.html#module-optparse

С точки зрения кода у меня были бы следующие объекты:

# Reads in a config file, decides which feed to use, and passes
# the commands in to one of the classes below for import and export
class FeedManager

# Get data from db into a canonical format
class DbImport

# Put data into db from a canonical format
class DbExport

# Get data from ftp into a canonical format
class FtpImport

# Put data into ftp from canonical format
class FtpExport

каждый класс переводится в / из канонического формата, который может быть передан одному из других дополнительных классов.

Файл конфигурации может выглядеть следующим образом:

[GetVitalStats]
SourceUrl=ftp.myhost.com
SourceType=FTP

Destination=Host=mydbserver; Database=somedb
SourceType=Postgres

И, наконец, вы бы назвали это так:

process_feed.py --feed=GetVitalStats
1 голос
/ 26 июня 2009

Python .

первый. В каком формате эти файлы FTP? Я предполагаю, что они CSV.

второй. Как узнать, когда запустить FTP получить? Фиксированный график? Событие? Я предполагаю, что это фиксированный график. Вы будете использовать cron для управления этим.

У вас есть три проблемы: получение по FTP, извлечение данных, загрузка БД.

ftp_get_load.py

import ftplib
import csv
import someDatabaseAPI as sql

class GetFile( object ):
    ... general case solution using ftplib ...

class ExtractData( object ):
    ... general case solution using csv ...

class LoadDB( object ):
    ... general case solution using sql ...

some_load.py

import ftp_get_load

class UniqueExtractor( ftp_get_load.ExtractData ):
    ... overrides ...

get = GetFile( url, filename, etc. )
extract = UniqueExtractor( filenamein, filenameout, etc. )
load = LoadDB( filename, etc. )

if __name__ == "__main__":
    get.execute()
    extract.execute()
    load.execute()
1 голос
/ 26 июня 2009

Большинство современных языков сценариев позволяют вам делать все эти вещи. Поэтому я думаю, что ваш выбор языка должен основываться на том, что вы и люди, читающие ваш код, знаете.

В Perl я бы использовал следующие модули:

Net :: FTP для доступа к FTP-сайтам. DBI для вставки данных в вашу базу данных.

Модули, подобные этому, являются хорошими повторно используемыми частями кода, которые вам не нужно писать, а взаимодействие с ftp-сайтами и базами данных настолько распространено, что каждый современный язык сценариев должен иметь аналогичные модули.

Я не думаю, что PHP - отличный язык, поэтому я бы избегал его, если это возможно, но это может иметь смысл для вас, если у вас есть большой опыт в этом.

...