2011-11-15 12 views
0

データがRAMに保持されたJtableを持つアプリケーションを使用すると、1,000,000行×100列までのテーブルが使用できます。だから私はデータベースからJTableをバックアップするつもりですが、JTableからデータベースに直接アクセスすることはあまり役に立たないと思います。なぜなら、jtableが初期化されたときにデータベースのすべてのデータがメモリにロードされるか、ユーザーが選択したテーブルをスクロールして次のデータを取得しますが、これは遅すぎます。ソートはどのように処理しますか?JTableで大きなデータセットのバッキングとしてhibernateを使用する

私は正しい解決策は、JTableとデータベースの間にHibernateを貼り付けることだと思いますが、これが本当に大きなJTableでどのように役立つかはまだ分かりません。

誰も私に良い例を教えてもらえますか?大きなデータセットでこれを使ってメモリ使用量を減らした経験がありますか?

EDIT:データのサブセットのみが表示されるように、この多くのデータを含むテーブルにはフィルタが必要であるとのコメントを読んでいます。私は一般的な原則としてそれに同意し、ユーザーはフィルタリングする方法を決めることができますが、私はまだ 'ALL'オプションを提供する必要がありますが、これはすべてが爆発する可能性がある場所です。

スクロールしながら変化するデータのサブセットの種類を示す別の表の上に1つの表があることについても覚えていますが、この考え方の具体例は見ていません。

+0

も参照してください[スイングのための洗練されたスプレッドシートのことを知っていますか?](http://stackoverflow.com/questions/7663990/do-you-know-of-a-sophisticated-spread-sheet-like-スイングコンポーネント)。 [JPA](http://en.wikipedia.org/wiki/Java_Persistence_API)レイヤーは、ページングを簡単にすることができます。 – trashgod

答えて

0

改ページを行うには、以下の機能:検索された最初の行番号を設定する

  • setFirstResult(int firstResult)を取得する行の数を制限する

    • setMaxResults(int maxResults)(すなわち。 0は、ページ(pageNum)と現在のページ番号(pageNum)ごとに示すレコードの番号を格納する変数を持つべきで、最初の行)JTableの

    を意味します。

    Query q = entityManager.createQuery("from someTable tbl order by tbl.id asc"); 
    q.setFirstResult((pageNum -1)*pagesize).setMaxResults(pagesize); 
    

    重要ポイント:「ORDER BY」節がなければ

    • 、フェッチのため、ユーザが前方または後方にページを移動してpageNumを変更するたびに、このページのレコードをフェッチ行は予測できません。したがって、ページが前方および後方にブラウズされたときにレコードの表示順序が維持されるように、問合せを「order by clause」でソートする必要があります。

    はHibernateまたはJDBCを使用してJTableの改ページについて例えばthis(英語に翻訳するためにGoogle翻訳を使用)し、そのGithubを参照することができます。

  • +0

    JTableのページネーションについて考えたことはありません大きなテーブルのアイデアとそのリンクは、おかげで便利です上のビューとして、テーブルよりもずっと簡単に聞こえます。 –

    0

    Hibernateは、次のあなたを購入する: - 別のクエリを持つエントリの需要負荷に透明 - 脱水プロキシ(たとえば、彼らは唯一の主キーが含まれ、これは、より少ないメモリを消費する) のあなたのリストをreturnuing againsデータベースを照会します。休止状態のセッションが開いているときしかし、あまりにも長い間、それが遅くなる

    (それが詰まるinetrnalキャッシュを使用しています)

    あなたはまた、いくつかの文書(MongoDBのような、または無数の他)配向ノー-SQLデータベースを考慮することができる、これ

    あなたの場合、テーブル行が表示されているかどうかを追跡し、未使用のデータを破棄することができます。通常、表形式でレコードを大量に表示する機能のために、より少ないメモリを消費するために、レコードはStackoverflow reputation league

    休止のCriteriaQuery APIが提供する同じようにページ単位で示される

    +0

    ありがとう、良い点。私は、ドキュメントベースのデータベースは、私にとってはそれほどうまくいくとは思っていません。なぜなら、可視データではなく行を表すドキュメント全体をロードする必要があるからです。 –

    +0

    mongodbは文書のサブセットを読み込むことができますが、どのような場合でもnosqlデータベースの使用は正当化されなければならず、リレーショナルデータベースよりも理論と知識が少なくなります –

    関連する問題