Python: взаимодействовать со сложным хранилищем данных - PullRequest
9 голосов
/ 24 сентября 2010

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

Есть ли лучший / стандартный метод взаимодействия между python и сложным макетом базы данных?

Я кратко оценил SQLAlchemy,SQLObject и Django-ORM, но (я могу легко что-то упустить) они, похоже, настроены на крошечные транзакции веб-типа (OLTP), где я выполняю аналитические транзакции большого объема (OLAP).

Некоторыемоих требований, это может несколько отличаться от обычного:

  1. загружать большие объемы данных относительно быстро
  2. обновлять / вставлять небольшие объемы данных быстро и легко
  3. легко обрабатывать большое количество строк (300 записей в минуту в течение 5 лет)
  4. позволяют вносить изменения в схему для будущих требований

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

Ответы [ 3 ]

6 голосов
/ 24 сентября 2010

Не смущайтесь вашими требованиями.Один размер не подходит для всех.

загружает большие объемы данных относительно быстро

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

быстро и легко обновлять / вставлять небольшие объемы данных

Это начинает нарушать правила хранилища данных.Если вы не говорите об управлении основными данными для обновления атрибутов отчетов в измерении.

Для этого предназначены ORM и веб-инфраструктуры.

легко обрабатывает большое количество строк (300 записейв минуту в течение 5 лет)

Опять же, именно поэтому вы используете конвейер обработки внешнего интерфейса Python, но фактические INSERT выполняются инструментами базы данных.Не питон.

легко изменять схему (вместе с интерфейсом python), для будущих требований

У вас почти нет необходимости автоматизировать это.Это, безусловно, ваша самая низкая приоритетная задача для "программирования".Вы часто будете делать это вручную для правильного сохранения данных.

Кстати, «ручные запросы, построенные с помощью обработки строк», вероятно, самая большая ошибка за всю историю.Это сложно обрабатывать анализатору СУБД - они работают медленнее, чем запросы, в которые вставлены переменные связывания.

3 голосов
/ 24 сентября 2010

Я использую SQLAlchemy с довольно большим хранилищем данных и использую его для успешного завершения всего процесса ETL. Особенно в определенных источниках, где у меня есть некоторые сложные правила преобразования или с некоторыми разнородными источниками (такими как веб-сервисы). Я не использую Sqlalchemy ORM, а скорее использую язык выражений SQL, потому что мне не нужно ничего сопоставлять с объектами в процессе ETL. Стоит заметить, что когда я привожу дословную копию некоторых источников, я скорее использую инструменты db для этого, такие как утилита дампа PostgreSQL. Вы не можете победить это. Язык выражений SQL - самый близкий к SQLAlchemy (или любому ORM) рукописный SQL, но поскольку вы можете программно генерировать SQL из python, вы сэкономите время, особенно если у вас есть действительно сложные правила преобразования, которым нужно следовать. 1001 *

Одна вещь, я скорее изменяю свою схему вручную. Я не доверяю никакому инструменту для этой работы.

2 голосов
/ 24 сентября 2010

SQLAlchemy определенно. По сравнению с SQLAlchemy все остальные ORM выглядят как детская игрушка. Особенно Django-ORM. Что такое Hibernate для Java, SQLAlchemy для Python.

...