Балетмейстер
Я подозреваю, что причина того, что в большинстве сред "ETL / staging" является отдельным шагом, заключается в том, что две конечные точки несколько жесткие и не имеют хорошего языка программирования для манипулирования данными. То есть, если у вас есть TXT, CSV, XML, JSON или SQL, и вам нужен другой формат / схема, тогда кто-то должен выполнить «преобразование». Но если вы работаете в GemStone, вы можете выполнить преобразование в Smalltalk - нет необходимости в отдельном шаге.
Файлы
Если у вас есть файлы (TXT, CSV, XML, JSON и т. Д.), Используйте GsFile . На самом деле, если другая конечная точка может работать с файлами, просто экспортируйте из одного источника в согласованном формате и затем импортируйте в другой (GemStone выполняет «тяжелую работу» по преобразованию). Файлы проще, они избегают коммуникационного уровня и делают отладку тривиальной (если источник не создал файл, то это проблема источника; если он находится в ожидающем каталоге, то еще не обработал его (проблема назначения) ); если он находится в завершенном каталоге, то получатель обработал его).
При таком подходе вы запускаете (одно или несколько) фоновых заданий в GemStone, чтобы просмотреть каталог, открыть файл для чтения, обработать файл и затем переместить его в другой каталог. Помимо основных манипуляций со строками, вам нужно работать только с GsFile. Затем вы создаете и обновляете свои объекты в базе данных.
ODBC
Хотя было бы возможно сделать вызовы FFI из GemStone в библиотеку ODBC (или в собственную библиотеку базы данных, как это делается с GemConnect), это, вероятно, будет излишне сложным. Вместо этого я бы создал еще один слой, используя инструменты, которые лучше взаимодействуют с внешней системой. Этот слой может записывать текстовые файлы (как описано выше) или, с соответствующим интерфейсом, может напрямую связываться с GemStone. Я хотел бы использовать Dolphin для извлечения данных (хорошая поддержка ODBC), а затем напрямую связаться с GemStone от Dolphin. Вы можете сделать что-то подобное с другими клиентскими диалектами Smalltalk (Pharo, VA или VW) или даже с другого языка (у меня есть студент, работающий над интерфейсом Python для GemStone).
O / R Mapping
Здесь снова вам нужен способ взять данные в одном формате и перевести их в другой. Они, как правило, сильно зависят от предметной области, и нам проще писать код на Smalltalk. Кроме того, вы можете использовать что-то вроде GLORP в Pharo, VA, VW и т. Д.
Лучшие практики
Я думаю, что вы не нашли «лучших практик» для ETL в GemStone, потому что это не то, что мы считаем внешним процессом или отдельным шагом. Существует только способ связи с файлом (GsFile), сокетом (GsSocket), библиотекой (CLibrary) или клиентом (GCI). Отсюда мы можем посмотреть на внутренние проблемы обработки, такие как несколько производителей и один потребитель (RcQueue), или один производитель и несколько потребителей ( блокировка ).
Таким образом, это не значит, что приложения GemStone не выполняют ETL, они просто делают это внутренне, а ситуации гораздо более специфичны для конкретной ситуации.