問題タブ [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.

0 投票する
2 に答える
1240 参照

java - Javaで同等のSTXXL

STXXLがC++で行うように、透過的に動作するJavaの巨大なデータセット用に設計されたコレクションフレームワークを探しています。

透過的にディスクにスワップする必要がありますが、プレーンなOSベースのVMスワッピングよりもはるかに効率的な方法です。StringBuffer/Stringドロップインの置き換えは大きなプラスになります。

0 投票する
7 に答える
195 参照

java - 標準の実装でアクセスできるよりも多くのエントリを持つ配列またはリストの作成をどのように処理しますか

100 ^ 100ものBigIntegerエントリなど、適切なハードウェアがあれば、理論的に処理できる配列またはリストを作成しようとしています。配列または標準リストを使用する場合の問題は、Integer.MAX_VALUEの数のエントリしか保持できないことです。この制限をどのように回避しますか?まったく新しいクラス/インターフェース?リストのラッパー?完全に別のデータ型?

0 投票する
6 に答える
36429 参照

java - 巨大なテーブルからすべてのレコードを取得するときにOOM(メモリ不足)エラーを回避するにはどうすればよいですか?

巨大なテーブルをカスタムXMLファイルに変換するタスクが与えられました。この仕事にはJavaを使用します。

単に「SELECT*FROM customer」を発行すると、大量のデータが返され、最終的にOOMが発生する可能性があります。レコードが利用可能になったらすぐに処理し、その後SQL取得プロセス中にメモリからレコードを削除する方法はありますか?

---2009年7月13日に編集

私の質問を詳しく説明させてください。1つのdbサーバーと1つのアプリケーションサーバーがあります。アプリケーションでselectクエリを発行すると、データはデータベースサーバーからアプリサーバーに移動します。

ResultSetは、クエリ内のすべてのレコードを受信するまで待機する必要があると思います(間違っている場合は修正してください)。フェッチサイズを4に設定しても、1000レコードのテーブルの場合、アプリサーバーのヒープメモリに1000レコードが残ってしまいますが、正しいですか?フェッチサイズは、dbサーバーとの間のラウンドトリップの数にのみ影響します。

私の質問は、アプリサーバーに到着した直後にその4つ(または任意の数)のレコードの処理を開始し、アプリサーバーのメモリを解放するためにそれを破棄する方法です。

0 投票する
3 に答える
125 参照

language-agnostic - 展開順序付けされたファイルをディスクに書き込むための戦略

私は現在、データ解析プログラムに取り組んでいる核物理学の大学院生です。データは数十億の多次元ポイントで構成されています。

とにかく、空間充填曲線を使用して複数の次元を単一の次元にマップし、B + ツリーを使用してデータのページにインデックスを付けています。各ページには、一定の最大ポイント数があります。

元のファイルから生データ (数百ギガ) を読み取り、前処理してインデックスを作成するときに、個々のポイントをページに挿入する必要があります。明らかに、単純にメモリに保存してからディスクにダンプするにはページが多すぎます。だから私の質問はこれです:ページが最大サイズに達して分割する必要があるときにデータの再シャッフルが最小限になるように、ページをディスクに書き込むための良い戦略は何ですか.

コメントに基づいて、これを少し減らします。

順序付けされたレコードを含むファイルがあります。これらのレコードはファイルに挿入されていますが、これらのレコードが多すぎて、単純にメモリ内でこれを行ってからファイルに書き込むことができません。レコードを挿入するときに必要な再シャッフルの量を最小限に抑えるには、どの戦略を使用する必要がありますか?

これが何らかの意味を成している場合は、これに対する解決策をいただければ幸いです。

編集:
データは多次元空間の点です。基本的に整数のリスト。これらの整数はそれぞれ 2 バイトですが、各整数にはさらに 2 バイトのメタデータが関連付けられています。したがって、座標ごとに 4 バイトで、座標は 3 から 20 の間です。したがって、基本的にデータは、各チャンクが 12 ~ 100 バイトの数十億のチャンクで構成されます。(明らかに、4 次元のポイントは、抽出されると 5 次元のポイントとは別のファイルに配置されます)。

この記事で説明したものと同様の手法を使用しています: http://www.ddj.com/184410998

編集2:ここでこの質問をしたことを少し後悔しているので、正式に取り消されたと考えてください。しかし、これが私が既製の製品を使用しない理由です。私のデータは、3 次元から 22 次元までの範囲のポイントです。各ポイントを単なるリストと考えると、これらの数字と同じリストに表示されたすべての数字として、ポイントをクエリする方法を考えることができます。以下は、次元が低い (そして通常よりもデータ ポイントがはるかに少ない) 例です。

したがって、これはほとんどのデータベース プログラムにとって難しい小さな問題ですが、これをうまく処理できるプログラムがいくつか存在することは知っています。

しかし、問題はさらに複雑になります。すべての座標が同じというわけではありません。多くの場合、ガンマ球だけで実行するため、各座標はガンマ線エネルギーを表します。しかし、ガンマスフィアまたはマイクロボールと呼ばれる検出システムに中性子検出器を挿入する場合もあれば、ガンマスフィアで生成された核種がフラグメント質量分析器に送られる場合もあります。これらすべておよびその他の検出システムは、単独で、またはガンマスフィアと組み合わせて使用​​できます。残念ながら、ほとんどの場合、上記と同様の方法でこの追加データを選択できるようにしたいと考えています。したがって、座標にはさまざまな意味があります。ガンマスフィアに加えてマイクロボールがあれば、方程式 x + y = n の正の解と同じ数の方法で n 次元のイベントを構成できます。さらに、各座標には関連付けられたメタデータがあります。したがって、私が示した各数値には、少なくとも 2 つの追加の数値が関連付けられています。1 つ目はイベントを検出した検出器の検出器番号、2 つ目は特定のガンマ線が何回発生したかを表す効率値です。 (実際に検出される検出器に入るガンマ線のパーセンテージは、検出器とエネルギーによって変化するため)。

既製のデータベース ソリューションで、膨大な量のカスタマイズを行わなくても、これらすべてのことを同時に実行できるとは思えません。そのために費やされた時間は、一般的ではなく、私自身の解決策を書くことに費やされたほうがよいと私は信じています。一般性が失われるため、どのデータベース コードに対しても削除関数を実装する必要はありません。また、さまざまなタイプの座標をゲートするためのセカンダリ インデックスを作成する必要もありません (1 つのセットだけで、各ポイントを 1 回だけ効果的にカウントします)。等

0 投票する
12 に答える
8109 参照

.net - メタデータがSQLデータベースにある場合に、何百万ものファイルを保存/取得するための最良の方法

最初に300万から400万のPDFファイルを生成し、80K/日の速度で継続するプロセスがあります。それぞれかなり小さい(50K)ですが、私が心配しているのは、簡単に検索できるように、生成しているファイルの総量をどのように管理するかです。いくつかの詳細:

  1. ファイルが生成されたら、他のいくつかの手順を実行する必要があります。また、いくつかのサーバーが参加するため、ファイルが生成されるのを監視する必要があります。
  2. 生成されると、ファイルは私が作成したルックアッププロセスを通じて利用できるようになります。基本的に、ファイルごとに一意の注文番号に基づいてそれらをプルする必要があります。
  3. いつでも既存の注文番号を再送信でき、生成されたファイルは元のコピーを上書きする必要があります。

当初、私はこれらのファイルをすべてNAS上の単一のディレクトリに書き込むことを計画していましたが、何百万ものファイルがあり、Windowsが100万のファイル検索を非常に適切に処理しない可能性があるため、これは良い考えではないかもしれません。私はいくつかのアドバイスを探しています:

  1. 単一のフォルダで大丈夫ですか?ファイルが一覧表示されることはありません。ファイルは、私がすでに決定したファイル名のSystem.IO.Fileを使用してのみ取得されます。
  2. フォルダーを作成する場合、System.IO.DirectoryWatcherを使用して、その数のファイルでも新しいファイルを監視できますか、それとも、その数のファイルで速度が低下し始めますか?
  3. 代わりに、SQL ServerデータベースにBLOBとして保存する必要がありますか?参照値でそれらを取得する必要があるので、おそらくこれはより理にかなっています。

考えてくれてありがとう!

0 投票する
1 に答える
1244 参照

mysql - mysql の起動時に mysqlcheck を実行する必要がありますか?

私は大規模な (20 GB の innodb バッファー プールで約 10 GB) データベースを持っていますが、それを開始すると、実行中の最初の約 30 分間、データベースが定期的にすべてのテーブルをロックおよびロック解除し、非常に不快になることに気付きました。データベースの再起動後、最初の 30 分間、サイトにアクセスしようとしたユーザー向け。

因果関係を 100% 確信することはできませんが、データベース自体がロックおよびロック解除されている時間は、

データベースサーバーで実行されています。私の質問は、Mysql の起動時に mysqlcheck (デフォルトで mysql /etc/init.d/mysql スクリプトにあります) を実行する必要があるかどうかです。mysqlcheck で見つけた Google の結果は、それがテーブルを「修正して最適化する」ことを示していますが、テーブルが壊れるとは思わず、このユーティリティによってもたらされる最適化の利点には懐疑的です。

問題があれば、Mysql 5.0.32 を実行しています

0 投票する
2 に答える
198 参照

google-app-engine - Google App Engine で put() を使用してデータストアに 500 を超えるエントリを追加するにはどうすればよいですか?

db.put() を数回呼び出して、リストにデータのバッチを追加しようとしました。しかし、それでも時々タイムアウトします。

誰にもいくつかのヒントがありますか?

0 投票する
2 に答える
17075 参照

web-services - Web サービスを使用して大きなペイロードを転送するのは悪い考えですか?

POST または GET を介してRESTを使用する場合、基本的に送信できるデータの量に制限はないと思います。私は REST や Web サービスを使用したことがありませんが、ほとんどのサービスでは限られた量のデータしか転送されないようです。1 ~ 5MB 相当のデータを (どちらの方向にも) 転送したい場合、Web サービスは悪い考えと見なされますか?

更新: REST サービス経由で接続することを検討しているアプリは内部アプリです。他の接続オプション (つまり、RMI) を選択するオプションがあります。

0 投票する
1 に答える
1454 参照

sql - Oracle: ランク付けされた予測リストの前のレコードを検索

こんにちは、私は難しい問題に直面しています:

私は天気予報のテーブル (オラクル 9i) を持っています (サイズは何億ものレコードです)。その構成は次のようになります。

どこ:

  • stationid予報を作成する可能性のある多くの気象観測所の 1 つを指します。
  • forecastdate予測対象の日付を指します (時刻ではなく日付のみ)。
  • forecastintervalforecastdate予測の時間 (0 ~ 23) を参照します。
  • forecastcreated予測が行われた時間を指し、何日も前になる可能性があります。
  • forecastvalue予測の実際の値を参照します (名前が示すように)。

stationid与えられたものと与えられたものforecastdateとのペアについて、公称数(500など)よりも大きく増加forecastintervalするレコードを決定する必要があります。forecastvalueここに条件の表を示します。

上記のシナリオで、3 番目のレコードを取り出したいと思います。これは、予測値が公称 (100 など) だけ増加したレコードです。

テーブルのサイズが非常に大きく (何億ものレコード)、完了するまでに非常に長い時間がかかる (実際、クエリが返されないほど長い) ため、タスクは非常に困難であることが判明しています。

これらの値を取得するためのこれまでの私の試みは次のとおりです。

0 投票する
5 に答える
315 参照

php - メモリ内に 200MB の不変データ構造を維持し、スクリプトからアクセスする方法はありますか?

900 万の IP のリストがあり、一連のハッシュ テーブルを使用して、特定の IP がそのリストに含まれているかどうかを返す定数時間関数を作成できます。PHPでできますか?もしそうなら、どのように?