会社の新しいプロジェクトを開始しようとしています1 どのアーキテクチャがいくつかの要素で構成されます。 2つのモバイルアプリケーション(AndroidとiOS)、Web API(Java)とETL(まだNodeJSとJavaのどちらを使用するかを決定しています)があります。
システムは、複数のOpenDataリポジトリ(Web APIS)からデータを抽出し、各データセットを一意のデータモデルに変換して、データを統合する必要があります。
結果のモデルは、Web APIを通じて公開されるモデルであり、モバイルアプリによって使用されるモデルです。さらに、Web APIは、ソーシャルネットワークで見つけたものと同様の機能を提供します(高評価、お気に入り、リンクの共有、提案など)。
システムはDockerコンテナーとしてデプロイされます。おそらくパブリッククラウドプラットフォームです。
以前に同様のシステムを構築したことがあり、常に高水準プログラミング言語(主にJava)でETLを構築していることに気づきました。 Javaシリアライゼーション/デシリアライゼーションおよびメモリ管理に関して)の弱点を認識しています。Javaが私のゴールデンハンマーになり、時にはそれがやり過ぎかもしれません(または不十分です)。
I/Oとデータ変換(JSON)の実行が非常に優れているNodeJSなどの他の言語を検討し始めました。私が考えているETLの種類は、これらの機能を利用して実装を容易にすることができます。
しかし、私は最近DevOpsのタスクを実行しており、Linuxシェルスクリプトに夢中になりました。全体的に、wget
、awk
、grep
、sed
、jq
などのコマンドを使用します。別のプログラミング言語を必要とせずに、これらの4つのコマンドでETLを構築することもできました。 O.Sレイヤーは非常に快適で、高速で、効率的であることがわかりました。
その結果、私はO.S機能を利用するというアイデアを試してみて、O.Sレイヤーにさらに広く敷く次のETLを構築するようになりました。
私は似たようなものを構築したことがないため、私の質問は
プログラミングプラットフォームとしてO.Sレイヤー(コマンドとシェル)に依存することのリスク(少なくともより適切なもの)は何ですか?
何に注意すべきですか?
それは私だけですか、それとも通常はOSの基本的な機能を利用しませんか?もしそうなら、なぜですか? 2
注
アイデアは、ユーザーが動的な(e)xtraction、(t)ransformations、(l)oadsをプログラムし、シェルスクリプトコードをテキスト領域に入力できる軽量のWebアプリケーションを実装することです。これらのテキスト領域を実行可能なsh
ファイルに変換し、指定された順序で実行します。あなたがジェンキンスに精通しているなら、おそらく私が何を意味するか知っているでしょう。
抽出はwget
、jq, awk and sed
による変換、および負荷に対処できます。UbuntuにMongoDB cliがあることを願っています。そうでない場合は、JavaまたはNodeJSでその部分を解決できます。
1:私がシニアソフトウェアエンジニアの役割を果たす場所。しかし、このプロジェクトでは、私が建築家であることが期待されています。できると思いますが、これまでこの役を完全に演じたことはありません
2:この質問は、データベースにビジネスロジックを配置することが悪であるかどうかという永遠の議論に(どういうわけか)似ているのでしょうか。
両方の種類のツールを使用したので、これらのコマンドラインツールの利点と欠点のほとんどをすでに知っていると思います。主な利点は、ごく少数のコード行で多くの問題を解決できることです。不利な面では、
OSの依存関係も問題になる可能性があり、Linux/Unixシェルスクリプトを使用するよりも、Javaを使用する方がコードOSを独立しておく方が簡単な場合があります。ただし、Javaプログラムでも、注意しないとOSに依存するようになり、Linuxシェルスクリプトは Cygwin 。
シェルスクリプトと同じくらい簡潔で、Javaと同じくらい移植性の高いプログラムを記述できるが、前述の欠点がない代替手段はありますか?
もちろん、いくつかあります。いくつかのスクリプト言語。たとえば、古き良きPerlはもともとこれのために正確に設計されたAFAIKでした。 www.cpan.org 。 Pythonエコシステムにも同様のプロパティがありますが、コア言語はよりすっきりしています。たとえば、wget
も標準のPythonパッケージであり、awk
およびgrep
はre
モジュールの機能で置き換えることができます。 jq
by pyjq
。
node.js
について言及しましたが、PythonまたはPerlよりもはるかに新しいため、現在のところ、後者の言語のモジュールシステムほど完全なモジュールシステムではないと思いますが、私は専門家ではありませんこれについて、そしてそれがあなたのニーズに合っているなら、それは確かに賢明な選択肢です。