insert d'hibernation haute performance

Je suis en train de travailler sur un temps de latence partie sensible d'une application, en gros je vais recevoir un événement sur le réseau de transformer les données, puis de les insérer toutes les données dans la DB. Après avoir établi le profil je vois que, fondamentalement, tout mon temps est consacré à essayer de sauver les données. voici le code

private void insertAllData(Collection<Data> dataItems)
{
    long start_time = System.currentTimeMillis();
    long save_time = 0;
    long commit_time = 0;
    Transaction tx = null;
    try
    {
        Session s = HibernateSessionFactory.getSession();
        s.setCacheMode(CacheMode.IGNORE);
        s.setFlushMode(FlushMode.NEVER);
        tx = s.beginTransaction();
        for(Data data : dataItems)
        {
            s.saveOrUpdate(data);
        }
        save_time = System.currentTimeMillis();
        tx.commit();
        s.flush();
        s.clear();
    }
    catch(HibernateException ex)
    {
        if(tx != null)
            tx.rollback();
    }
    commit_time = System.currentTimeMillis();
    System.out.println("Save: " + (save_time - start_time));
    System.out.println("Commit: " + (commit_time - save_time));
    System.out.println();
}

La taille de la collection est toujours inférieur à 20. voici les données de temps que je vois:

Save: 27
Commit: 9

Save: 27
Commit: 9

Save: 26
Commit: 9

Save: 36
Commit: 9

Save: 44
Commit: 0

C'est confus pour moi. Je me figure que le save devrait être rapide et de tous les temps devrait être consacré à commit. mais il est clair que je me trompe. J'ai également essayé de supprimer la transaction (ce n'est pas vraiment nécessaire), mais j'ai vu pire des fois... j'ai mis en veille prolongée.jdbc.batch_size=20...

Je peux attendre pour obtenir autant que 500 messages/sec donc j'ai besoin unique de gestion de messages à moins de 20 millisecondes.

j'ai besoin de cette opération pour être aussi rapide que possible, idéalement, il serait seulement un aller-retour à la base de données. Comment puis-je faire cela?

source d'informationauteur luke