web-dev-qa-db-ja.com

PythonからScalaへの移行は、Pythonで既に多くの作業が行われている場合に賢明ですか?

私と私の友人はPython + Flask + PostgreSQLでWebアプリを開発しています。私たちは過去数か月間、この問題に取り組んでおり、Python + Flask + PostgreSQLに固有のスキーマ/ユースケースを数多く開発してきました。さて、突然、別のNoSQLデータベース(Neo4j)に移行する予定です。これは、Webアプリのコアが何であるかによりよく適合するためです。 Pythonは、組み込み/レストAPIバインディングを介してNeo4jをサポートしますが、控えめに言っても、メンテナンスされていないテクノロジーJPypeを使用します

したがって、Scalaを使用するというこの質問が今日生じました。 私たちのアプリケーションは次のリアルタイムアプリケーションになるため、Python-> Javaリクエストの中間ステップ(Neo4jスタンドアロンサーバー)のラグ/オーバーヘッドを許容する余裕はありません埋め込まれたNeo4jに基づいています)。ですから、私は1〜2か月を費やしてScala/Liftを学ぶことに賛成ですが、彼はPythonを使い続け、必要に応じてScalaに移植することに賛成しています。 Python +バインディングがJavaのネイティブNeo4jサポートと比較して少し遅いことがわかっている場合。

過去数か月の間に、Python + Flask + PostgreSQLですでに多くの作業を行っていました。 Scalaに移植する場合、すべてをScalaに移植する必要があります。

今移植するのは賢明でしょうか?皆さんからの個人的な体験やアドバイスはありますか?それともこれは時期尚早の最適化ですか?

追伸:私はScala/Liftの学習曲線を知っています

6
c0da

明らかに、ここでは明確な答えは得られません。それは、実際には個々のケース、特にプロジェクトに取り組んでいる人に依存するためです。あなたが何を得るつもりなのかはわかりませんが、多くの仕事を捨てなければならないようです。

最近のScalaは流行語に少し準拠していますが、関数型プログラミングに関してもPythonは前向きではありません。それでも、すべてがワークロードの詳細に依存します。

時期尚早の最適化に関するKnuthのアドバイスを思い出してください。彼はかなり明るい人です。あなたがリモートで終わりに近づいているなら、変更しないでください。 最初に「正しく実行する」よりも、動作するコードをできるだけ早く取得する方がはるかに重要です。テストするまで、何が間違っているのかわからないためです。

次に、チョークポイントが何であるかがわかったら、実際の懸念に対処する何かを設計します。

5
tylerl

Python 2.6+の機能をあまり使用しない場合の別のオプションは、 Jython を使用することです。これはScalaと同じJVMをターゲットにしているため、より厳密にできるはずです。より効率的な統合。

Eclipseアプリケーション内にJythonコンソールを提供しているので、ユーザーはJavaバックエンドの能力にフルアクセスできる独自のスクリプトを作成できます。JythonとJavaクラスは交換可能かつシームレスにクラス間を移動します。非常に柔軟な環境で作業できます。

実際の唯一の欠点は、JythonがPython 2.5で立ち往生しているため、その後の言語の革新がまだ利用できないことです。

1
Mark Booth