36

あなたの実際の経験ホワイトペーパー、または他の尊敬されている参照可能な研究に基づいて、F#は現在、企業/企業レベルのレポートのための実行可能なツールですか?

注意:この質問を「建設的ではない」として投票する前に、下部のビットをお読みください。

背景
私は現在、SAS、Cognos、SSRS、さらにはCOBOLの優れた機能など、さまざまなレポートツールを多用している大企業で働いています。各ツールには適切な場所があり、それらの多くは、ほとんどの点で、機能セットなどで同等です。ほとんどのツールは、PDF、Excel、およびデータベースに比較的簡単に出力でき、そのような場合はうまく機能します。

残念ながら、私の組織は、多くの場合と同様に、Excelスプレッドシートを使用しており、Excelスプレッドシートから情報を抽出したり、Excelスプレッドシートに情報を挿入したりするために、.NETコンソールアプリケーションの作成に多くの時間を費やしています。(私はこのアプローチの長所または短所を議論することに興味がありません。それはそれが何であるかであり、私がそれを変えることができる方法はありません。)

上記のレポートテクノロジは優れていますが、スプレッドシートからの、またはスプレッドシートへの高度なETLに関しては、フラットになります。それらはそのために設計されたものではなく、レポートをExcelスプレッドシートとしてフォーマットすることは完全に得意ですが、既存のスプレッドシートを更新したり、特定の方法でデータを抽出したりすることはあまり得意ではありません(赤で強調表示された値のみを抽出します。例えば)。したがって、このビットを実行するために、多くの.NETコンソールアプリケーションを作成することになります。(繰り返しますが、アプローチについて議論することに興味はありません。それが何であるかです。私は知っていますが、私もそれが好きではありません。)

私の意見では、.NETは素晴らしいフレームワークであり、ほとんどすべてのプログラミングタスクを処理するのに十分な柔軟性があるため、理論的には.NETですべてのレポートを処理できます。ただし、.NETですべてのレポートを処理しようとすると時間がかかりすぎます。ボイラープレートのすべてを自分で作成する必要があります。私は、すでに持っている実際のレポートツールのパワー、シンプルさ、堅牢性を活用したいと思っています。

したがって、1つのタスクに対して2つのアプリケーションを作成することになります。たとえば、複数のデータソースからデータをロードし、変換を実行して結果を永続的または一時的な場所に保存するSASジョブと、実行する2番目の.NETジョブです。結果をスプレッドシートにロードします。(知っている。)

過去数年間、F#について多くのことを見て、聞いてきたポイント
で、私は少し自分でそれに手を出しました。私は大学でOCAMLを学び、関数型プログラミングが大好きです。必要に応じて、特定のレポートのすべてのプログラミングを単一のプラットフォーム(単一の言語ではない場合)で実行したいと思います。ただし、問題は、F#言語と.NETFrameworkがエンタープライズレベルのレポートに完全に対応できるかどうかです。正確かつ効率的に実行する必要のあるレポートについて話しています。マイクロソフトは確かにそれを一生懸命売っています、しかし、他のレポート技術の経験がある人が実際に実稼働環境でそれを試したかどうかを知りたいです。他のレポートテクノロジーと比較して、企業環境に簡単に統合できますか?セキュリティにどのように対処しましたか?正しく行われ、F#にはどのようなメモリプロファイルが必要ですか(何百万ものレコードを話している)?表形式のデータを適切に処理しますか?効率的ですか?保守はどのくらい簡単ですか(特にコードが大きくなった場合)?何かを機能させるには、どのような種類のサードパーティのアドオンやプラグインなどが必要ですか(または、ほとんどすべてをすぐに実行できますか)?他のレポートシステム(同様の結果の場合)と比較して、どのくらいの作業(プログラミング時間など)が必要ですか?

F#の経験がない場合、またはF#を排他的に使用している場合、私はあなたの意見に特に興味はありません-実際にギャップを埋め、経験から、機会とビッグデータ(数百万のレコード、さまざまな形式で出力)のレポートエンジンとしてF#を使用する際の落とし穴。

私はすでにこの分野のいくつかをカバーしているいくつかの質問を見てきました:

しかし、彼らは数歳です。いくつかのバージョンの後、F#はタスクに対応していますか?それとも私は犬が間違った木を吠えていますか?

編集

わかりやすくするために、私はF#の新しい情報豊富なプログラミングに特に興味があります。F#3.0より前は、これは単に興味深いテクノロジでしたが、最近追加されたデータベースタイププロバイダーとそのクエリ式を使用する機能により、他のレポート作成テクノロジの実行可能な代替手段のように見えます。マイクロソフトは確かにそれを示唆しています

受け入れ可能な回答には、F#に組み込まれたエンタープライズレベルのレポートエンジンの実装に関する直接の説明(または文書化されたケーススタディへの参照)と、パフォーマンスの向上または低下などの別のレポートテクノロジとの比較が含まれます。あまりにも詳細である必要があります-平均的な(有能な)マネージャーに、F#がバルク/バッチデータ処理に適切/不適切なテクノロジーであると納得させるのに十分です。できましたか?誰がやったの?結果はどうでしたか?実装は(同様のテクノロジーと比較して)どのくらい複雑でしたか?それはうまく機能しますか?


なぜ私は主観的な質問をしているのですか?
ほとんどの優れたstackoverflowメンバーのように、私は頻繁に主観的な質問を閉じるために投票します。FAQによると、主観的な質問は避けるべきですが、完全に禁止されているわけではありません。FAQは、私が従おうとした素晴らしい主観的な質問のための6つのガイドラインにリンクしています。この質問を閉じるために投票する前に、これらのガイドラインをお読みください。

4

6 に答える 6

28

他のレポート テクノロジと比較して、企業環境に簡単に統合できますか?

F# が他のレポート テクノロジとどのように比較されるかはわかりませんが、複数の企業環境に導入しましたが、基本的に C# と同じです。つまり、簡単で堅牢です。

どのようにセキュリティに対処しましたか?

C# と同じです。

F# にはどのような種類のメモリ プロファイルが必要ですか (何百万ものレコードについて話しているのです)。

5 年間の使用で .NET に GC バグが 1 つ見つかりましたが、これは F# に固有のものではありませんでした。ラージ オブジェクトに関していくつか問題がありました (これも F# 固有ではありません) が、一般的に、GC は堅牢で効率的であり、積極的に収集します。

何十億ものレコードを処理した結果、F# は非常に高速で信頼性が高いことがわかりました。F# は、Microsoft の Bing AdCenter (広告配置用) と Microsoft の Halo 3 で使用されていることに注意してください。どちらもテラバイトのデータセットを処理する必要があります。

表形式のデータを適切に処理しますか?

はい、簡単に並列化できますが (Array.Parallelモジュールを参照)、他のツールと比べてその主な強みは、ツリーやグラフなどの構造化データを操作することです。

効率的ですか?

はい。

世界最大の保険会社の 1 つである現在のクライアントは、C++ から F# に切り替えることでパフォーマンスが 10 倍向上しました (コード サイズも 10 倍削減されました)。

以前のクライアントでは、コンパイラを OCaml から F# に移行することでパフォーマンスが向上しました。OCaml はコンパイラを書くために特別に設計されており、非常に高速であるため、これは印象的です。

以前のクライアントが取引プラットフォームを書き直すように依頼したところ、非 GC C++ から GC 化された F# に移行したにもかかわらず、スループットとレイテンシが 100 倍改善されました。

保守はどのくらい簡単ですか (特にコードが大きくなった場合)?

メンテナンスが簡単。ML では、関数の追加は非常に簡単であり、静的型システム catches は、共用体型を拡張するときに多くのフィードバックを提供します。

私たちの現在のクライアントは、昨年 4 月に最初の F# コードを公開しました。そのメンテナーは、F# (または OCaml) のトレーニングをまったく受けていなかったにもかかわらず、何の問題もありませんでした。

何かを機能させるには、どのような種類のサードパーティのアドオン、プラグインなどが必要ですか?

使用したことはありません(ただし、2つ販売しています!)。私が検討した唯一のサードパーティのものは、F# 固有ではない WPF コントロールです。

他のレポートシステムと比較して(同様の結果を得るために)どのくらいの作業(プログラミング時間など)が必要ですか?

わかりません、ごめんなさい。Dialogue と HP Extreme の準備が整っているようですので、すぐにわかります...

実装はどのくらい複雑でしたか (同様のテクノロジと比較して)?

F# コードは、C++、C#、Java などの古い主流言語よりもはるかに単純です。

古いコードを F# で書き直すのではなく、複雑すぎて従来のツールでは解決できない問題を解決するために F# を使用すると、F# が実際に利益をもたらすことを強調したいと思います。

たとえば、現在のクライアントは、購入に約 1,000,000 ポンドかかるビジネス ルール エンジンを使用していますが、ビジネス上の問題 (大きなテーブルとの闘い、数学との闘い) を解決していないため、特注ビジネスのデモを書きました。約 1,000 行の F# コードで 1 週間でルール エンジンを作成できます。他のツールでは実現できませんでした。

于 2013-02-01T00:40:30.593 に答える
26

あなたの質問に答えるために - あなたは正しい道を進んでいます。これは、多数のレポート システムとビッグ データ システムを構築してきた人物として言えます。eBay で使用されている Big Data Analytics プラットフォームの 1 つを Scala と R で構築しました。最近では、MSRC 用の Hadoop / Hive F# Type Provider を構築しました。この目的で F# .net スタックに匹敵するものはないと言えます。優れたパフォーマンス、使いやすいネイティブ相互運用性、多数のライブラリ、REPL、タイプ プロバイダー、グラフ作成用の WPF。MSRC 以来、私は完全な機能を備えた F# IDE を構築してきました。この IDE は Excel に埋め込むことができ、Type Provider を使用して、Intelisense を備えたワークブックを操作できます。見たい方はメールください。

編集;

もちろん; インメモリ データとゼロからのクエリ エンジンを使用して、顧客の Infobright データベースの 1 つを F# に置き換えました。数十 GB のデータに対するクエリ時間が 30 分から数百ミリ秒に短縮されました。全体を構築するのに 6 時間かかり、わずか数百行のコードでした。データベースは、Web ベースのレポート サービスのバックエンドであり、アップグレード後に応答性が大幅に向上しました。

eBay にいる間、R でビッグ データ (バルク/バッチ) の後処理を行っていました。基本的なフラット ファイルは数十 GB だったので、Excel には大きすぎました。R は集約パス中に大量の不要なメモリ割り当てを行いました。10GB は 40GB になり、ページファイルにヒットし始めるとクロールして停止します。データによっては、数分、数時間かかるか、または終了しない場合があります。これを修正する有料の R ライブラリがありますが、他の方法で制限があります。F# で集計を行うと、一定のスペースで数百ミリ秒に短縮されました。これらの集約は数十行のコードで、R とほぼ同じですが、はるかに理解しやすく、型チェックが行われました。タイプミスが原因で 1 時間の処理後に R ジョブが失敗するのは腹立たしいことです。

以前は OLAP キューブ (Microsoft Analysis Services など) を使用していましたが、これらのシステムは、ビッグ データ クラスターとビッグ メモリ マシンによって完全に影を潜めています。F# と .net 4.5 の新しいガベージ コレクターを使用して、独自のビッグ メモリ マシンを簡単に構築できるようになりました。

それが役立つことを願っています。

于 2013-01-31T21:30:47.190 に答える
3

「Excelの自動化が優れたエンタープライズグレードのレポートシステム」を作成したい場合は、適切なツリーを吠えていると思いますが(つまり、実行可能です)、ツリーにはクマ(リスではありません)がいます。言い換えれば、それはめったに価値がないでしょう。さて、多分あなたの状況は例外です。特別なニーズには、特別な措置が必要です。しかし、すべてをゼロから構築するのではなく、レポートシステムでは実行できないこの部分を抽象化し、相互運用性の向上に焦点を当てる方法があるのではないかと思います。正しいアプローチは、あなたが最もよく知っている詳細に大きく依存すると思います。ここで列挙するには多すぎると思います。

于 2013-01-31T19:26:39.453 に答える
1

以前、F# をテストして、890,000 レコード (500MB) を含むタブ区切りのテキスト ファイルを約 20 秒で集計しました。Win8 と .Net 4.5 を搭載した新しいハードウェアでは、さらに高速になるはずです。適度に速いと思います。

レポートの要件が何であるかはわかりませんが、SQL Server Analysis Services (SSAS) と Reporting Services を確認してください。

SSAS には、メモリ内の「表形式」エンジンが付属しています。私は最近、10億行でそれをテストしました。10 億を超える行を集計する Excel ピボット テーブル クエリは、約 2 秒で発生しました。

于 2013-02-01T01:17:56.993 に答える
-1

トピックから外れていますが、 XLReportやその従兄弟であるDBxtraなどの他のツールを使用してExcelワークフローを少し自動化することもできます。どちらも、Excelファイルから読み取り、それらに基づいてクエリを実行し、手動で、またはDBxtraの場合は結果をエクスポートできます。自動的に、両方の良い面は、Excelファイルの構造が変更されない場合、クエリを1回だけ設計する必要があることです。

于 2013-02-01T16:20:10.327 に答える