Проблема с ORMlite именно в маппинге объектов. Из-за рефлекшна - работает он очень медленно, особенно если запрашивается большой объем данных.
Но эта проблема легко решается написанием своего маппера на конкретную таблицу/запрос.
Делается это примерно так :
// return the orders with the sum of their amounts per account
GenericRawResults<Foo> rawResults =
orderDao.queryRaw(
"select account_id,sum(amount) from orders group by account_id",
new RawRowMapper<Foo>() {
public Foo mapRow(String[] columnNames,
String[] resultColumns) {
return new Foo(Long.parseLong(resultColumns[0]),
Integer.parseInt(resultColumns[1]));
}
});
Однако большие запросы, частенько, сложно формировать и
оптимизировать в объектном виде, поэтому такие запросы проще делать напрямую (sql запрос через SQLiteOpenHelper). При этом лучше
работать с курсором, а не с объектами, чтобы избавится от задержки на маппинг и затрат память.
(Это касается только действительно тяжелых запросов)
P.S. Гигантские базы данных обычно в приложениях работающих в оффлайн режиме. Если же наличие интернета обязательно для работы приложения, то лучше выносить данные на сервер.