問題タブ [large-data-volumes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hadoop - 大量のデータを使い始める
私は数学者であり、時々統計/機械学習分析のコンサルティングプロジェクトを行っています。私がアクセスできるデータは通常、最大で数百メガバイト(ほとんどの場合ははるかに少ない)の小さい側にありますが、ギガバイト/テラバイトスケールでのデータの処理と分析について詳しく知りたいと思います。私は何を知る必要があり、そこから学ぶためのいくつかの良いリソースは何ですか?
- Hadoop/MapReduceは明らかなスタートの1つです。
- 私が習得すべき特定のプログラミング言語はありますか?(私は現在、主にPython、Ruby、R、そして時にはJavaで作業していますが、CとClojureは大規模なデータ分析によく使用されているようです?)
- ビッグデータに関連していることを除けば、私はNoSQLの動き全体に精通していません。それについて学ぶのに適した場所はどこですか?また、私が精通している必要がある特定の実装(Cassandra、CouchDBなど)はありますか?
- 大量のデータに機械学習アルゴリズムを適用する方法については、どこで学ぶことができますか?私の数学のバックグラウンドは主に理論の側面にあり、数値や近似の側面ではありません。標準のMLアルゴリズムのほとんどは実際にはスケーリングしないと思います。
- 学ぶべきことに関する他の提案は素晴らしいでしょう!
python - 多くのテキスト ファイルの大量のデータ - 処理方法は?
大量のデータ (数テラバイト) があり、蓄積しています... それらは多くのタブ区切りのフラット テキスト ファイル (それぞれ約 30MB) に含まれています。ほとんどのタスクには、データを読み取り、一連の述語ステートメントに基づいて観測/行を集計 (合計/平均 + 追加の変換) し、出力をテキスト、HDF5、または SQLite ファイルなどとして保存することが含まれます。通常は R を使用します。そのようなタスクの場合、これは少し大きいのではないかと心配しています。解決策の候補のいくつかは、
- すべてを C (または Fortran) で書く
- ファイル (テーブル) をリレーショナル データベースに直接インポートしてから、R または Python でチャンクを取得します (一部の変換は、純粋な SQL ソリューションには適していません)。
- 全体をPythonで書く
(3)はまずいのでしょうか?Python で C ルーチンをラップできることは知っていますが、この場合、計算上禁止されているもの (たとえば、多くの反復計算を必要とする最適化ルーチン) がないため、I/O が計算自体と同じくらいボトルネックになる可能性があると思います。さらなる考慮事項や提案について何か推奨事項はありますか? ありがとう
編集回答ありがとうございます。Hadoop については意見が対立しているようですが、いずれにせよ、クラスターにアクセスすることはできません (ネットワーク化されていない複数のマシンを使用することはできますが)。
python - 入力がギガ/テラバイトサイズの場合、何が変わりますか?
最小のファイルが48000フィールド×1600行(22番染色体の数人のハプロタイプ)であるデータセットが表示されたとき、私は今日、実際の科学コンピューティングに最初の一歩を踏み出しました。そして、これは小さいと考えられています。
私はPythonを書いているので、ここ数時間HDF5、Numpy、PyTableについて読んでいますが、それでも、テラバイトサイズのデータセットがプログラマーとして実際に何を意味するのかを理解しているわけではないようです。
たとえば、データセットが大きくなると、マシンのRAMが不十分なためではなく、アーキテクチャのアドレススペースが不十分なために、すべてをメモリに読み込むことができなくなるとの指摘がありました。それは私の心を吹き飛ばしました。
これほど大きな入力では機能しない、教室で私が信頼している他の仮定は何ですか?何か違うことをしたり考えたりするために、どのようなことをする必要がありますか?(これはPython固有である必要はありません。)
wcf - メッセージ セキュリティを備えた WCF で wsHttp を使用してデータ (シリアル化されたオブジェクト) の大きなペイロードを転送する
wsHttpを使用して WCF を使用して( NetDataContractSerializer経由で) 大量のシリアル化されたオブジェクト グラフを転送する必要がある場合があります。メッセージ セキュリティを使用しており、引き続き使用したいと考えています。このセットアップを使用して、シリアライズされたオブジェクト グラフを転送したいと思います。転送しようとすると、System.InsufficientMemoryException 型の例外が表示されるようになりました。
少し調査した結果、WCF では、デフォルトで、サービス呼び出しの結果が、シリアル化されたデータを含む単一のメッセージ内に含まれており、このデータは、メッセージ全体が完全に書き込まれるまでデフォルトでサーバーにバッファリングされるようです。したがって、メモリ例外は、サーバーがバッファがいっぱいであるために割り当てることができるメモリ リソースを使い果たしているという事実によって引き起こされています。私が遭遇した 2 つの主な推奨事項は、ストリーミングまたはチャンクを使用してこの問題を解決することですが、それが何を伴うのか、また現在のセットアップ (wsHttp/NetDataContractSerializer/Message Security) でどちらの解決策も可能かどうかは明確ではありません。これまでのところ、メッセージの暗号化と復号化は部分的なメッセージではなく、データのセット全体に対して機能する必要があるため、ストリーミング メッセージ セキュリティを使用しても機能しないことを理解しています。チャンクは可能かもしれませんが、私がリストした他の制約でどのように行われるかは明確ではありません。利用可能なソリューションとその実装方法について誰かがガイダンスを提供できれば、非常に感謝しています。
私の場合、通信の両側を所有および制御し、どちらの側にも転送されるデータに共有インターフェイス パターンを使用するため、他のクライアントとの相互運用性については特に心配していません。したがって、私は、wsHttp をメッセージ セキュリティと共に使用して、NetDataContractSerializer を使用してシリアル化されたオブジェクト グラフを転送するという制約の範囲内に収まるアイデアを受け入れており、既存のサービスと周囲のインフラストラクチャを大幅に変更する必要がないソリューションを好みます。
関連リソース:
- チャンキングチャンネル
- 方法: ストリーミングを有効にする
- WCF 経由の大きな添付ファイル
- カスタム メッセージ エンコーダー
- InsufficientMemoryException の別の発見
- 非二重チャンキング チャネルが必要
- WCF と遅延実行による大きなコンテンツのストリーミング
このデータに対して実行できるあらゆるタイプの圧縮にも興味がありますが、クライアントが gzip を自動的にサポートするように、.NET 4.0 に移行できるようになったら、トランスポート レベルでこれを行うのがおそらく最善のようです。これを正しく理解していればヘッダー。
更新 (2010-06-29):
バッファリングされたメッセージが大きすぎることが問題の原因であるという結論に達した方法に関するいくつかの歴史。もともと、テスト中に以下のCommunicationExceptionを見ました。
基になる接続が閉じられました: 接続が予期せず閉じられました。
最終的に、これを実行してさらにログを記録した後、指定されたメッセージで問題を引き起こしている基になるInsufficientMemoryException例外を見つけました。
268435456 バイトのマネージ メモリ バッファの割り当てに失敗しました。使用可能なメモリ量が少ない可能性があります。
これは、次の方法に由来します。
System.ServiceModel.Diagnostics.Utility.AllocateByteArray(Int32 サイズ)
つまり、失敗は配列の割り当てに起因します。シリアル化された同じデータをディスクに書き込むと、約 146MB を占めます。それを半分に減らすと、エラーが発生しなくなりますが、バッファを壊す特定のしきい値と、それがシステムに固有なのか、それともいいえ。
更新 (2010 年 12 月 6 日):
この時点で、次の説明を求めていると思います。私の理解では、デフォルトではメッセージセキュリティを備えたWCF wsHttpでは、応答がクライアントに送り返される前にメッセージ全体(通常は返されるデータセット全体)をサーバーにバッファリングする必要があり、問題が発生します。
可能な解決策:
- データ サイズの制約 - 送信バッファの最大容量を消費しないようにするために、なんらかの形式の圧縮、エンコード、またはメソッドのようなページングを使用して返される実際のデータの制限を使用します。
- ストリーミング - WCF を介してストリーミング方式で大量のデータを送信できますが、これらの手法ではすべてのデータをバッファリングする必要があるため、これは wsHttp または MessageSecurity と互換性がありません。
- Chunking Channel - データを個別のメッセージに分割できるようにしますが、現時点では、これがサービス コントラクトの設計に及ぼす制約と、メッセージ バインディングで wsHttp を引き続き使用できるかどうかはわかりません。
返すことができるデータを制限することは、ある程度までしか機能せず、ストリーミング オプションと同様に、これらのオプションでは、WCF サービス呼び出しの外部で多くの下位レベルの作業をコーディングする必要があります。したがって、私が知る必要があるのは、単一のデータ セットをサーバー上で個別のメッセージに分割し、クライアント上でつなぎ合わせることができるようにすることで、大きなメッセージの問題を回避できる可能性のあるチャンキング チャネルの実装があるかどうかということです。これにより、既存のサービス コントラクトのインターフェイス/形状を変更する必要がなくなり、メッセージ セキュリティと wsHttp を使用しながら、各サービス実装のクライアントとサーバーの部分からプロセスがほとんど隠されます。チャンキング チャネルで、ストリームを公開するためにサービス コントラクトを書き直す必要がある場合は、必要ありません。これがストリーミング ソリューションと実際にどのように異なっているかがわかります。誰かが私のためにこれらの質問に簡単に答えることができれば、賞金を授与し、それを答えとしてマークします.
sql - Oracle 10G から SQL Server 2005 に大量のデータをエクスポートする
Oracle 10G データベース テーブルから定期的に 1 億のデータ行 (平均行長 ~ 100 バイト) を SQL サーバー (6M ビット/秒の容量を持つ WAN/VLAN 経由) にエクスポートする必要があります。これまでのところ、これらは私が試したオプションと簡単な要約です. 誰もこれを試したことがありますか?他のより良いオプションはありますか?パフォーマンスと信頼性の観点から、どのオプションが最適でしょうか? 所要時間は、少量のデータでのテストを使用して計算され、それを外挿して必要な時間を見積もっています。
- SQL サーバーまたは SSIS パッケージのデータ インポート ウィザードを使用してデータをインポートします。このタスクを完了するには、約 150 時間かかります。
- Oracle バッチ ジョブを使用して、データをコンマ区切りのフラット ファイルにスプールします。次に、SSIS パッケージを使用してこのファイルを SQL サーバーに FTP 送信し、フラット ファイルから直接ロードします。ここでの問題は、GB 単位で実行されると予想されるフラット ファイルのサイズです。
- このオプションは大幅に異なりますが、Linked Server を使用して実行時に Oracle データを直接クエリし、データの取り込みを回避するオプションも検討しています。パフォーマンスは大きな問題であり、テーブル インデックスの作成に関しては、Oracle データベースの制御が制限されています。
よろしく、
ユニボール
.net - ASMX Web サービスを介して大規模なデータセットを転送する最良の方法は何ですか?
Web サービスと通信する C# .NET アプリケーションを継承しました。Web サービスは Oracle データベースと通信します。UI にエクスポート機能を追加して、一部のデータの Excel スプレッドシートを作成する必要があります。
データベース クエリを実行し、データを DataTable にロードしてから返す Web サービス関数を作成しました。これは、少数の行に対して正常に機能します。ただし、完全な実行には十分なデータがあるため、クライアント アプリケーションは数分間ロックし、タイムアウト エラーを返します。明らかに、これはそのような大規模なデータセットを取得する最良の方法ではありません。
通話を分割する危険な方法を考え出す前に、これを処理できる何かがすでに用意されているかどうか疑問に思っています。現時点では、startExport 関数を考えてから、データがなくなるまで next50Rows 関数を繰り返し呼び出しますが、Web サービスはステートレスであるため、何らかの ID 番号を保持して処理する必要があります。関連する権限。これは、データ セット全体を Web サーバーのメモリにロードする必要がないことを意味しますが、これは良いことの 1 つです。
したがって、ASMX Web サービスを介して大量のデータ (テーブル形式) を取得するより良い方法を誰かが知っている場合は、お知らせください。
c - パーセンタイルの計算に助けが必要
1 日に何百万ものリクエストを受信する rpc サーバーが提供されます。各リクエスト i が処理されるまでに処理時間 Ti がかかります。任意の時点での 65 パーセンタイルの処理時間 (処理時間が値の昇順で並べ替えられている場合) を見つけたいと考えています。リクエスト数が非常に多いため、過去のすべてのリクエストの処理時間を保存することはできません。そのため、答えは正確な 65 パーセンタイルである必要はありません。正確な 65 パーセンタイル数に近い処理時間など、おおよその答えを出すことができます。
ヒント: すべてのデータを保存するのではなく、非常に大きなデータのヒストグラム (つまり、概要) を保存する方法です。
parsing - 大規模なスクレイピング/解析のためのテクノロジーは?
大規模な Web スクレイピング/解析プロジェクトを設計しています。基本的に、スクリプトは Web ページのリストを調べ、特定のタグのコンテンツを抽出し、データベースに保存する必要があります。大規模 (数千万ページ) でこれを行う場合、どの言語をお勧めしますか? .
データベースには MongoDB を使用しているため、しっかりした MongoDB ドライバーがあればプラスになります。
これまでのところ、PHP、curl、 Simple HTML DOM Parserを使用してきましたが (笑わないでください) 、特に PHP には適切なマルチスレッド機能がないため、何百万ページにも拡張できるとは思いません。
簡単に開発でき、Linux サーバーで実行でき、そのタグを簡単に抽出できる強力な HTML/DOM パーサーを備え、妥当な時間内に何百万もの Web ページを簡単にダウンロードできるものが必要です。リンクをたどってすべてのコンテンツをインデックス化する必要はなく、リストの各ページから 1 つのタグを抽出するだけでよいため、実際には Web クローラーを探しているわけではありません。
google-app-engine - Google App Engine で大きなサイトマップを作成しますか?
私は約 100,000 のユニークなページを持つサイトを持っています。
(1) これらすべてのリンクのサイトマップを作成するにはどうすればよいですか? それらを大きなサイトマッププロトコル互換ファイルにフラットにリストするだけですか?
(2) 1000 項目のクエリ制限がある Google App Engine でこれを実装する必要があり、個々のサイト URL はすべて個別のエントリとして保存されます。この問題を解決するにはどうすればよいですか?
sql-server-2005 - T-SQL2005で数百の1,000,000行を処理する
新しい形式のスキーマにインポートする必要がある単純なデータを含むデータベースがいくつかあります。私は柔軟なスキーマを考え出しましたが、それは1つのテーブルに格納される古いDBの重要なデータに依存しています。このテーブルには、主キー、外部キー(両方ともint)、日時、および10進フィールドしかありませんが、2つの古いDBの行数を加算すると、この新しいテーブルの合計行数は約200,000,000行になります。
この量のデータを処理するにはどうすればよいですか?これは約10年前のデータであり、利用可能である必要があります。幸い、将来クエリを実行するときに1%も引き出す必要はありませんが、すべてにアクセスできる必要があります。
年ごとに複数のテーブル、(ソースデータの)サプライヤなど、または毎年1つのデータベースを持ち、最新の2年間を1つのDB(管理用のストアドプロシージャも含む)に基づいたアイデアがあります。このすべて。)
ありとあらゆるヘルプ、アイデア、提案、非常に、深く、非常に感謝しています、
マット。