3

私は百万行のExcelシートを持っています。各行には100列あります。各行は100個の属性を持つクラスのインスタンスを表し、列の値はこれらの属性の値です。

百万のデータインスタンスを保存するために、ここで使用するのに最適なデータ構造はどれですか?

ありがとう

4

7 に答える 7

5

それは、このデータにどのようにアクセスする必要があるか、および何を最適化する必要があるか (容量と速度など) によって異なります。

  • スペースを最適化したい場合は、データをシリアル化して圧縮することもできますが、データを読み取ったり操作したりする必要がある場合は、おそらく役に立たないでしょう。
  • インデックスでアクセスする場合、最も単純なのは配列の配列です。
  • 代わりに、各オブジェクトが 100 個の属性を保持するオブジェクトの配列を使用すると、コードを構造化するためのより良い方法 (カプセル化!) が得られます。
  • データのクエリ/検索が必要な場合は、クエリの種類によって異なります。BSTデータ構造を見たいと思うかもしれません...
于 2012-06-19T05:17:55.180 に答える
3

100 個の値を持つ 100 万行で、各値が 8 バイトのメモリを使用するのはわずか 800 MB で、64 ビットの場合、ほとんどの PC esp のメモリに簡単に収まります。各列の型をできるだけコンパクトにするようにしてください。

データを格納するより効率的な方法は、列ごとです。つまり、各列にプリミティブ データ型の配列があります。これを行う必要さえないと思います。

数十億行など、さらに多くの行がある場合は、オフ ヒープ メモリ、つまりメモリ マップ ファイルとダイレクト メモリを使用できます。これにより、ヒープを比較的小さく保ちながら、メイン メモリよりも多くのデータを効率的に格納できます。(例: 1 GB のヒープで数百 GB のオフヒープ)

于 2012-06-19T07:19:41.943 に答える
3

すべてのデータをメモリに保存する場合は、通常、密集したテーブルの場合、またはほとんどのセルが空であることが予想される場合Tableに、Guavaの実装の 1 つを使用できます。それ以外の場合は、データベース (おそらく ehcache や terracota などのキャッシュ システムを備えたもの) の方が適しています。ArrayTableHashBasedTable

于 2012-06-19T05:20:54.707 に答える
0

最適なオプションは、ORACLE、MSSQL、MYSQL、および高速で大量のデータを保存できるその他のデータベースのように、大量のデータを保存でき、アクセシビリティを高速化するのに十分な速度のデータベースを使用することです。

于 2012-06-19T07:03:33.493 に答える
0

それぞれ 100 個の値を持つ行が本当に 100 万行以上ある場合、すべてが記憶に収まるとは思えません... または、特別な理由があるのでしょうか? たとえば、データベースを使用するとパフォーマンスが低下しますか?

ランダム アクセスが必要なので、hibernate のような永続化プロバイダーと、好きなデータベース (mysql など) を使用します。

ただし、永続化プロバイダーの使用方法がパフォーマンスに大きな影響を与えることに注意してください。たとえば、バッチ挿入を使用する必要があります (自動生成された ID とは互換性がありません)。

于 2012-06-19T07:14:43.287 に答える
0

その種のデータでは、MYSQL データベースを使用することをお勧めします。これは、高速で、そのような大きなファイルを蓄積できるためです。

于 2012-06-19T06:19:14.093 に答える