問題タブ [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.
mysql - MySQL:定期的に大量の挿入/更新を処理する方法は?
サイトの使用状況に関するさまざまな統計を追跡するテーブルがあります。週に1回、これらの統計と他のテーブルの情報を使用して、複数のレポートで使用するさまざまな主要な指標を計算する予定です。これは、レポートにアクセスするたびに複雑なデータを計算しないようにするためです。これらのインジケーターは、「インジケーター」と呼ばれる別のテーブルに保存されます。
約あります。220か国の50の指標(つまり、各国ごとに50の指標のセット)。これらの数値が毎週計算されることを考えると、私は次の驚くべき数を取得します。
50 x 220=11,000回の挿入/更新
私のインジケーターテーブルは次のように構成されています。
...基本的に国ごとに異なる「タイプ」の50行を挿入/更新します。
私が聞きたいのは、私はここで完全に間違った方向に進んでいるのかということです。国を行(220列...)ではなく列として設定したほうがよいでしょうか?または、おそらく指標といくつかの柔軟性を失いますか?このような大量の挿入/更新は、一般的にどのように処理されますか?
よろしくお願いします。
結論:すべての貢献に感謝します。
java - 大きなデータ構造を使用する場合、Java(eclipse)で「メモリ不足エラー」を回避しますか?
OK、残念ながら作業を完了するために巨大なデータ構造を使用する必要があるプログラムを書いていますが、初期化中に「メモリ不足エラー」で失敗しています。それが何を意味し、なぜそれが問題なのかは完全に理解していますが、プログラムでこの大きな構造を使用する必要があり、それを保存する他の方法がわからないため、それを克服するのに苦労しています。
このプログラムはまず、私が提供する大量のテキスト ファイルのコーパスにインデックスを付けます。これはうまくいきます。
次に、このインデックスを使用して、大きな 2D 配列を初期化します。この配列には n² のエントリが含まれます。ここで、"n" はテキスト コーパス内の一意の単語の数です。私がテストしている比較的小さなチャンク (約 60 ファイル) では、約 30,000x30,000 のエントリを作成する必要があります。意図した完全なコーパスでも実行すると、これはおそらく大きくなります。
インデックス作成後、データ構造を初期化している間(後で作業します)、毎回一貫して失敗します。
私が行ったことは次のとおりです。
int[]
の代わりにプリミティブを使用するようにコードを修正します。TreeMap
- 冗長な構造などを排除する...
- また、
-Xmx2g
割り当てられたメモリを最大化するためにプログラムを実行しました
これは単純なコード行のソリューションではなく、非常に新しいアプローチが必要になる可能性が高いと確信しています。私はそのアプローチが何であるかを探しています、何かアイデアはありますか?
ありがとう、B.
sql - RDBMSの実用的なサイズ制限
私は非常に大きなデータセットと関連する参照データを保存する必要があるプロジェクトに取り組んでいます。これほど大きなテーブルを必要とするプロジェクトに出くわしたことはありません。少なくとも1つの開発環境では、データベース層で、アプリケーション層が生成するビューに対する複雑なクエリ(複数の内部結合と外部結合を持つビュー、グループ化、合計、および9000万行のテーブルに対する平均化)に必要な処理に対応できないことを証明しました。 )。
私がテストしたRDBMSは、AIX上のDB2です。失敗した開発環境には、本番環境で処理されるボリュームの1/20がロードされました。本番ハードウェアは開発ハードウェアやステージングハードウェアよりも優れていると確信していますが、膨大な量のデータと複雑なクエリに対応できるとは思いません。
開発環境が失敗する前は、大きなテーブルに対する複雑なクエリ(多くの結合、多くのグループ化、合計、平均化)によって生成された小さなデータセット(数百行)を返すのに5分以上かかりました。
私の直感では、ビューによって現在提供されている集計がオフピークバッチプロセスの一部として実行されるように、dbアーキテクチャを変更する必要があります。
さて、私の質問です。私は、この種のことを経験したと主張する人々(私はそうではありません)によって、私の恐れは根拠がないことを確信しています。彼らは?最新のRDBMS(SQL Server 2008、Oracle、DB2)は、私が説明したボリュームと複雑さに対処できますか(適切な量のハードウェアがあれば)、それともGoogleのBigTableのようなテクノロジーの領域にいますか?
この種のボリュームを非理論的なレベルで実際に処理しなければならなかった人々からの回答を期待しています。
データの性質は金融取引(日付、金額、地理的な場所、ビジネス)であるため、ほとんどすべてのデータタイプが表されます。すべての参照データが正規化されているため、複数の結合が行われます。
perl - クローニングと大規模構造の処理に関する問題
私の Perl スクリプトには、理解できない奇妙な動作があります。処理中に成長するハッシュの配列として格納された大きな構造を処理しています。問題は、構造を hdd に保存すると最大 8 MB になることですが、処理中には約 130 MB の RAM が必要になります。なぜそんなに大きな違いがあるのですか?
処理の主な流れは次のようになります。
php - 大規模なメンテナンスphpスクリプト。スクリプトの実行中にデバッグ文字列を出力するにはどうすればよいですか?
私は非常に大きなphpメンテナンススクリプトを持っています(基本的には内部アーカイブのサムネイルを再作成します)、完了するのに10〜20分かかり、phpはスクリプト全体の解析が終了したときにのみ「echos」を表示することに気付きました。次のようなメッセージを表示する方法はありますか?
スクリプトがまだ彼のことをしている間?
どうもありがとうございます
sql - データベースから100万レコードを高速にロードする方法は?
これで、すべてがRAMメモリにロードされた後に処理する必要がある1.000.000のfirebirdデータベースができました。これらすべてを取得するには、(*最初の1000 ...を選択)を使用して8時間データを抽出する必要があります。これに対する解決策は何ですか?
python - 大規模なデータセットを使用したPythonマルチプロセッシングのチャンクサイズを選択する方法
http://docs.python.org/library/multiprocessingを使用して高度に並列化できるタスクでパフォーマンスを向上させるために、Pythonを使用しようとしています。
彼らのライブラリを見るとき、彼らは非常に長い反復可能物にチャンクサイズを使用すると言います。さて、私の反復可能ファイルは長くはありません。それに含まれるdictの1つは巨大です:キーとしてタプルと値のnumpy配列を持つ〜100000エントリ。
これを処理するためにチャンクサイズを設定するにはどうすればよいですか?また、このデータをすばやく転送するにはどうすればよいですか?
ありがとうございました。
java - 非常に多数のレコードを SQL のテーブルに挿入する最速の方法
問題は、Java アプリケーションから 1 つのテーブルに膨大な数 (100 万以上) のレコードを挿入する必要があることです。レコードは Java コードによって作成され、別のテーブルからの移動ではないため、INSERT/SELECT は役に立ちません。
現在、私のボトルネックは INSERT ステートメントです。プロセスを高速化するために PreparedStatement を使用していますが、通常のサーバーでは 1 秒あたり 50 件を超えるレコードを取得できません。テーブルはまったく複雑ではなく、インデックスも定義されていません。
プロセスに時間がかかりすぎて、時間がかかると問題が発生します。
可能な最大速度 (INSERT/秒) を得るにはどうすればよいですか?
データベース: MS SQL 2008。アプリケーション: Java ベース、Microsoft JDBC ドライバーを使用。
sql - 数百万行のテーブルで集計関数を実行する
数百万行のテーブルでいくつかの深刻なパフォーマンスの問題が発生しており、かなり迅速に結果を得ることができるはずだと感じています。これが私が持っているもの、私がそれをどのようにクエリしているのか、そしてそれがどれくらいの時間がかかっているのかを要約したものです:
SQL Server 2008 Standardを実行しているため、現在、パーティショニングはオプションではありません
過去30日間の特定のアカウントのすべての広告枠のすべてのビューを集計しようとしています。
すべてのビューは次のテーブルに保存されます。
このテーブルには132,000,000レコードがあり、4ギガを超えています。
テーブルからの10行のサンプル:
- LogInvSearches_Dailyに次のインデックスがあります。
- 特定のアカウントIDのインベントリからのみインベントリをプルする必要があります。インベントリにもインデックスがあります。
次のクエリを使用してデータを集計し、上位5つのレコードを取得しています。このクエリは現在、5行を返すのに24秒かかります。
CTEを使用して最初に行を取得して集計しようとしましたが、それ以上速く実行されず、基本的に同じ実行プランが得られました。
実行プランで優れたインデックスシークを取得しているとすると、これをより高速に実行するにはどうすればよいですか?
アップデート:
これは、DENSE_RANK()なしで実行された同じクエリであり、実行にはまったく同じ24秒かかり、同じ基本クエリプランが得られます。
ありがとう、
ダン
java - Hibernate の ScrollableResults を使用して 9,000 万件のレコードをゆっくりと読み取る
Hibernate を使用して MySQL データベースのテーブルの各行を読み取り、それに基づいてファイルを書き込むだけです。しかし、9,000 万行あり、かなり大きいです。したがって、次のものが適切であると思われました。
問題は、上記が while ループに移る前に 9000 万行すべてを RAM にロードしようとすることです...そして、 OutOfMemoryError: Java heap space exceptions :(.
ScrollableResults は私が探していたものではないと思いますか? これを処理する適切な方法は何ですか?この while ループに何日もかかったとしても、私は気にしません (そうならないようにしたいのですが)。
これを処理する他の唯一の方法は、setFirstResult と setMaxResults を使用して結果を反復処理し、ScrollableResults の代わりに通常の Hibernate の結果を使用することだと思います。それは効率が悪いように感じますが、8900万行で setFirstResult を呼び出すと、途方もなく長い時間がかかり始めます...
更新: setFirstResult/setMaxResults は機能しません。私が恐れていたように、オフセットに到達するのに非常に長い時間がかかることが判明しました。ここに解決策があるはずです!これはかなり標準的な手順ではありませんか?? 私は、Hibernate をやめて、JDBC など必要なものは何でも使用したいと思っています。
更新 2: 私が思いついた解決策は、基本的には次の形式です。
私は他の条件を持っているので、すべてがインデックスにあるとしても、まだ私が望むほど速くはありません...他の提案のためにまだ開いています..