oracle occi resultset sebesség

 ( kl223 | 2009. június 30., kedd - 22:28 )

Üdv,

egy C++ alkalmazásban van szükségem többféle adatbázisrendszer támogatására.
Megírtam egy postgresql modult, libpqxx alapokon, ami kiválóan működik.

Majd megírtam egy oracle modult is, az occi interfészt használva. Ez a modul is működik, viszont jelentősen lassabb az adatok letöltése. Így néz ki kb egy SELECT lekérdezés futtatása és az eredmény feldolgozása az occi-vel:

    Statement *stmt = conn->createStatement("SELECT .......");
    ResultSet *res = stmt->executeQuery();

    while (res->next())
    {
        std::string s = res->getString(1); // első oszlop lekérdezése
        int i = res->getInt(2);            // második oszlop lekérdezése
        // ...
    }

    stmt->closeResultSet(res);
    conn->terminateStatement(stmt);

Ez a kód ugyanazokat az adatokat (lényegében azonos táblaszerkezet postgres és oracle alatt, és ugyanaz a SELECT query) kb 10x annyi idő alatt dolgozza fel. (3perc vs. 30perc)

Összehasonlításképp, itt az említett (gyorsabb) libpqxx-es kód:

    pqxx::work w(conn, "transaction_desc");
    pqxx::result res = w.exec("SELECT .............");

    for (
        result::const_iterator it = res.begin();
        it != res.end();
        ++it
    )
    {
        std::string s; int i;
        it[0].to(s);
        it[1].to(i);
        // ...
    }

Köszönettel,
kl223