Кто знает ORM сразу на несколько языков (Python, Ruby, NodeJS)?
Разрабатываю большой проект по анализу данных, разные его части написаны на разных языках (вычисления на python, скраппинг на nodejs, админка и интерфейс на ruby on rails). Возникла проблема с дублированием кода, все части работают с одной и той же базой и очень не хочется описывать одни и те же структуры данных для трёх разных языков. Есть ли какое-то решение, которое позволяет описать это один раз и потом импортировать в нужные языки?
- например описание данных в yml/xml/json конфиге и импорт в нужные языки через соответствующие пакеты
- или описание данных на каком-то метаязыке и потом преобразование в нужные
База данных не принципиальна, сейчас использую mongodb+mysql, но легко могу переехать на любую другую, если для неё найдётся подходящее решение. Кто сталкивался с подобной ситуацией или знает варианты решения? Будут интересны любые мысли.
ORM изначально ЗАТОЧЕН на конкретный язык.
В каждом языке mapping объектов на СУБД реализуется несколько иначе.
Разве что вас заинтересуют близкие по идеологии ORM (когда один с другого слизан).
Ну так то куча инструментов, которые способны структуру данных прямо из SQL выдрать и перевести на ваш язык программирования. Что мешает использовать именно SQL в качестве "эталонного представления"?
Александр: я пару лет назад делал так: структура бд описана в отдельных таблицах базы данных: objects (собственно, таблицы) и properies (свойства, связанные с таблицей objects по полю object_id). Накалякал модуль на пттоне, который при вызове ModelGetter.get(object_name) собирал ОРМ-модель нв основе данных из этих таблиц. Питон смог :)
Можно было обойтись и без этих двух таблиц для метаданных и вытаскивать все, что нужно из ddl таблиц, но хранение метданных показалось практичнее, гибче и безопасней.
А как в таких случаях создавать модели данных в нужных языках, не дублируя их? Работать с данными можно и просто SQL запросами, они будут общими для всех языков, но хочется, чтобы на основе данных автоматически создавались модели. Чтобы они умели обновляться, сохраняться и т.п., как в любой нормальной ORM, только для нескольких языков.
Зачем? Никто лучше Rails не создаёт админки и никто лучше Node не парсит сторонние сайты. Частично дублирование при работе с БД - единственная проблема нескольких языков.
CapeRatel: вы хотите прямотой рук помериться?) Боюсь результат вас удивит. По поводу "разбивки на языки/инструменты", во-первых много инструментов это проблема для тех, кто их не знает, а концептуально правильнее гвозди забивать молотком, а клетку изучать с помощью микроскопа. Во-вторых вы не знакомы с нашими задачами, поэтому к чему ваш посыл? Конечно, при желании можно реализовать deep learning и на ruby, но зачем страдать)
Александр: Не знаю как там с админками, по-моему задача слишком тривиальная, чтобы какие-то сравнения проводить, но для скраппинга и кроулинга лучше https://scrapy.org нет даже рядом.